@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.
- package/README.md +2 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/api/client.d.ts +1 -0
- package/dist/src/api/client.d.ts.map +1 -1
- package/dist/src/api/client.health.d.ts +26 -0
- package/dist/src/api/client.health.d.ts.map +1 -0
- package/dist/src/api/client.health.js +74 -0
- package/dist/src/api/client.health.js.map +1 -0
- package/dist/src/api/client.js +3 -51
- package/dist/src/api/client.js.map +1 -1
- package/dist/src/db/createDatabase.d.ts +9 -1
- package/dist/src/db/createDatabase.d.ts.map +1 -1
- package/dist/src/db/createDatabase.js +9 -1
- package/dist/src/db/createDatabase.js.map +1 -1
- package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
- package/dist/src/db/drivers/sqljsDriver.js +5 -2
- package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
- package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
- package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
- package/dist/src/db/migrations/v5b-change-type.js +22 -0
- package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
- package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
- package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
- package/dist/src/db/migrations/v6-advisories.js +53 -0
- package/dist/src/db/migrations/v6-advisories.js.map +1 -0
- package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
- package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
- package/dist/src/db/migrations/v7-compatibility.js +23 -0
- package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
- package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
- package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
- package/dist/src/db/migrations/v8-co-installs.js +33 -0
- package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
- package/dist/src/db/schema.d.ts +5 -16
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +37 -22
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/repositories.d.ts +5 -0
- package/dist/src/exports/repositories.d.ts.map +1 -1
- package/dist/src/exports/repositories.js +17 -0
- package/dist/src/exports/repositories.js.map +1 -1
- package/dist/src/exports/types.d.ts +1 -1
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/exports/types.js.map +1 -1
- package/dist/src/indexer/SkillParser.d.ts +2 -0
- package/dist/src/indexer/SkillParser.d.ts.map +1 -1
- package/dist/src/indexer/SkillParser.js.map +1 -1
- package/dist/src/learning/PatternStore.d.ts +0 -2
- package/dist/src/learning/PatternStore.d.ts.map +1 -1
- package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
- package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
- package/dist/src/learning/PatternStore.helpers.js +51 -0
- package/dist/src/learning/PatternStore.helpers.js.map +1 -1
- package/dist/src/learning/PatternStore.js +5 -37
- package/dist/src/learning/PatternStore.js.map +1 -1
- package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
- package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.js +128 -0
- package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
- package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
- package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
- package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
- package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
- package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
- package/dist/src/repositories/CoInstallRepository.js +122 -0
- package/dist/src/repositories/CoInstallRepository.js.map +1 -0
- package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
- package/dist/src/repositories/SkillRepository.js +16 -5
- package/dist/src/repositories/SkillRepository.js.map +1 -1
- package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
- package/dist/src/services/SearchService.helpers.js +4 -0
- package/dist/src/services/SearchService.helpers.js.map +1 -1
- package/dist/src/services/SearchService.types.d.ts +1 -0
- package/dist/src/services/SearchService.types.d.ts.map +1 -1
- package/dist/src/services/TaskRunner.d.ts +5 -81
- package/dist/src/services/TaskRunner.d.ts.map +1 -1
- package/dist/src/services/TaskRunner.js +7 -68
- package/dist/src/services/TaskRunner.js.map +1 -1
- package/dist/src/services/TaskRunner.process.d.ts +33 -0
- package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
- package/dist/src/services/TaskRunner.process.js +70 -0
- package/dist/src/services/TaskRunner.process.js.map +1 -0
- package/dist/src/services/TaskRunner.types.d.ts +76 -0
- package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
- package/dist/src/services/TaskRunner.types.js +22 -0
- package/dist/src/services/TaskRunner.types.js.map +1 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
- package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
- package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.js +8 -205
- package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
- package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
- package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
- package/dist/src/session/SessionManager.d.ts +2 -33
- package/dist/src/session/SessionManager.d.ts.map +1 -1
- package/dist/src/session/SessionManager.js +14 -238
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/session/SessionManager.memory.d.ts +67 -0
- package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
- package/dist/src/session/SessionManager.memory.js +262 -0
- package/dist/src/session/SessionManager.memory.js.map +1 -0
- package/dist/src/sync/SyncEngine.d.ts +13 -1
- package/dist/src/sync/SyncEngine.d.ts.map +1 -1
- package/dist/src/sync/SyncEngine.js +50 -1
- package/dist/src/sync/SyncEngine.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
- package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
- package/dist/src/testing/MultiLLMProvider.js +18 -130
- package/dist/src/testing/MultiLLMProvider.js.map +1 -1
- package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
- package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
- package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
- package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
- package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
- package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
- package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
- package/dist/src/types/skill.d.ts +10 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types.d.ts +30 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/versioning/change-classifier.d.ts +38 -0
- package/dist/src/versioning/change-classifier.d.ts.map +1 -0
- package/dist/src/versioning/change-classifier.js +187 -0
- package/dist/src/versioning/change-classifier.js.map +1 -0
- package/dist/src/versioning/change-classifier.test.d.ts +6 -0
- package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
- package/dist/src/versioning/change-classifier.test.js +275 -0
- package/dist/src/versioning/change-classifier.test.js.map +1 -0
- package/dist/src/versioning/update-risk.d.ts +50 -0
- package/dist/src/versioning/update-risk.d.ts.map +1 -0
- package/dist/src/versioning/update-risk.js +80 -0
- package/dist/src/versioning/update-risk.js.map +1 -0
- package/dist/src/versioning/update-risk.test.d.ts +6 -0
- package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
- package/dist/src/versioning/update-risk.test.js +200 -0
- package/dist/src/versioning/update-risk.test.js.map +1 -0
- package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
- package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
- package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
- package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
- package/dist/tests/CacheManager.test.d.ts +9 -0
- package/dist/tests/CacheManager.test.d.ts.map +1 -0
- package/dist/tests/CacheManager.test.js +163 -0
- package/dist/tests/CacheManager.test.js.map +1 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
- package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
- package/dist/tests/SearchService.test.js +71 -0
- package/dist/tests/SearchService.test.js.map +1 -1
- package/dist/tests/SkillVersionRepository.test.d.ts +0 -11
- package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -1
- package/dist/tests/SkillVersionRepository.test.js +131 -194
- package/dist/tests/SkillVersionRepository.test.js.map +1 -1
- package/dist/tests/api/client.health.test.d.ts +15 -0
- package/dist/tests/api/client.health.test.d.ts.map +1 -0
- package/dist/tests/api/client.health.test.js +111 -0
- package/dist/tests/api/client.health.test.js.map +1 -0
- package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
- package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
- package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
- package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
- package/dist/tests/db/database-abstraction.test.js +12 -0
- package/dist/tests/db/database-abstraction.test.js.map +1 -1
- package/dist/tests/db/schema-migrations.test.d.ts +10 -0
- package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
- package/dist/tests/db/schema-migrations.test.js +134 -0
- package/dist/tests/db/schema-migrations.test.js.map +1 -0
- package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
- package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
- package/dist/tests/db/sqljsDriver.test.js +75 -0
- package/dist/tests/db/sqljsDriver.test.js.map +1 -0
- package/dist/tests/helpers/database.d.ts +32 -0
- package/dist/tests/helpers/database.d.ts.map +1 -0
- package/dist/tests/helpers/database.js +54 -0
- package/dist/tests/helpers/database.js.map +1 -0
- package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
- package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
- package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
- package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
- package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
- package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
- package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
- package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
- package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
- package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
- package/dist/tests/routing/LanguageRouter.test.js +150 -0
- package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
- package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
- package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
- package/dist/tests/session/SessionManager.memory.test.js +219 -0
- package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
- package/dist/tests/sync/SyncEngine.test.js +32 -18
- package/dist/tests/sync/SyncEngine.test.js.map +1 -1
- package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
- package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
- package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
- package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
- package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
- package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
- package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
- 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,
|
|
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.
|
|
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.
|
|
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.
|
|
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 @@
|
|
|
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"}
|