@skillsmith/core 0.4.14 → 0.4.16
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/analysis/DependencyMerger.d.ts +39 -0
- package/dist/src/analysis/DependencyMerger.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.js +191 -0
- package/dist/src/analysis/DependencyMerger.js.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts +2 -0
- package/dist/src/analysis/DependencyMerger.test.d.ts.map +1 -0
- package/dist/src/analysis/DependencyMerger.test.js +258 -0
- package/dist/src/analysis/DependencyMerger.test.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts +42 -0
- package/dist/src/analysis/McpReferenceExtractor.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.js +92 -0
- package/dist/src/analysis/McpReferenceExtractor.js.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts +2 -0
- package/dist/src/analysis/McpReferenceExtractor.test.d.ts.map +1 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js +262 -0
- package/dist/src/analysis/McpReferenceExtractor.test.js.map +1 -0
- 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/api/schemas.d.ts +4 -4
- 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 +7 -8
- package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
- package/dist/src/db/migrations/v10-dependencies.d.ts +18 -0
- package/dist/src/db/migrations/v10-dependencies.d.ts.map +1 -0
- package/dist/src/db/migrations/v10-dependencies.js +50 -0
- package/dist/src/db/migrations/v10-dependencies.js.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts +7 -0
- package/dist/src/db/migrations/v2-phase5-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v2-phase5-columns.js +16 -0
- package/dist/src/db/migrations/v2-phase5-columns.js.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts +6 -0
- package/dist/src/db/migrations/v3-sync-tables.d.ts.map +1 -0
- package/dist/src/db/migrations/v3-sync-tables.js +41 -0
- package/dist/src/db/migrations/v3-sync-tables.js.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts +7 -0
- package/dist/src/db/migrations/v4-security-columns.d.ts.map +1 -0
- package/dist/src/db/migrations/v4-security-columns.js +17 -0
- package/dist/src/db/migrations/v4-security-columns.js.map +1 -0
- 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 +50 -79
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/exports/repositories.d.ts +6 -0
- package/dist/src/exports/repositories.d.ts.map +1 -1
- package/dist/src/exports/repositories.js +21 -0
- package/dist/src/exports/repositories.js.map +1 -1
- package/dist/src/exports/services.d.ts +2 -0
- package/dist/src/exports/services.d.ts.map +1 -1
- package/dist/src/exports/services.js +5 -0
- package/dist/src/exports/services.js.map +1 -1
- package/dist/src/exports/types.d.ts +2 -1
- package/dist/src/exports/types.d.ts.map +1 -1
- package/dist/src/exports/types.js.map +1 -1
- package/dist/src/indexer/GitHubIndexer.d.ts +3 -1
- package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
- package/dist/src/indexer/GitHubIndexer.js.map +1 -1
- package/dist/src/indexer/SkillParser.d.ts +22 -9
- package/dist/src/indexer/SkillParser.d.ts.map +1 -1
- package/dist/src/indexer/SkillParser.js +17 -10
- 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/IndexerRepository.d.ts.map +1 -1
- package/dist/src/repositories/IndexerRepository.js +5 -1
- package/dist/src/repositories/IndexerRepository.js.map +1 -1
- package/dist/src/repositories/SkillDependencyRepository.d.ts +73 -0
- package/dist/src/repositories/SkillDependencyRepository.d.ts.map +1 -0
- package/dist/src/repositories/SkillDependencyRepository.js +199 -0
- package/dist/src/repositories/SkillDependencyRepository.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/scripts/validation/types.d.ts +2 -2
- 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/sources/SourceIndexer.d.ts +3 -1
- package/dist/src/sources/SourceIndexer.d.ts.map +1 -1
- package/dist/src/sources/SourceIndexer.js.map +1 -1
- 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/dependencies.d.ts +85 -0
- package/dist/src/types/dependencies.d.ts.map +1 -0
- package/dist/src/types/dependencies.js +11 -0
- package/dist/src/types/dependencies.js.map +1 -0
- package/dist/src/types/skill.d.ts +13 -0
- package/dist/src/types/skill.d.ts.map +1 -1
- package/dist/src/types/skill.js.map +1 -1
- package/dist/src/types.d.ts +32 -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/DailyIndexPipeline.test.js +3 -3
- package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
- 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/GitHubIndexer.test.js +4 -2
- package/dist/tests/GitHubIndexer.test.js.map +1 -1
- 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/edge-cases/EdgeCases.test.js +4 -1
- package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
- 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/repositories/SkillDependencyRepository.test.d.ts +10 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.d.ts.map +1 -0
- package/dist/tests/repositories/SkillDependencyRepository.test.js +336 -0
- package/dist/tests/repositories/SkillDependencyRepository.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/sources.test.js +1 -1
- package/dist/tests/sources.test.js.map +1 -1
- 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/migrations/v10-dependencies.test.d.ts +6 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.d.ts.map +1 -0
- package/dist/tests/unit/migrations/v10-dependencies.test.js +166 -0
- package/dist/tests/unit/migrations/v10-dependencies.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
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SkillDependencyRepository — CRUD for skill_dependencies table
|
|
3
|
+
* @module @skillsmith/core/repositories/SkillDependencyRepository
|
|
4
|
+
* @see SMI-3143: Create SkillDependencyRepository CRUD
|
|
5
|
+
*
|
|
6
|
+
* Reads and writes dependency records from the skill_dependencies table
|
|
7
|
+
* (migration v10). Follows the CoInstallRepository pattern: constructor
|
|
8
|
+
* takes a DatabaseType, and all methods gracefully handle a missing table
|
|
9
|
+
* by returning empty results instead of throwing.
|
|
10
|
+
*/
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Repository
|
|
13
|
+
// ============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Repository for reading and writing skill dependency records.
|
|
16
|
+
*
|
|
17
|
+
* Gracefully handles databases where the skill_dependencies table has not
|
|
18
|
+
* been created yet (returns empty results instead of throwing). This allows
|
|
19
|
+
* test contexts that use createDatabase() directly (without running all
|
|
20
|
+
* migrations) to work without errors.
|
|
21
|
+
*/
|
|
22
|
+
export class SkillDependencyRepository {
|
|
23
|
+
db;
|
|
24
|
+
constructor(db) {
|
|
25
|
+
this.db = db;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set (upsert) dependencies for a skill from a given source.
|
|
29
|
+
*
|
|
30
|
+
* Uses INSERT OR REPLACE on the unique index
|
|
31
|
+
* (skill_id, dep_type, dep_target, dep_source) so repeated calls
|
|
32
|
+
* with the same key are idempotent.
|
|
33
|
+
*
|
|
34
|
+
* @param skillId - The skill these dependencies belong to
|
|
35
|
+
* @param deps - Array of dependency rows to upsert
|
|
36
|
+
* @param source - The dep_source value to stamp on each row
|
|
37
|
+
*/
|
|
38
|
+
setDependencies(skillId, deps, source) {
|
|
39
|
+
if (deps.length === 0)
|
|
40
|
+
return;
|
|
41
|
+
try {
|
|
42
|
+
const upsert = this.db.prepare(`
|
|
43
|
+
INSERT INTO skill_dependencies
|
|
44
|
+
(skill_id, dep_type, dep_target, dep_version, dep_source, confidence, metadata, updated_at)
|
|
45
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, datetime('now'))
|
|
46
|
+
ON CONFLICT(skill_id, dep_type, dep_target, dep_source)
|
|
47
|
+
DO UPDATE SET
|
|
48
|
+
dep_version = excluded.dep_version,
|
|
49
|
+
confidence = excluded.confidence,
|
|
50
|
+
metadata = excluded.metadata,
|
|
51
|
+
updated_at = datetime('now')
|
|
52
|
+
`);
|
|
53
|
+
const runAll = this.db.transaction(() => {
|
|
54
|
+
for (const dep of deps) {
|
|
55
|
+
upsert.run(skillId, dep.dep_type, dep.dep_target, dep.dep_version, source, dep.confidence, dep.metadata);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
runAll();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
62
|
+
if (msg.includes('no such table'))
|
|
63
|
+
return;
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get all dependencies for a skill, ordered by dep_type.
|
|
69
|
+
*
|
|
70
|
+
* @param skillId - The skill to look up dependencies for
|
|
71
|
+
* @returns Array of dependency rows, or empty array if table missing
|
|
72
|
+
*/
|
|
73
|
+
getDependencies(skillId) {
|
|
74
|
+
try {
|
|
75
|
+
return this.db
|
|
76
|
+
.prepare(`
|
|
77
|
+
SELECT id, skill_id, dep_type, dep_target, dep_version,
|
|
78
|
+
dep_source, confidence, metadata, created_at, updated_at
|
|
79
|
+
FROM skill_dependencies
|
|
80
|
+
WHERE skill_id = ?
|
|
81
|
+
ORDER BY dep_type
|
|
82
|
+
`)
|
|
83
|
+
.all(skillId);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
87
|
+
if (msg.includes('no such table'))
|
|
88
|
+
return [];
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get dependencies for a skill filtered by source.
|
|
94
|
+
*
|
|
95
|
+
* @param skillId - The skill to look up dependencies for
|
|
96
|
+
* @param source - Filter by dep_source value
|
|
97
|
+
* @returns Array of dependency rows matching the source
|
|
98
|
+
*/
|
|
99
|
+
getDependenciesBySource(skillId, source) {
|
|
100
|
+
try {
|
|
101
|
+
return this.db
|
|
102
|
+
.prepare(`
|
|
103
|
+
SELECT id, skill_id, dep_type, dep_target, dep_version,
|
|
104
|
+
dep_source, confidence, metadata, created_at, updated_at
|
|
105
|
+
FROM skill_dependencies
|
|
106
|
+
WHERE skill_id = ? AND dep_source = ?
|
|
107
|
+
ORDER BY dep_type
|
|
108
|
+
`)
|
|
109
|
+
.all(skillId, source);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
113
|
+
if (msg.includes('no such table'))
|
|
114
|
+
return [];
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Reverse lookup: find all skills that depend on a given target.
|
|
120
|
+
*
|
|
121
|
+
* @param depTarget - The dependency target to search for
|
|
122
|
+
* @param depType - Optional dep_type filter
|
|
123
|
+
* @returns Array of dependency rows where dep_target matches
|
|
124
|
+
*/
|
|
125
|
+
getDependents(depTarget, depType) {
|
|
126
|
+
try {
|
|
127
|
+
if (depType) {
|
|
128
|
+
return this.db
|
|
129
|
+
.prepare(`
|
|
130
|
+
SELECT id, skill_id, dep_type, dep_target, dep_version,
|
|
131
|
+
dep_source, confidence, metadata, created_at, updated_at
|
|
132
|
+
FROM skill_dependencies
|
|
133
|
+
WHERE dep_target = ? AND dep_type = ?
|
|
134
|
+
ORDER BY skill_id
|
|
135
|
+
`)
|
|
136
|
+
.all(depTarget, depType);
|
|
137
|
+
}
|
|
138
|
+
return this.db
|
|
139
|
+
.prepare(`
|
|
140
|
+
SELECT id, skill_id, dep_type, dep_target, dep_version,
|
|
141
|
+
dep_source, confidence, metadata, created_at, updated_at
|
|
142
|
+
FROM skill_dependencies
|
|
143
|
+
WHERE dep_target = ?
|
|
144
|
+
ORDER BY skill_id
|
|
145
|
+
`)
|
|
146
|
+
.all(depTarget);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
150
|
+
if (msg.includes('no such table'))
|
|
151
|
+
return [];
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Delete only inferred dependencies for a skill.
|
|
157
|
+
* Preserves declared dependencies.
|
|
158
|
+
*
|
|
159
|
+
* @param skillId - The skill to clear inferred deps for
|
|
160
|
+
*/
|
|
161
|
+
clearInferred(skillId) {
|
|
162
|
+
try {
|
|
163
|
+
this.db
|
|
164
|
+
.prepare(`
|
|
165
|
+
DELETE FROM skill_dependencies
|
|
166
|
+
WHERE skill_id = ? AND dep_source != 'declared'
|
|
167
|
+
`)
|
|
168
|
+
.run(skillId);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
172
|
+
if (msg.includes('no such table'))
|
|
173
|
+
return;
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Delete all dependencies for a skill.
|
|
179
|
+
*
|
|
180
|
+
* @param skillId - The skill to clear all deps for
|
|
181
|
+
*/
|
|
182
|
+
clearAll(skillId) {
|
|
183
|
+
try {
|
|
184
|
+
this.db
|
|
185
|
+
.prepare(`
|
|
186
|
+
DELETE FROM skill_dependencies
|
|
187
|
+
WHERE skill_id = ?
|
|
188
|
+
`)
|
|
189
|
+
.run(skillId);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
193
|
+
if (msg.includes('no such table'))
|
|
194
|
+
return;
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=SkillDependencyRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillDependencyRepository.js","sourceRoot":"","sources":["../../../src/repositories/SkillDependencyRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/SkillRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE3E,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"SkillRepository.d.ts","sourceRoot":"","sources":["../../../src/repositories/SkillRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE3E,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAuBpG;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,EAAE,YAAY;IAK5B,OAAO,CAAC,KAAK,CAYZ;IAED,OAAO,CAAC,iBAAiB;IAoDzB;;OAEG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK;IA0BtC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE;IA2ChD;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAKlC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAK5C;;;OAGG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC;IAC/E,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC;IA+BjE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,KAAK,GAAG,IAAI;IA4BzD;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK3B;;OAEG;IACH,SAAS,IAAI,MAAM;IAKnB;;OAEG;IACH,KAAK,IAAI,MAAM;IAKf;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAI9B;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAK3B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK;CASvC"}
|
|
@@ -22,8 +22,8 @@ export class SkillRepository {
|
|
|
22
22
|
// Cast to our custom types for better-sqlite3 compatibility
|
|
23
23
|
this.stmts = {
|
|
24
24
|
insert: this.db.prepare(`
|
|
25
|
-
INSERT INTO skills (id, name, description, author, repo_url, quality_score, trust_tier, tags, risk_score, security_findings_count, security_scanned_at, security_passed, created_at, updated_at)
|
|
26
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
|
|
25
|
+
INSERT INTO skills (id, name, description, author, repo_url, quality_score, trust_tier, tags, risk_score, security_findings_count, security_scanned_at, security_passed, compatibility, created_at, updated_at)
|
|
26
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now'))
|
|
27
27
|
`),
|
|
28
28
|
selectById: this.db.prepare(`
|
|
29
29
|
SELECT * FROM skills WHERE id = ?
|
|
@@ -50,6 +50,7 @@ export class SkillRepository {
|
|
|
50
50
|
security_findings_count = COALESCE(?, security_findings_count),
|
|
51
51
|
security_scanned_at = COALESCE(?, security_scanned_at),
|
|
52
52
|
security_passed = COALESCE(?, security_passed),
|
|
53
|
+
compatibility = COALESCE(?, compatibility),
|
|
53
54
|
updated_at = datetime('now')
|
|
54
55
|
WHERE id = ?
|
|
55
56
|
`),
|
|
@@ -80,6 +81,10 @@ export class SkillRepository {
|
|
|
80
81
|
securityFindingsCount: row.security_findings_count ?? 0,
|
|
81
82
|
securityScannedAt: row.security_scanned_at,
|
|
82
83
|
securityPassed: row.security_passed === null ? null : row.security_passed === 1,
|
|
84
|
+
// SMI-2760: Compatibility tags
|
|
85
|
+
compatibility: row.compatibility && row.compatibility !== '[]'
|
|
86
|
+
? JSON.parse(row.compatibility)
|
|
87
|
+
: undefined,
|
|
83
88
|
createdAt: row.created_at,
|
|
84
89
|
updatedAt: row.updated_at,
|
|
85
90
|
};
|
|
@@ -92,7 +97,9 @@ export class SkillRepository {
|
|
|
92
97
|
const tags = JSON.stringify(input.tags || []);
|
|
93
98
|
this.stmts.insert.run(id, input.name, input.description ?? null, input.author ?? null, input.repoUrl ?? null, input.qualityScore ?? null, input.trustTier ?? 'unknown', tags,
|
|
94
99
|
// SMI-825: Security scan fields
|
|
95
|
-
input.riskScore ?? null, input.securityFindingsCount ?? 0, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0
|
|
100
|
+
input.riskScore ?? null, input.securityFindingsCount ?? 0, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0,
|
|
101
|
+
// SMI-2760: Compatibility tags
|
|
102
|
+
JSON.stringify(input.compatibility || []));
|
|
96
103
|
const row = this.stmts.selectById.get(id);
|
|
97
104
|
return this.rowToSkill(row);
|
|
98
105
|
}
|
|
@@ -108,7 +115,9 @@ export class SkillRepository {
|
|
|
108
115
|
try {
|
|
109
116
|
this.stmts.insert.run(id, input.name, input.description ?? null, input.author ?? null, input.repoUrl ?? null, input.qualityScore ?? null, input.trustTier ?? 'unknown', tags,
|
|
110
117
|
// SMI-825: Security scan fields
|
|
111
|
-
input.riskScore ?? null, input.securityFindingsCount ?? 0, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0
|
|
118
|
+
input.riskScore ?? null, input.securityFindingsCount ?? 0, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0,
|
|
119
|
+
// SMI-2760: Compatibility tags
|
|
120
|
+
JSON.stringify(input.compatibility || []));
|
|
112
121
|
const row = this.stmts.selectById.get(id);
|
|
113
122
|
created.push(this.rowToSkill(row));
|
|
114
123
|
}
|
|
@@ -168,7 +177,9 @@ export class SkillRepository {
|
|
|
168
177
|
const tags = input.tags ? JSON.stringify(input.tags) : null;
|
|
169
178
|
const result = this.stmts.update.run(input.name ?? null, input.description ?? null, input.author ?? null, input.repoUrl ?? null, input.qualityScore ?? null, input.trustTier ?? null, tags,
|
|
170
179
|
// SMI-825: Security scan fields
|
|
171
|
-
input.riskScore ?? null, input.securityFindingsCount ?? null, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0,
|
|
180
|
+
input.riskScore ?? null, input.securityFindingsCount ?? null, input.securityScannedAt ?? null, input.securityPassed === undefined ? null : input.securityPassed ? 1 : 0,
|
|
181
|
+
// SMI-2760: Compatibility tags
|
|
182
|
+
input.compatibility !== undefined ? JSON.stringify(input.compatibility) : null, id);
|
|
172
183
|
if (result.changes === 0) {
|
|
173
184
|
return null;
|
|
174
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkillRepository.js","sourceRoot":"","sources":["../../../src/repositories/SkillRepository.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"SkillRepository.js","sourceRoot":"","sources":["../../../src/repositories/SkillRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -104,10 +104,10 @@ export interface DuplicatesReport {
|
|
|
104
104
|
duplicates: DuplicateEntry[];
|
|
105
105
|
}
|
|
106
106
|
export declare const TrustTierSchema: z.ZodEnum<{
|
|
107
|
+
unknown: "unknown";
|
|
107
108
|
verified: "verified";
|
|
108
109
|
community: "community";
|
|
109
110
|
experimental: "experimental";
|
|
110
|
-
unknown: "unknown";
|
|
111
111
|
}>;
|
|
112
112
|
export declare const ValidatedSkillSchema: z.ZodObject<{
|
|
113
113
|
id: z.ZodString;
|
|
@@ -117,10 +117,10 @@ export declare const ValidatedSkillSchema: z.ZodObject<{
|
|
|
117
117
|
repo_url: z.ZodNullable<z.ZodString>;
|
|
118
118
|
quality_score: z.ZodNumber;
|
|
119
119
|
trust_tier: z.ZodEnum<{
|
|
120
|
+
unknown: "unknown";
|
|
120
121
|
verified: "verified";
|
|
121
122
|
community: "community";
|
|
122
123
|
experimental: "experimental";
|
|
123
|
-
unknown: "unknown";
|
|
124
124
|
}>;
|
|
125
125
|
tags: z.ZodArray<z.ZodString>;
|
|
126
126
|
source: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchService.helpers.d.ts","sourceRoot":"","sources":["../../../src/services/SearchService.helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"SearchService.helpers.d.ts","sourceRoot":"","sources":["../../../src/services/SearchService.helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAa,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBnD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAwB7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,CAyCvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAS1E"}
|
|
@@ -72,6 +72,10 @@ export function rowToSkill(row) {
|
|
|
72
72
|
securityFindingsCount: row.security_findings_count ?? 0,
|
|
73
73
|
securityScannedAt: row.security_scanned_at,
|
|
74
74
|
securityPassed: row.security_passed === null ? null : row.security_passed === 1,
|
|
75
|
+
// SMI-2760: Compatibility tags
|
|
76
|
+
compatibility: row.compatibility && row.compatibility !== '[]'
|
|
77
|
+
? JSON.parse(row.compatibility)
|
|
78
|
+
: undefined,
|
|
75
79
|
createdAt: row.created_at,
|
|
76
80
|
updatedAt: row.updated_at,
|
|
77
81
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchService.helpers.js","sourceRoot":"","sources":["../../../src/services/SearchService.helpers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SearchService.helpers.js","sourceRoot":"","sources":["../../../src/services/SearchService.helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchService.types.d.ts","sourceRoot":"","sources":["../../../src/services/SearchService.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;IAE3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"SearchService.types.d.ts","sourceRoot":"","sources":["../../../src/services/SearchService.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;IAE3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAE9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-1662: TaskRunner - Background Task Timeout Management
|
|
3
|
+
* @see SMI-2741: Types split to TaskRunner.types.ts, process utils to TaskRunner.process.ts
|
|
3
4
|
*
|
|
4
5
|
* Provides configurable timeout enforcement for background Task agents.
|
|
5
6
|
* Addresses orphaned process memory leaks identified in incident 2026-01-22.
|
|
@@ -23,75 +24,10 @@
|
|
|
23
24
|
* await runner.cleanupOrphaned()
|
|
24
25
|
* ```
|
|
25
26
|
*/
|
|
26
|
-
import { type
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
export declare const DEFAULT_TASK_TIMEOUT_MS = 600000;
|
|
31
|
-
/**
|
|
32
|
-
* Grace period before SIGKILL after SIGTERM: 5 seconds
|
|
33
|
-
*/
|
|
34
|
-
export declare const SIGKILL_GRACE_PERIOD_MS = 5000;
|
|
35
|
-
/**
|
|
36
|
-
* Warning threshold: 80% of timeout
|
|
37
|
-
*/
|
|
38
|
-
export declare const WARNING_THRESHOLD_RATIO = 0.8;
|
|
39
|
-
/**
|
|
40
|
-
* Configuration options for TaskRunner
|
|
41
|
-
*/
|
|
42
|
-
export interface TaskRunnerConfig {
|
|
43
|
-
/** Timeout in milliseconds (default: 600000 = 10 minutes) */
|
|
44
|
-
timeoutMs?: number;
|
|
45
|
-
/** Enable debug logging (default: false) */
|
|
46
|
-
debug?: boolean;
|
|
47
|
-
/** Custom logger instance */
|
|
48
|
-
logger?: Logger;
|
|
49
|
-
/** Callback when a task times out */
|
|
50
|
-
onTimeout?: (task: TrackedTask) => void;
|
|
51
|
-
/** Callback when warning threshold is reached */
|
|
52
|
-
onWarning?: (task: TrackedTask, remainingMs: number) => void;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Status of a tracked task
|
|
56
|
-
*/
|
|
57
|
-
export type TaskStatus = 'running' | 'completed' | 'failed' | 'timeout' | 'killed';
|
|
58
|
-
/**
|
|
59
|
-
* A tracked background task
|
|
60
|
-
*/
|
|
61
|
-
export interface TrackedTask {
|
|
62
|
-
/** Unique task identifier */
|
|
63
|
-
id: string;
|
|
64
|
-
/** Process ID of the background task */
|
|
65
|
-
pid: number;
|
|
66
|
-
/** Human-readable description */
|
|
67
|
-
description: string;
|
|
68
|
-
/** When the task started */
|
|
69
|
-
startedAt: number;
|
|
70
|
-
/** Current status */
|
|
71
|
-
status: TaskStatus;
|
|
72
|
-
/** When the task completed/failed/timed out */
|
|
73
|
-
endedAt?: number;
|
|
74
|
-
/** Duration in milliseconds */
|
|
75
|
-
durationMs?: number;
|
|
76
|
-
/** Whether warning was issued */
|
|
77
|
-
warningIssued: boolean;
|
|
78
|
-
/** Error message if failed */
|
|
79
|
-
error?: string;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Result of a cleanup operation
|
|
83
|
-
*/
|
|
84
|
-
export interface CleanupResult {
|
|
85
|
-
/** Number of tasks cleaned up */
|
|
86
|
-
cleaned: number;
|
|
87
|
-
/** Task IDs that were cleaned */
|
|
88
|
-
taskIds: string[];
|
|
89
|
-
/** Any errors encountered */
|
|
90
|
-
errors: Array<{
|
|
91
|
-
taskId: string;
|
|
92
|
-
error: string;
|
|
93
|
-
}>;
|
|
94
|
-
}
|
|
27
|
+
import { type TaskRunnerConfig, type TaskStatus, type TrackedTask, type CleanupResult } from './TaskRunner.types.js';
|
|
28
|
+
export type { TaskRunnerConfig, TaskStatus, TrackedTask, CleanupResult, } from './TaskRunner.types.js';
|
|
29
|
+
export { DEFAULT_TASK_TIMEOUT_MS, SIGKILL_GRACE_PERIOD_MS, WARNING_THRESHOLD_RATIO, } from './TaskRunner.types.js';
|
|
30
|
+
export { gracefulShutdown, killProcess, sleep } from './TaskRunner.process.js';
|
|
95
31
|
/**
|
|
96
32
|
* TaskRunner manages background task lifecycles with timeout enforcement.
|
|
97
33
|
*
|
|
@@ -186,22 +122,10 @@ export declare class TaskRunner {
|
|
|
186
122
|
* Handle a task timeout
|
|
187
123
|
*/
|
|
188
124
|
private handleTimeout;
|
|
189
|
-
/**
|
|
190
|
-
* Gracefully shutdown a process: SIGTERM -> wait -> SIGKILL
|
|
191
|
-
*/
|
|
192
|
-
private gracefulShutdown;
|
|
193
|
-
/**
|
|
194
|
-
* Kill a process immediately with SIGKILL
|
|
195
|
-
*/
|
|
196
|
-
private killProcess;
|
|
197
125
|
/**
|
|
198
126
|
* Finish a task and clean up timers
|
|
199
127
|
*/
|
|
200
128
|
private finishTask;
|
|
201
|
-
/**
|
|
202
|
-
* Sleep for a specified duration
|
|
203
|
-
*/
|
|
204
|
-
private sleep;
|
|
205
129
|
}
|
|
206
130
|
/**
|
|
207
131
|
* Create a TaskRunner with environment-based configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskRunner.d.ts","sourceRoot":"","sources":["../../../src/services/TaskRunner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TaskRunner.d.ts","sourceRoot":"","sources":["../../../src/services/TaskRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAA;AAI9B,YAAY,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,aAAa,GACd,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAE9E;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwE;IAC/F,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsC;IAC5D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyC;IACvE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkD;gBAEjE,MAAM,GAAE,gBAAqB;IAqBzC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAwClD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAQjD;;;;;OAKG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,EAAE;IAK5C;;OAEG;IACH,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;KACf;IAYD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,GAAE,MAAgB,GAAG,MAAM;IAkB3C;;;;;OAKG;IACG,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;IAmC/C;;OAEG;IACH,OAAO,IAAI,IAAI;IAiBf;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;YACW,aAAa;IAgC3B;;OAEG;IACH,OAAO,CAAC,UAAU;CAiCnB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,UAAU,CAEtE;AAOD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAKhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAE5D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SMI-1662: TaskRunner - Background Task Timeout Management
|
|
3
|
+
* @see SMI-2741: Types split to TaskRunner.types.ts, process utils to TaskRunner.process.ts
|
|
3
4
|
*
|
|
4
5
|
* Provides configurable timeout enforcement for background Task agents.
|
|
5
6
|
* Addresses orphaned process memory leaks identified in incident 2026-01-22.
|
|
@@ -25,18 +26,10 @@
|
|
|
25
26
|
*/
|
|
26
27
|
import { randomUUID } from 'crypto';
|
|
27
28
|
import { createLogger } from '../utils/logger.js';
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export
|
|
32
|
-
/**
|
|
33
|
-
* Grace period before SIGKILL after SIGTERM: 5 seconds
|
|
34
|
-
*/
|
|
35
|
-
export const SIGKILL_GRACE_PERIOD_MS = 5000;
|
|
36
|
-
/**
|
|
37
|
-
* Warning threshold: 80% of timeout
|
|
38
|
-
*/
|
|
39
|
-
export const WARNING_THRESHOLD_RATIO = 0.8;
|
|
29
|
+
import { DEFAULT_TASK_TIMEOUT_MS, WARNING_THRESHOLD_RATIO, } from './TaskRunner.types.js';
|
|
30
|
+
import { gracefulShutdown, killProcess } from './TaskRunner.process.js';
|
|
31
|
+
export { DEFAULT_TASK_TIMEOUT_MS, SIGKILL_GRACE_PERIOD_MS, WARNING_THRESHOLD_RATIO, } from './TaskRunner.types.js';
|
|
32
|
+
export { gracefulShutdown, killProcess, sleep } from './TaskRunner.process.js';
|
|
40
33
|
/**
|
|
41
34
|
* TaskRunner manages background task lifecycles with timeout enforcement.
|
|
42
35
|
*
|
|
@@ -202,7 +195,7 @@ export class TaskRunner {
|
|
|
202
195
|
for (const [id, task] of this.tasks.entries()) {
|
|
203
196
|
if (task.status === 'running' && now - task.startedAt > this.config.timeoutMs) {
|
|
204
197
|
try {
|
|
205
|
-
await
|
|
198
|
+
await killProcess(task.pid);
|
|
206
199
|
this.finishTask(id, 'killed');
|
|
207
200
|
result.cleaned++;
|
|
208
201
|
result.taskIds.push(id);
|
|
@@ -285,7 +278,7 @@ export class TaskRunner {
|
|
|
285
278
|
});
|
|
286
279
|
// Attempt graceful shutdown
|
|
287
280
|
try {
|
|
288
|
-
await
|
|
281
|
+
await gracefulShutdown(task.pid);
|
|
289
282
|
this.finishTask(taskId, 'timeout');
|
|
290
283
|
}
|
|
291
284
|
catch (error) {
|
|
@@ -294,54 +287,6 @@ export class TaskRunner {
|
|
|
294
287
|
}
|
|
295
288
|
this.onTimeout?.(task);
|
|
296
289
|
}
|
|
297
|
-
/**
|
|
298
|
-
* Gracefully shutdown a process: SIGTERM -> wait -> SIGKILL
|
|
299
|
-
*/
|
|
300
|
-
async gracefulShutdown(pid) {
|
|
301
|
-
// First, send SIGTERM for graceful shutdown
|
|
302
|
-
try {
|
|
303
|
-
process.kill(pid, 'SIGTERM');
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
// Process might already be dead
|
|
307
|
-
if (error.code === 'ESRCH') {
|
|
308
|
-
if (this.config.debug) {
|
|
309
|
-
this.logger.debug('Process already terminated', { pid });
|
|
310
|
-
}
|
|
311
|
-
return;
|
|
312
|
-
}
|
|
313
|
-
throw error;
|
|
314
|
-
}
|
|
315
|
-
// Wait for grace period
|
|
316
|
-
await this.sleep(SIGKILL_GRACE_PERIOD_MS);
|
|
317
|
-
// Check if still running and send SIGKILL
|
|
318
|
-
try {
|
|
319
|
-
// process.kill(pid, 0) checks if process exists
|
|
320
|
-
process.kill(pid, 0);
|
|
321
|
-
// Process still running, send SIGKILL
|
|
322
|
-
if (this.config.debug) {
|
|
323
|
-
this.logger.debug('Process did not terminate gracefully, sending SIGKILL', { pid });
|
|
324
|
-
}
|
|
325
|
-
process.kill(pid, 'SIGKILL');
|
|
326
|
-
}
|
|
327
|
-
catch {
|
|
328
|
-
// Process is already dead, which is fine
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
/**
|
|
332
|
-
* Kill a process immediately with SIGKILL
|
|
333
|
-
*/
|
|
334
|
-
async killProcess(pid) {
|
|
335
|
-
try {
|
|
336
|
-
process.kill(pid, 'SIGKILL');
|
|
337
|
-
}
|
|
338
|
-
catch (error) {
|
|
339
|
-
// ESRCH means process doesn't exist, which is fine
|
|
340
|
-
if (error.code !== 'ESRCH') {
|
|
341
|
-
throw error;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
290
|
/**
|
|
346
291
|
* Finish a task and clean up timers
|
|
347
292
|
*/
|
|
@@ -374,12 +319,6 @@ export class TaskRunner {
|
|
|
374
319
|
});
|
|
375
320
|
}
|
|
376
321
|
}
|
|
377
|
-
/**
|
|
378
|
-
* Sleep for a specified duration
|
|
379
|
-
*/
|
|
380
|
-
sleep(ms) {
|
|
381
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
382
|
-
}
|
|
383
322
|
}
|
|
384
323
|
/**
|
|
385
324
|
* Create a TaskRunner with environment-based configuration
|