@skillsmith/core 0.4.14 → 0.4.15

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 (214) hide show
  1. package/README.md +2 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/api/client.d.ts +1 -0
  4. package/dist/src/api/client.d.ts.map +1 -1
  5. package/dist/src/api/client.health.d.ts +26 -0
  6. package/dist/src/api/client.health.d.ts.map +1 -0
  7. package/dist/src/api/client.health.js +74 -0
  8. package/dist/src/api/client.health.js.map +1 -0
  9. package/dist/src/api/client.js +3 -51
  10. package/dist/src/api/client.js.map +1 -1
  11. package/dist/src/db/createDatabase.d.ts +9 -1
  12. package/dist/src/db/createDatabase.d.ts.map +1 -1
  13. package/dist/src/db/createDatabase.js +9 -1
  14. package/dist/src/db/createDatabase.js.map +1 -1
  15. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
  16. package/dist/src/db/drivers/sqljsDriver.js +5 -2
  17. package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
  18. package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
  19. package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
  20. package/dist/src/db/migrations/v5b-change-type.js +22 -0
  21. package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
  22. package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
  23. package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
  24. package/dist/src/db/migrations/v6-advisories.js +53 -0
  25. package/dist/src/db/migrations/v6-advisories.js.map +1 -0
  26. package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
  27. package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
  28. package/dist/src/db/migrations/v7-compatibility.js +23 -0
  29. package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
  30. package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
  31. package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
  32. package/dist/src/db/migrations/v8-co-installs.js +33 -0
  33. package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
  34. package/dist/src/db/schema.d.ts +5 -16
  35. package/dist/src/db/schema.d.ts.map +1 -1
  36. package/dist/src/db/schema.js +37 -22
  37. package/dist/src/db/schema.js.map +1 -1
  38. package/dist/src/exports/repositories.d.ts +5 -0
  39. package/dist/src/exports/repositories.d.ts.map +1 -1
  40. package/dist/src/exports/repositories.js +17 -0
  41. package/dist/src/exports/repositories.js.map +1 -1
  42. package/dist/src/exports/types.d.ts +1 -1
  43. package/dist/src/exports/types.d.ts.map +1 -1
  44. package/dist/src/exports/types.js.map +1 -1
  45. package/dist/src/indexer/SkillParser.d.ts +2 -0
  46. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  47. package/dist/src/indexer/SkillParser.js.map +1 -1
  48. package/dist/src/learning/PatternStore.d.ts +0 -2
  49. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  50. package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
  51. package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
  52. package/dist/src/learning/PatternStore.helpers.js +51 -0
  53. package/dist/src/learning/PatternStore.helpers.js.map +1 -1
  54. package/dist/src/learning/PatternStore.js +5 -37
  55. package/dist/src/learning/PatternStore.js.map +1 -1
  56. package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
  57. package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
  58. package/dist/src/repositories/AdvisoryRepository.js +128 -0
  59. package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
  60. package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
  61. package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
  62. package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
  63. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
  64. package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
  65. package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
  66. package/dist/src/repositories/CoInstallRepository.js +122 -0
  67. package/dist/src/repositories/CoInstallRepository.js.map +1 -0
  68. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  69. package/dist/src/repositories/SkillRepository.js +16 -5
  70. package/dist/src/repositories/SkillRepository.js.map +1 -1
  71. package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
  72. package/dist/src/services/SearchService.helpers.js +4 -0
  73. package/dist/src/services/SearchService.helpers.js.map +1 -1
  74. package/dist/src/services/SearchService.types.d.ts +1 -0
  75. package/dist/src/services/SearchService.types.d.ts.map +1 -1
  76. package/dist/src/services/TaskRunner.d.ts +5 -81
  77. package/dist/src/services/TaskRunner.d.ts.map +1 -1
  78. package/dist/src/services/TaskRunner.js +7 -68
  79. package/dist/src/services/TaskRunner.js.map +1 -1
  80. package/dist/src/services/TaskRunner.process.d.ts +33 -0
  81. package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
  82. package/dist/src/services/TaskRunner.process.js +70 -0
  83. package/dist/src/services/TaskRunner.process.js.map +1 -0
  84. package/dist/src/services/TaskRunner.types.d.ts +76 -0
  85. package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
  86. package/dist/src/services/TaskRunner.types.js +22 -0
  87. package/dist/src/services/TaskRunner.types.js.map +1 -0
  88. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
  89. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
  90. package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
  91. package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
  92. package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
  93. package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
  94. package/dist/src/services/quarantine/QuarantineService.js +8 -205
  95. package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
  96. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
  97. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
  98. package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
  99. package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
  100. package/dist/src/session/SessionManager.d.ts +2 -33
  101. package/dist/src/session/SessionManager.d.ts.map +1 -1
  102. package/dist/src/session/SessionManager.js +14 -238
  103. package/dist/src/session/SessionManager.js.map +1 -1
  104. package/dist/src/session/SessionManager.memory.d.ts +67 -0
  105. package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
  106. package/dist/src/session/SessionManager.memory.js +262 -0
  107. package/dist/src/session/SessionManager.memory.js.map +1 -0
  108. package/dist/src/sync/SyncEngine.d.ts +13 -1
  109. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  110. package/dist/src/sync/SyncEngine.js +50 -1
  111. package/dist/src/sync/SyncEngine.js.map +1 -1
  112. package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
  113. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
  114. package/dist/src/testing/MultiLLMProvider.js +18 -130
  115. package/dist/src/testing/MultiLLMProvider.js.map +1 -1
  116. package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
  117. package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
  118. package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
  119. package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
  120. package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
  121. package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
  122. package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
  123. package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
  124. package/dist/src/types/skill.d.ts +10 -0
  125. package/dist/src/types/skill.d.ts.map +1 -1
  126. package/dist/src/types.d.ts +30 -0
  127. package/dist/src/types.d.ts.map +1 -1
  128. package/dist/src/versioning/change-classifier.d.ts +38 -0
  129. package/dist/src/versioning/change-classifier.d.ts.map +1 -0
  130. package/dist/src/versioning/change-classifier.js +187 -0
  131. package/dist/src/versioning/change-classifier.js.map +1 -0
  132. package/dist/src/versioning/change-classifier.test.d.ts +6 -0
  133. package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
  134. package/dist/src/versioning/change-classifier.test.js +275 -0
  135. package/dist/src/versioning/change-classifier.test.js.map +1 -0
  136. package/dist/src/versioning/update-risk.d.ts +50 -0
  137. package/dist/src/versioning/update-risk.d.ts.map +1 -0
  138. package/dist/src/versioning/update-risk.js +80 -0
  139. package/dist/src/versioning/update-risk.js.map +1 -0
  140. package/dist/src/versioning/update-risk.test.d.ts +6 -0
  141. package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
  142. package/dist/src/versioning/update-risk.test.js +200 -0
  143. package/dist/src/versioning/update-risk.test.js.map +1 -0
  144. package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
  145. package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
  146. package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
  147. package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
  148. package/dist/tests/CacheManager.test.d.ts +9 -0
  149. package/dist/tests/CacheManager.test.d.ts.map +1 -0
  150. package/dist/tests/CacheManager.test.js +163 -0
  151. package/dist/tests/CacheManager.test.js.map +1 -0
  152. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
  153. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
  154. package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
  155. package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
  156. package/dist/tests/SearchService.test.js +71 -0
  157. package/dist/tests/SearchService.test.js.map +1 -1
  158. package/dist/tests/SkillVersionRepository.test.d.ts +0 -11
  159. package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -1
  160. package/dist/tests/SkillVersionRepository.test.js +131 -194
  161. package/dist/tests/SkillVersionRepository.test.js.map +1 -1
  162. package/dist/tests/api/client.health.test.d.ts +15 -0
  163. package/dist/tests/api/client.health.test.d.ts.map +1 -0
  164. package/dist/tests/api/client.health.test.js +111 -0
  165. package/dist/tests/api/client.health.test.js.map +1 -0
  166. package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
  167. package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
  168. package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
  169. package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
  170. package/dist/tests/db/database-abstraction.test.js +12 -0
  171. package/dist/tests/db/database-abstraction.test.js.map +1 -1
  172. package/dist/tests/db/schema-migrations.test.d.ts +10 -0
  173. package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
  174. package/dist/tests/db/schema-migrations.test.js +134 -0
  175. package/dist/tests/db/schema-migrations.test.js.map +1 -0
  176. package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
  177. package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
  178. package/dist/tests/db/sqljsDriver.test.js +75 -0
  179. package/dist/tests/db/sqljsDriver.test.js.map +1 -0
  180. package/dist/tests/helpers/database.d.ts +32 -0
  181. package/dist/tests/helpers/database.d.ts.map +1 -0
  182. package/dist/tests/helpers/database.js +54 -0
  183. package/dist/tests/helpers/database.js.map +1 -0
  184. package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
  185. package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
  186. package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
  187. package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
  188. package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
  189. package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
  190. package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
  191. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
  192. package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
  193. package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
  194. package/dist/tests/routing/LanguageRouter.test.js +150 -0
  195. package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
  196. package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
  197. package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
  198. package/dist/tests/session/SessionManager.memory.test.js +219 -0
  199. package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
  200. package/dist/tests/sync/SyncEngine.test.js +32 -18
  201. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  202. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
  203. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
  204. package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
  205. package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
  206. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
  207. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
  208. package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
  209. package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
  210. package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
  211. package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
  212. package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
  213. package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
  214. package/package.json +1 -1
@@ -4,8 +4,8 @@ import { EmbeddingService } from '../embeddings/index.js';
4
4
  export { DEFAULT_EWC_CONFIG, DEFAULT_PATTERN_STORE_CONFIG, PATTERN_REWARDS, } from './PatternStore.types.js';
5
5
  export { FisherInformationMatrix } from './PatternStore.helpers.js';
6
6
  import { DEFAULT_EWC_CONFIG, DEFAULT_PATTERN_STORE_CONFIG } from './PatternStore.types.js';
7
- import { PATTERN_STORE_SCHEMA, FisherInformationMatrix, contextToText, computeGradient, deserializeEmbedding, cosineSimilarity, importanceWeightedSimilarity, calculatePatternImportance, calculateDimensionImportance, rowToStoredPattern, } from './PatternStore.helpers.js';
8
- import { getPatternCount, getDatabaseSize, getSamplePatterns, getAllPatterns, updatePatternInDB, updatePatternImportance, updateAccessCount, deletePattern, loadFisherMatrixData, saveFisherMatrixData, recordConsolidation, getPatternsByOutcome, getAverageImportance, getHighImportanceCount, getConsolidationStats, getContextEmbeddings, } from './PatternStore.queries.js';
7
+ import { PATTERN_STORE_SCHEMA, FisherInformationMatrix, contextToText, computeGradient, deserializeEmbedding, cosineSimilarity, importanceWeightedSimilarity, calculatePatternImportance, calculateDimensionImportance, rowToStoredPattern, computeAverageEmbedding, shouldConsolidate, } from './PatternStore.helpers.js';
8
+ import { getPatternCount, getDatabaseSize, getSamplePatterns, getAllPatterns, updatePatternInDB, updatePatternImportance, updateAccessCount, deletePattern, loadFisherMatrixData, saveFisherMatrixData, recordConsolidation, getPatternsByOutcome, getAverageImportance, getHighImportanceCount, getConsolidationStats, } from './PatternStore.queries.js';
9
9
  /** PatternStore - EWC++ pattern storage for successful recommendation matches */
10
10
  export class PatternStore {
11
11
  db;
@@ -102,12 +102,12 @@ export class PatternStore {
102
102
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, unixepoch(), unixepoch())
103
103
  `);
104
104
  stmt.run(patternId, Buffer.from(contextEmbedding.buffer), pattern.skill.skillId, JSON.stringify(pattern.skill), JSON.stringify(pattern.context), outcome.type, outcome.reward, importance, pattern.originalScore, pattern.source);
105
- const avgEmbedding = await this.computeAverageEmbedding();
105
+ const avgEmbedding = await computeAverageEmbedding(this.db, 100, this.config.dimensions);
106
106
  const gradient = computeGradient(contextEmbedding, avgEmbedding);
107
107
  this.fisherMatrix.update(gradient);
108
108
  this.consolidationState.patternsSinceLastConsolidation++;
109
109
  this.consolidationState.totalPatterns++;
110
- if (this.config.autoConsolidate && this.shouldConsolidate()) {
110
+ if (this.config.autoConsolidate && shouldConsolidate(this.consolidationState, this.ewcConfig)) {
111
111
  await this.consolidate();
112
112
  }
113
113
  this.saveFisherMatrix();
@@ -188,7 +188,7 @@ export class PatternStore {
188
188
  }
189
189
  this.fisherMatrix.decay(this.ewcConfig.fisherDecay);
190
190
  const samplePatterns = getSamplePatterns(this.db, this.ewcConfig.fisherSampleSize, this.config.dimensions);
191
- const avgEmbedding = await this.computeAverageEmbedding();
191
+ const avgEmbedding = await computeAverageEmbedding(this.db, 100, this.config.dimensions);
192
192
  for (const pattern of samplePatterns) {
193
193
  const gradient = computeGradient(pattern.contextEmbedding, avgEmbedding);
194
194
  this.fisherMatrix.update(gradient);
@@ -294,38 +294,6 @@ export class PatternStore {
294
294
  throw new Error('PatternStore not initialized. Call initialize() first.');
295
295
  }
296
296
  }
297
- async computeAverageEmbedding() {
298
- const rows = getContextEmbeddings(this.db, 100);
299
- if (rows.length === 0) {
300
- return new Float32Array(this.config.dimensions);
301
- }
302
- const sum = new Float32Array(this.config.dimensions);
303
- for (const row of rows) {
304
- const embedding = deserializeEmbedding(row.context_embedding, this.config.dimensions);
305
- for (let i = 0; i < embedding.length; i++) {
306
- sum[i] += embedding[i];
307
- }
308
- }
309
- for (let i = 0; i < sum.length; i++) {
310
- sum[i] /= rows.length;
311
- }
312
- return sum;
313
- }
314
- shouldConsolidate() {
315
- if (this.consolidationState.lastConsolidation) {
316
- const hoursSinceLast = (Date.now() - this.consolidationState.lastConsolidation.getTime()) / (60 * 60 * 1000);
317
- if (hoursSinceLast < 1)
318
- return false;
319
- }
320
- if (this.consolidationState.totalPatterns === 0)
321
- return false;
322
- const newPatternsRatio = this.consolidationState.patternsSinceLastConsolidation / this.consolidationState.totalPatterns;
323
- if (newPatternsRatio >= this.ewcConfig.consolidationThreshold)
324
- return true;
325
- if (this.consolidationState.totalPatterns > this.ewcConfig.maxPatterns * 0.9)
326
- return true;
327
- return false;
328
- }
329
297
  loadFisherMatrix() {
330
298
  const matrixData = loadFisherMatrixData(this.db);
331
299
  if (matrixData) {
@@ -1 +1 @@
1
- {"version":3,"file":"PatternStore.js","sourceRoot":"","sources":["../../../src/learning/PatternStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PatternStore.js","sourceRoot":"","sources":["../../../src/learning/PatternStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @fileoverview AdvisoryRepository — vulnerability advisory storage and retrieval
3
+ * @module @skillsmith/core/repositories/AdvisoryRepository
4
+ * @see SMI-skill-version-tracking Wave 3
5
+ *
6
+ * Provides CRUD operations for skill security advisories stored in
7
+ * the skill_advisories table (introduced in migration v6).
8
+ *
9
+ * Design notes:
10
+ * - No FK on skill_id — soft reference, advisory history survives skill removal
11
+ * - upsertAdvisory is idempotent via INSERT OR REPLACE
12
+ * - "Active" advisories are those where withdrawn_at IS NULL
13
+ */
14
+ import type { Database as DatabaseType } from '../db/database-interface.js';
15
+ /**
16
+ * A skill security advisory record
17
+ */
18
+ export interface SkillAdvisory {
19
+ /** SSA-YYYY-NNN format advisory identifier */
20
+ id: string;
21
+ /** Registry skill identifier (soft reference — no FK) */
22
+ skillId: string;
23
+ /** Advisory severity level */
24
+ severity: 'low' | 'medium' | 'high' | 'critical';
25
+ /** Short advisory title */
26
+ title: string;
27
+ /** Full advisory description */
28
+ description: string;
29
+ /** JSON array of affected version ranges */
30
+ affectedVersions?: string;
31
+ /** JSON array of patched version ranges */
32
+ patchedVersions?: string;
33
+ /** JSON array of CWE identifiers */
34
+ cweIds?: string;
35
+ /** JSON array of reference URLs */
36
+ advisoryRefs?: string;
37
+ /** ISO datetime when advisory was published */
38
+ publishedAt: string;
39
+ /** ISO datetime if advisory was retracted (undefined = still active) */
40
+ withdrawnAt?: string;
41
+ /** Row creation timestamp (set by DB default on insert) */
42
+ createdAt?: string;
43
+ }
44
+ /**
45
+ * Repository for reading and writing skill advisory records
46
+ */
47
+ export declare class AdvisoryRepository {
48
+ private db;
49
+ constructor(db: DatabaseType);
50
+ private rowToAdvisory;
51
+ /**
52
+ * Insert or replace an advisory record.
53
+ *
54
+ * Idempotent: re-running with the same id replaces the existing row.
55
+ *
56
+ * @param advisory - Advisory data to persist
57
+ */
58
+ upsertAdvisory(advisory: SkillAdvisory): void;
59
+ /**
60
+ * Mark an advisory as withdrawn by setting withdrawn_at to the current time.
61
+ *
62
+ * @param id - Advisory identifier to withdraw
63
+ */
64
+ withdrawAdvisory(id: string): void;
65
+ /**
66
+ * Get all active (non-withdrawn) advisories for a specific skill.
67
+ *
68
+ * @param skillId - Registry skill identifier
69
+ * @returns Array of active SkillAdvisory records ordered by published_at DESC
70
+ */
71
+ getAdvisoriesForSkill(skillId: string): SkillAdvisory[];
72
+ /**
73
+ * Get all active advisories, optionally filtered by severity.
74
+ *
75
+ * @param severity - Optional severity filter; omit to return all active advisories
76
+ * @returns Array of active SkillAdvisory records ordered by published_at DESC
77
+ */
78
+ getActiveAdvisories(severity?: 'low' | 'medium' | 'high' | 'critical'): SkillAdvisory[];
79
+ }
80
+ //# sourceMappingURL=AdvisoryRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdvisoryRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/AdvisoryRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAM3E;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,8BAA8B;IAC9B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAA;IAChD,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAyBD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,EAAE,YAAY;IAQ5B,OAAO,CAAC,aAAa;IAqBrB;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAwB7C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAclC;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAgBvD;;;;;OAKG;IACH,mBAAmB,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,EAAE;CA8BxF"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @fileoverview AdvisoryRepository — vulnerability advisory storage and retrieval
3
+ * @module @skillsmith/core/repositories/AdvisoryRepository
4
+ * @see SMI-skill-version-tracking Wave 3
5
+ *
6
+ * Provides CRUD operations for skill security advisories stored in
7
+ * the skill_advisories table (introduced in migration v6).
8
+ *
9
+ * Design notes:
10
+ * - No FK on skill_id — soft reference, advisory history survives skill removal
11
+ * - upsertAdvisory is idempotent via INSERT OR REPLACE
12
+ * - "Active" advisories are those where withdrawn_at IS NULL
13
+ */
14
+ // ============================================================================
15
+ // Repository
16
+ // ============================================================================
17
+ /**
18
+ * Repository for reading and writing skill advisory records
19
+ */
20
+ export class AdvisoryRepository {
21
+ db;
22
+ constructor(db) {
23
+ this.db = db;
24
+ }
25
+ // --------------------------------------------------------------------------
26
+ // Private helpers
27
+ // --------------------------------------------------------------------------
28
+ rowToAdvisory(row) {
29
+ return {
30
+ id: row.id,
31
+ skillId: row.skill_id,
32
+ severity: row.severity,
33
+ title: row.title,
34
+ description: row.description,
35
+ affectedVersions: row.affected_versions ?? undefined,
36
+ patchedVersions: row.patched_versions ?? undefined,
37
+ cweIds: row.cwe_ids ?? undefined,
38
+ advisoryRefs: row.advisory_refs ?? undefined,
39
+ publishedAt: row.published_at,
40
+ withdrawnAt: row.withdrawn_at ?? undefined,
41
+ createdAt: row.created_at,
42
+ };
43
+ }
44
+ // --------------------------------------------------------------------------
45
+ // Writes
46
+ // --------------------------------------------------------------------------
47
+ /**
48
+ * Insert or replace an advisory record.
49
+ *
50
+ * Idempotent: re-running with the same id replaces the existing row.
51
+ *
52
+ * @param advisory - Advisory data to persist
53
+ */
54
+ upsertAdvisory(advisory) {
55
+ this.db
56
+ .prepare(`INSERT OR REPLACE INTO skill_advisories
57
+ (id, skill_id, severity, title, description,
58
+ affected_versions, patched_versions, cwe_ids, advisory_refs,
59
+ published_at, withdrawn_at)
60
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
61
+ .run(advisory.id, advisory.skillId, advisory.severity, advisory.title, advisory.description, advisory.affectedVersions ?? null, advisory.patchedVersions ?? null, advisory.cweIds ?? null, advisory.advisoryRefs ?? null, advisory.publishedAt, advisory.withdrawnAt ?? null);
62
+ }
63
+ /**
64
+ * Mark an advisory as withdrawn by setting withdrawn_at to the current time.
65
+ *
66
+ * @param id - Advisory identifier to withdraw
67
+ */
68
+ withdrawAdvisory(id) {
69
+ this.db
70
+ .prepare(`UPDATE skill_advisories
71
+ SET withdrawn_at = datetime('now')
72
+ WHERE id = ?`)
73
+ .run(id);
74
+ }
75
+ // --------------------------------------------------------------------------
76
+ // Reads
77
+ // --------------------------------------------------------------------------
78
+ /**
79
+ * Get all active (non-withdrawn) advisories for a specific skill.
80
+ *
81
+ * @param skillId - Registry skill identifier
82
+ * @returns Array of active SkillAdvisory records ordered by published_at DESC
83
+ */
84
+ getAdvisoriesForSkill(skillId) {
85
+ const rows = this.db
86
+ .prepare(`SELECT id, skill_id, severity, title, description,
87
+ affected_versions, patched_versions, cwe_ids, advisory_refs,
88
+ published_at, withdrawn_at, created_at
89
+ FROM skill_advisories
90
+ WHERE skill_id = ?
91
+ AND withdrawn_at IS NULL
92
+ ORDER BY published_at DESC`)
93
+ .all(skillId);
94
+ return rows.map((r) => this.rowToAdvisory(r));
95
+ }
96
+ /**
97
+ * Get all active advisories, optionally filtered by severity.
98
+ *
99
+ * @param severity - Optional severity filter; omit to return all active advisories
100
+ * @returns Array of active SkillAdvisory records ordered by published_at DESC
101
+ */
102
+ getActiveAdvisories(severity) {
103
+ let rows;
104
+ if (severity) {
105
+ rows = this.db
106
+ .prepare(`SELECT id, skill_id, severity, title, description,
107
+ affected_versions, patched_versions, cwe_ids, advisory_refs,
108
+ published_at, withdrawn_at, created_at
109
+ FROM skill_advisories
110
+ WHERE withdrawn_at IS NULL
111
+ AND severity = ?
112
+ ORDER BY published_at DESC`)
113
+ .all(severity);
114
+ }
115
+ else {
116
+ rows = this.db
117
+ .prepare(`SELECT id, skill_id, severity, title, description,
118
+ affected_versions, patched_versions, cwe_ids, advisory_refs,
119
+ published_at, withdrawn_at, created_at
120
+ FROM skill_advisories
121
+ WHERE withdrawn_at IS NULL
122
+ ORDER BY published_at DESC`)
123
+ .all();
124
+ }
125
+ return rows.map((r) => this.rowToAdvisory(r));
126
+ }
127
+ }
128
+ //# sourceMappingURL=AdvisoryRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdvisoryRepository.js","sourceRoot":"","sources":["../../../src/repositories/AdvisoryRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAyDH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACrB,EAAE,CAAc;IAExB,YAAY,EAAgB;QAC1B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAErE,aAAa,CAAC,GAAgB;QACpC,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,gBAAgB,EAAE,GAAG,CAAC,iBAAiB,IAAI,SAAS;YACpD,eAAe,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;YAClD,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;YAChC,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;YAC5C,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;YAC1C,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,SAAS;IACT,6EAA6E;IAE7E;;;;;;OAMG;IACH,cAAc,CAAC,QAAuB;QACpC,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;kDAI0C,CAC3C;aACA,GAAG,CACF,QAAQ,CAAC,EAAE,EACX,QAAQ,CAAC,OAAO,EAChB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,gBAAgB,IAAI,IAAI,EACjC,QAAQ,CAAC,eAAe,IAAI,IAAI,EAChC,QAAQ,CAAC,MAAM,IAAI,IAAI,EACvB,QAAQ,CAAC,YAAY,IAAI,IAAI,EAC7B,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,WAAW,IAAI,IAAI,CAC7B,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,EAAU;QACzB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;uBAEe,CAChB;aACA,GAAG,CAAC,EAAE,CAAC,CAAA;IACZ,CAAC;IAED,6EAA6E;IAC7E,QAAQ;IACR,6EAA6E;IAE7E;;;;;OAKG;IACH,qBAAqB,CAAC,OAAe;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;;qCAM6B,CAC9B;aACA,GAAG,CAAC,OAAO,CAAkB,CAAA;QAEhC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CAAC,QAAiD;QACnE,IAAI,IAAmB,CAAA;QAEvB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,GAAG,IAAI,CAAC,EAAE;iBACX,OAAO,CACN;;;;;;uCAM6B,CAC9B;iBACA,GAAG,CAAC,QAAQ,CAAkB,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,EAAE;iBACX,OAAO,CACN;;;;;uCAK6B,CAC9B;iBACA,GAAG,EAAmB,CAAA;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Unit tests for AdvisoryRepository
3
+ * @see SMI-skill-version-tracking Wave 3
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=AdvisoryRepository.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdvisoryRepository.test.d.ts","sourceRoot":"","sources":["../../../src/repositories/AdvisoryRepository.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * @fileoverview Unit tests for AdvisoryRepository
3
+ * @see SMI-skill-version-tracking Wave 3
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
6
+ import { createTestDatabase, closeDatabase } from '../../tests/helpers/database.js';
7
+ import { AdvisoryRepository } from './AdvisoryRepository.js';
8
+ // ============================================================================
9
+ // Test helpers
10
+ // ============================================================================
11
+ function makeAdvisory(overrides = {}) {
12
+ return {
13
+ id: 'SSA-2026-001',
14
+ skillId: 'community/commit-helper',
15
+ severity: 'high',
16
+ title: 'Prompt injection in commit-helper',
17
+ description: 'Maliciously crafted commit messages can inject arbitrary prompts.',
18
+ publishedAt: '2026-01-15T00:00:00Z',
19
+ ...overrides,
20
+ };
21
+ }
22
+ // ============================================================================
23
+ // Tests
24
+ // ============================================================================
25
+ describe('AdvisoryRepository', () => {
26
+ let db;
27
+ let repo;
28
+ beforeEach(() => {
29
+ db = createTestDatabase();
30
+ repo = new AdvisoryRepository(db);
31
+ });
32
+ afterEach(() => {
33
+ closeDatabase(db);
34
+ });
35
+ // --------------------------------------------------------------------------
36
+ // upsertAdvisory
37
+ // --------------------------------------------------------------------------
38
+ describe('upsertAdvisory', () => {
39
+ it('creates a new advisory record', () => {
40
+ const advisory = makeAdvisory();
41
+ repo.upsertAdvisory(advisory);
42
+ const results = repo.getAdvisoriesForSkill('community/commit-helper');
43
+ expect(results).toHaveLength(1);
44
+ expect(results[0].id).toBe('SSA-2026-001');
45
+ expect(results[0].severity).toBe('high');
46
+ expect(results[0].title).toBe('Prompt injection in commit-helper');
47
+ });
48
+ it('replaces an existing advisory on re-upsert (idempotent)', () => {
49
+ repo.upsertAdvisory(makeAdvisory({ title: 'Original title' }));
50
+ repo.upsertAdvisory(makeAdvisory({ title: 'Updated title' }));
51
+ const results = repo.getAdvisoriesForSkill('community/commit-helper');
52
+ expect(results).toHaveLength(1);
53
+ expect(results[0].title).toBe('Updated title');
54
+ });
55
+ it('stores optional JSON fields correctly', () => {
56
+ const advisory = makeAdvisory({
57
+ affectedVersions: '["<1.2.0"]',
58
+ patchedVersions: '[">=1.2.0"]',
59
+ cweIds: '["CWE-77"]',
60
+ advisoryRefs: '["https://example.com/advisory"]',
61
+ });
62
+ repo.upsertAdvisory(advisory);
63
+ const results = repo.getAdvisoriesForSkill('community/commit-helper');
64
+ expect(results[0].affectedVersions).toBe('["<1.2.0"]');
65
+ expect(results[0].patchedVersions).toBe('[">=1.2.0"]');
66
+ expect(results[0].cweIds).toBe('["CWE-77"]');
67
+ expect(results[0].advisoryRefs).toBe('["https://example.com/advisory"]');
68
+ });
69
+ });
70
+ // --------------------------------------------------------------------------
71
+ // getAdvisoriesForSkill
72
+ // --------------------------------------------------------------------------
73
+ describe('getAdvisoriesForSkill', () => {
74
+ it('returns only active (non-withdrawn) advisories for the given skill', () => {
75
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-001', skillId: 'community/commit-helper' }));
76
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-002', skillId: 'community/commit-helper' }));
77
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-003', skillId: 'community/other-skill' }));
78
+ // Withdraw SSA-2026-001
79
+ repo.withdrawAdvisory('SSA-2026-001');
80
+ const results = repo.getAdvisoriesForSkill('community/commit-helper');
81
+ expect(results).toHaveLength(1);
82
+ expect(results[0].id).toBe('SSA-2026-002');
83
+ });
84
+ it('returns empty array when skill has no advisories', () => {
85
+ const results = repo.getAdvisoriesForSkill('community/nonexistent');
86
+ expect(results).toHaveLength(0);
87
+ });
88
+ it('does not return advisories for other skills', () => {
89
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-004', skillId: 'community/other-skill' }));
90
+ const results = repo.getAdvisoriesForSkill('community/commit-helper');
91
+ expect(results).toHaveLength(0);
92
+ });
93
+ });
94
+ // --------------------------------------------------------------------------
95
+ // getActiveAdvisories
96
+ // --------------------------------------------------------------------------
97
+ describe('getActiveAdvisories', () => {
98
+ beforeEach(() => {
99
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-010', severity: 'critical', skillId: 'community/skill-a' }));
100
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-011', severity: 'high', skillId: 'community/skill-b' }));
101
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-012', severity: 'medium', skillId: 'community/skill-c' }));
102
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-013', severity: 'low', skillId: 'community/skill-d' }));
103
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-014', severity: 'high', skillId: 'community/skill-e' }));
104
+ // Withdraw one of the high advisories
105
+ repo.withdrawAdvisory('SSA-2026-014');
106
+ });
107
+ it('returns all active advisories when no severity filter', () => {
108
+ const results = repo.getActiveAdvisories();
109
+ // 4 active (SSA-2026-010 through SSA-2026-013), SSA-2026-014 is withdrawn
110
+ expect(results).toHaveLength(4);
111
+ });
112
+ it('filters by severity when provided', () => {
113
+ const highs = repo.getActiveAdvisories('high');
114
+ expect(highs).toHaveLength(1);
115
+ expect(highs[0].id).toBe('SSA-2026-011');
116
+ });
117
+ it('returns active advisories for the given severity', () => {
118
+ const results = repo.getActiveAdvisories('critical');
119
+ // SSA-2026-010 is still active
120
+ expect(results).toHaveLength(1);
121
+ expect(results[0].id).toBe('SSA-2026-010');
122
+ });
123
+ it('does not return withdrawn advisories in unfiltered results', () => {
124
+ const results = repo.getActiveAdvisories();
125
+ const ids = results.map((r) => r.id);
126
+ expect(ids).not.toContain('SSA-2026-014');
127
+ });
128
+ });
129
+ // --------------------------------------------------------------------------
130
+ // withdrawAdvisory
131
+ // --------------------------------------------------------------------------
132
+ describe('withdrawAdvisory', () => {
133
+ it('sets withdrawn_at on the advisory', () => {
134
+ repo.upsertAdvisory(makeAdvisory({ id: 'SSA-2026-020' }));
135
+ // Advisory should be active before withdrawal
136
+ const before = repo.getAdvisoriesForSkill('community/commit-helper');
137
+ expect(before).toHaveLength(1);
138
+ repo.withdrawAdvisory('SSA-2026-020');
139
+ // Advisory should no longer appear in active queries
140
+ const after = repo.getAdvisoriesForSkill('community/commit-helper');
141
+ expect(after).toHaveLength(0);
142
+ });
143
+ it('is a no-op for non-existent advisory id', () => {
144
+ // Should not throw
145
+ expect(() => repo.withdrawAdvisory('SSA-9999-999')).not.toThrow();
146
+ });
147
+ });
148
+ });
149
+ //# sourceMappingURL=AdvisoryRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdvisoryRepository.test.js","sourceRoot":"","sources":["../../../src/repositories/AdvisoryRepository.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @fileoverview CoInstallRepository — session-scoped co-install tracking
3
+ * @module @skillsmith/core/repositories/CoInstallRepository
4
+ * @see SMI-2761: Co-install recommendations
5
+ *
6
+ * Records pairs of skills installed together in the same session.
7
+ * Symmetric: installing (A, B) always creates both (A,B) and (B,A) rows.
8
+ * Surfacing threshold: install_count >= 5 before including in responses.
9
+ */
10
+ import type { Database as DatabaseType } from '../db/database-interface.js';
11
+ /** A skill summary returned in co-install recommendations */
12
+ export interface CoInstallSummary {
13
+ /** Skill ID (e.g. "anthropic/commit") */
14
+ skillId: string;
15
+ /** Human-readable skill name */
16
+ name: string;
17
+ /** Short description */
18
+ description?: string;
19
+ /** Author slug */
20
+ author?: string;
21
+ /** Number of times installed together with the queried skill */
22
+ installCount: number;
23
+ }
24
+ /**
25
+ * Repository for reading and writing skill co-install records.
26
+ *
27
+ * Gracefully handles databases where the skill_co_installs table has not been
28
+ * created yet (returns empty results instead of throwing). This allows
29
+ * test contexts that use createDatabase() directly (without running all
30
+ * migrations) to work without errors.
31
+ */
32
+ export declare class CoInstallRepository {
33
+ private db;
34
+ constructor(db: DatabaseType);
35
+ /**
36
+ * Record a co-install between two skills (both orderings).
37
+ *
38
+ * Uses INSERT OR REPLACE with incremented count so repeated co-installs
39
+ * accumulate. Both (A→B) and (B→A) are written for symmetric queries.
40
+ *
41
+ * @param skillIdA - First skill ID
42
+ * @param skillIdB - Second skill ID
43
+ */
44
+ recordCoInstall(skillIdA: string, skillIdB: string): void;
45
+ /**
46
+ * Record co-installs for all pairs in a set of skills installed together.
47
+ *
48
+ * For N skills, records N*(N-1) rows (each pair in both orderings).
49
+ * No-op when fewer than 2 skill IDs provided.
50
+ *
51
+ * @param skillIds - Array of skill IDs installed in the same session
52
+ */
53
+ recordSessionCoInstalls(skillIds: string[]): void;
54
+ /**
55
+ * Get the top skills co-installed with a given skill.
56
+ *
57
+ * Joins against the skills table to include name/description/author.
58
+ * Only returns skills with install_count >= minCount (default 5).
59
+ * Returns an empty array when the table does not exist or has no results.
60
+ *
61
+ * @param skillId - The skill to look up co-installs for
62
+ * @param limit - Maximum results to return (default 5)
63
+ * @param minCount - Minimum co-install count to include (default 5)
64
+ * @returns Array of co-installed skill summaries, ordered by count desc
65
+ */
66
+ getTopCoInstalls(skillId: string, limit?: number, minCount?: number): CoInstallSummary[];
67
+ }
68
+ //# sourceMappingURL=CoInstallRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CoInstallRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/CoInstallRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAM3E,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;CACrB;AAMD;;;;;;;GAOG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,EAAE,YAAY;IAI5B;;;;;;;;OAQG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAsBzD;;;;;;;OAOG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IASjD;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAI,GAAG,gBAAgB,EAAE;CAyC/E"}