@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.
Files changed (287) hide show
  1. package/README.md +2 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analysis/DependencyMerger.d.ts +39 -0
  4. package/dist/src/analysis/DependencyMerger.d.ts.map +1 -0
  5. package/dist/src/analysis/DependencyMerger.js +191 -0
  6. package/dist/src/analysis/DependencyMerger.js.map +1 -0
  7. package/dist/src/analysis/DependencyMerger.test.d.ts +2 -0
  8. package/dist/src/analysis/DependencyMerger.test.d.ts.map +1 -0
  9. package/dist/src/analysis/DependencyMerger.test.js +258 -0
  10. package/dist/src/analysis/DependencyMerger.test.js.map +1 -0
  11. package/dist/src/analysis/McpReferenceExtractor.d.ts +42 -0
  12. package/dist/src/analysis/McpReferenceExtractor.d.ts.map +1 -0
  13. package/dist/src/analysis/McpReferenceExtractor.js +92 -0
  14. package/dist/src/analysis/McpReferenceExtractor.js.map +1 -0
  15. package/dist/src/analysis/McpReferenceExtractor.test.d.ts +2 -0
  16. package/dist/src/analysis/McpReferenceExtractor.test.d.ts.map +1 -0
  17. package/dist/src/analysis/McpReferenceExtractor.test.js +262 -0
  18. package/dist/src/analysis/McpReferenceExtractor.test.js.map +1 -0
  19. package/dist/src/api/client.d.ts +1 -0
  20. package/dist/src/api/client.d.ts.map +1 -1
  21. package/dist/src/api/client.health.d.ts +26 -0
  22. package/dist/src/api/client.health.d.ts.map +1 -0
  23. package/dist/src/api/client.health.js +74 -0
  24. package/dist/src/api/client.health.js.map +1 -0
  25. package/dist/src/api/client.js +3 -51
  26. package/dist/src/api/client.js.map +1 -1
  27. package/dist/src/api/schemas.d.ts +4 -4
  28. package/dist/src/db/createDatabase.d.ts +9 -1
  29. package/dist/src/db/createDatabase.d.ts.map +1 -1
  30. package/dist/src/db/createDatabase.js +9 -1
  31. package/dist/src/db/createDatabase.js.map +1 -1
  32. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
  33. package/dist/src/db/drivers/sqljsDriver.js +7 -8
  34. package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
  35. package/dist/src/db/migrations/v10-dependencies.d.ts +18 -0
  36. package/dist/src/db/migrations/v10-dependencies.d.ts.map +1 -0
  37. package/dist/src/db/migrations/v10-dependencies.js +50 -0
  38. package/dist/src/db/migrations/v10-dependencies.js.map +1 -0
  39. package/dist/src/db/migrations/v2-phase5-columns.d.ts +7 -0
  40. package/dist/src/db/migrations/v2-phase5-columns.d.ts.map +1 -0
  41. package/dist/src/db/migrations/v2-phase5-columns.js +16 -0
  42. package/dist/src/db/migrations/v2-phase5-columns.js.map +1 -0
  43. package/dist/src/db/migrations/v3-sync-tables.d.ts +6 -0
  44. package/dist/src/db/migrations/v3-sync-tables.d.ts.map +1 -0
  45. package/dist/src/db/migrations/v3-sync-tables.js +41 -0
  46. package/dist/src/db/migrations/v3-sync-tables.js.map +1 -0
  47. package/dist/src/db/migrations/v4-security-columns.d.ts +7 -0
  48. package/dist/src/db/migrations/v4-security-columns.d.ts.map +1 -0
  49. package/dist/src/db/migrations/v4-security-columns.js +17 -0
  50. package/dist/src/db/migrations/v4-security-columns.js.map +1 -0
  51. package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
  52. package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
  53. package/dist/src/db/migrations/v5b-change-type.js +22 -0
  54. package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
  55. package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
  56. package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
  57. package/dist/src/db/migrations/v6-advisories.js +53 -0
  58. package/dist/src/db/migrations/v6-advisories.js.map +1 -0
  59. package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
  60. package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
  61. package/dist/src/db/migrations/v7-compatibility.js +23 -0
  62. package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
  63. package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
  64. package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
  65. package/dist/src/db/migrations/v8-co-installs.js +33 -0
  66. package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
  67. package/dist/src/db/schema.d.ts +5 -16
  68. package/dist/src/db/schema.d.ts.map +1 -1
  69. package/dist/src/db/schema.js +50 -79
  70. package/dist/src/db/schema.js.map +1 -1
  71. package/dist/src/exports/repositories.d.ts +6 -0
  72. package/dist/src/exports/repositories.d.ts.map +1 -1
  73. package/dist/src/exports/repositories.js +21 -0
  74. package/dist/src/exports/repositories.js.map +1 -1
  75. package/dist/src/exports/services.d.ts +2 -0
  76. package/dist/src/exports/services.d.ts.map +1 -1
  77. package/dist/src/exports/services.js +5 -0
  78. package/dist/src/exports/services.js.map +1 -1
  79. package/dist/src/exports/types.d.ts +2 -1
  80. package/dist/src/exports/types.d.ts.map +1 -1
  81. package/dist/src/exports/types.js.map +1 -1
  82. package/dist/src/indexer/GitHubIndexer.d.ts +3 -1
  83. package/dist/src/indexer/GitHubIndexer.d.ts.map +1 -1
  84. package/dist/src/indexer/GitHubIndexer.js.map +1 -1
  85. package/dist/src/indexer/SkillParser.d.ts +22 -9
  86. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  87. package/dist/src/indexer/SkillParser.js +17 -10
  88. package/dist/src/indexer/SkillParser.js.map +1 -1
  89. package/dist/src/learning/PatternStore.d.ts +0 -2
  90. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  91. package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
  92. package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
  93. package/dist/src/learning/PatternStore.helpers.js +51 -0
  94. package/dist/src/learning/PatternStore.helpers.js.map +1 -1
  95. package/dist/src/learning/PatternStore.js +5 -37
  96. package/dist/src/learning/PatternStore.js.map +1 -1
  97. package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
  98. package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
  99. package/dist/src/repositories/AdvisoryRepository.js +128 -0
  100. package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
  101. package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
  102. package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
  103. package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
  104. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
  105. package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
  106. package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
  107. package/dist/src/repositories/CoInstallRepository.js +122 -0
  108. package/dist/src/repositories/CoInstallRepository.js.map +1 -0
  109. package/dist/src/repositories/IndexerRepository.d.ts.map +1 -1
  110. package/dist/src/repositories/IndexerRepository.js +5 -1
  111. package/dist/src/repositories/IndexerRepository.js.map +1 -1
  112. package/dist/src/repositories/SkillDependencyRepository.d.ts +73 -0
  113. package/dist/src/repositories/SkillDependencyRepository.d.ts.map +1 -0
  114. package/dist/src/repositories/SkillDependencyRepository.js +199 -0
  115. package/dist/src/repositories/SkillDependencyRepository.js.map +1 -0
  116. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  117. package/dist/src/repositories/SkillRepository.js +16 -5
  118. package/dist/src/repositories/SkillRepository.js.map +1 -1
  119. package/dist/src/scripts/validation/types.d.ts +2 -2
  120. package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
  121. package/dist/src/services/SearchService.helpers.js +4 -0
  122. package/dist/src/services/SearchService.helpers.js.map +1 -1
  123. package/dist/src/services/SearchService.types.d.ts +1 -0
  124. package/dist/src/services/SearchService.types.d.ts.map +1 -1
  125. package/dist/src/services/TaskRunner.d.ts +5 -81
  126. package/dist/src/services/TaskRunner.d.ts.map +1 -1
  127. package/dist/src/services/TaskRunner.js +7 -68
  128. package/dist/src/services/TaskRunner.js.map +1 -1
  129. package/dist/src/services/TaskRunner.process.d.ts +33 -0
  130. package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
  131. package/dist/src/services/TaskRunner.process.js +70 -0
  132. package/dist/src/services/TaskRunner.process.js.map +1 -0
  133. package/dist/src/services/TaskRunner.types.d.ts +76 -0
  134. package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
  135. package/dist/src/services/TaskRunner.types.js +22 -0
  136. package/dist/src/services/TaskRunner.types.js.map +1 -0
  137. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
  138. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
  139. package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
  140. package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
  141. package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
  142. package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
  143. package/dist/src/services/quarantine/QuarantineService.js +8 -205
  144. package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
  145. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
  146. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
  147. package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
  148. package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
  149. package/dist/src/session/SessionManager.d.ts +2 -33
  150. package/dist/src/session/SessionManager.d.ts.map +1 -1
  151. package/dist/src/session/SessionManager.js +14 -238
  152. package/dist/src/session/SessionManager.js.map +1 -1
  153. package/dist/src/session/SessionManager.memory.d.ts +67 -0
  154. package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
  155. package/dist/src/session/SessionManager.memory.js +262 -0
  156. package/dist/src/session/SessionManager.memory.js.map +1 -0
  157. package/dist/src/sources/SourceIndexer.d.ts +3 -1
  158. package/dist/src/sources/SourceIndexer.d.ts.map +1 -1
  159. package/dist/src/sources/SourceIndexer.js.map +1 -1
  160. package/dist/src/sync/SyncEngine.d.ts +13 -1
  161. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  162. package/dist/src/sync/SyncEngine.js +50 -1
  163. package/dist/src/sync/SyncEngine.js.map +1 -1
  164. package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
  165. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
  166. package/dist/src/testing/MultiLLMProvider.js +18 -130
  167. package/dist/src/testing/MultiLLMProvider.js.map +1 -1
  168. package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
  169. package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
  170. package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
  171. package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
  172. package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
  173. package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
  174. package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
  175. package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
  176. package/dist/src/types/dependencies.d.ts +85 -0
  177. package/dist/src/types/dependencies.d.ts.map +1 -0
  178. package/dist/src/types/dependencies.js +11 -0
  179. package/dist/src/types/dependencies.js.map +1 -0
  180. package/dist/src/types/skill.d.ts +13 -0
  181. package/dist/src/types/skill.d.ts.map +1 -1
  182. package/dist/src/types/skill.js.map +1 -1
  183. package/dist/src/types.d.ts +32 -0
  184. package/dist/src/types.d.ts.map +1 -1
  185. package/dist/src/versioning/change-classifier.d.ts +38 -0
  186. package/dist/src/versioning/change-classifier.d.ts.map +1 -0
  187. package/dist/src/versioning/change-classifier.js +187 -0
  188. package/dist/src/versioning/change-classifier.js.map +1 -0
  189. package/dist/src/versioning/change-classifier.test.d.ts +6 -0
  190. package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
  191. package/dist/src/versioning/change-classifier.test.js +275 -0
  192. package/dist/src/versioning/change-classifier.test.js.map +1 -0
  193. package/dist/src/versioning/update-risk.d.ts +50 -0
  194. package/dist/src/versioning/update-risk.d.ts.map +1 -0
  195. package/dist/src/versioning/update-risk.js +80 -0
  196. package/dist/src/versioning/update-risk.js.map +1 -0
  197. package/dist/src/versioning/update-risk.test.d.ts +6 -0
  198. package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
  199. package/dist/src/versioning/update-risk.test.js +200 -0
  200. package/dist/src/versioning/update-risk.test.js.map +1 -0
  201. package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
  202. package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
  203. package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
  204. package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
  205. package/dist/tests/CacheManager.test.d.ts +9 -0
  206. package/dist/tests/CacheManager.test.d.ts.map +1 -0
  207. package/dist/tests/CacheManager.test.js +163 -0
  208. package/dist/tests/CacheManager.test.js.map +1 -0
  209. package/dist/tests/DailyIndexPipeline.test.js +3 -3
  210. package/dist/tests/DailyIndexPipeline.test.js.map +1 -1
  211. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
  212. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
  213. package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
  214. package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
  215. package/dist/tests/GitHubIndexer.test.js +4 -2
  216. package/dist/tests/GitHubIndexer.test.js.map +1 -1
  217. package/dist/tests/SearchService.test.js +71 -0
  218. package/dist/tests/SearchService.test.js.map +1 -1
  219. package/dist/tests/SkillVersionRepository.test.d.ts +0 -11
  220. package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -1
  221. package/dist/tests/SkillVersionRepository.test.js +131 -194
  222. package/dist/tests/SkillVersionRepository.test.js.map +1 -1
  223. package/dist/tests/api/client.health.test.d.ts +15 -0
  224. package/dist/tests/api/client.health.test.d.ts.map +1 -0
  225. package/dist/tests/api/client.health.test.js +111 -0
  226. package/dist/tests/api/client.health.test.js.map +1 -0
  227. package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
  228. package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
  229. package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
  230. package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
  231. package/dist/tests/db/database-abstraction.test.js +12 -0
  232. package/dist/tests/db/database-abstraction.test.js.map +1 -1
  233. package/dist/tests/db/schema-migrations.test.d.ts +10 -0
  234. package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
  235. package/dist/tests/db/schema-migrations.test.js +134 -0
  236. package/dist/tests/db/schema-migrations.test.js.map +1 -0
  237. package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
  238. package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
  239. package/dist/tests/db/sqljsDriver.test.js +75 -0
  240. package/dist/tests/db/sqljsDriver.test.js.map +1 -0
  241. package/dist/tests/edge-cases/EdgeCases.test.js +4 -1
  242. package/dist/tests/edge-cases/EdgeCases.test.js.map +1 -1
  243. package/dist/tests/helpers/database.d.ts +32 -0
  244. package/dist/tests/helpers/database.d.ts.map +1 -0
  245. package/dist/tests/helpers/database.js +54 -0
  246. package/dist/tests/helpers/database.js.map +1 -0
  247. package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
  248. package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
  249. package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
  250. package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
  251. package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
  252. package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
  253. package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
  254. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
  255. package/dist/tests/repositories/SkillDependencyRepository.test.d.ts +10 -0
  256. package/dist/tests/repositories/SkillDependencyRepository.test.d.ts.map +1 -0
  257. package/dist/tests/repositories/SkillDependencyRepository.test.js +336 -0
  258. package/dist/tests/repositories/SkillDependencyRepository.test.js.map +1 -0
  259. package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
  260. package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
  261. package/dist/tests/routing/LanguageRouter.test.js +150 -0
  262. package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
  263. package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
  264. package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
  265. package/dist/tests/session/SessionManager.memory.test.js +219 -0
  266. package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
  267. package/dist/tests/sources.test.js +1 -1
  268. package/dist/tests/sources.test.js.map +1 -1
  269. package/dist/tests/sync/SyncEngine.test.js +32 -18
  270. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  271. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
  272. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
  273. package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
  274. package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
  275. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
  276. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
  277. package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
  278. package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
  279. package/dist/tests/unit/migrations/v10-dependencies.test.d.ts +6 -0
  280. package/dist/tests/unit/migrations/v10-dependencies.test.d.ts.map +1 -0
  281. package/dist/tests/unit/migrations/v10-dependencies.test.js +166 -0
  282. package/dist/tests/unit/migrations/v10-dependencies.test.js.map +1 -0
  283. package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
  284. package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
  285. package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
  286. package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
  287. 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;AAqBpG;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAc;gBAEZ,EAAE,EAAE,YAAY;IAK5B,OAAO,CAAC,KAAK,CAYZ;IAED,OAAO,CAAC,iBAAiB;IAmDzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK;IAwBtC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAE;IAyChD;;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;IA0BzD;;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"}
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, id);
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":"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"}
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,CAmB7C;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"}
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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"}
@@ -22,6 +22,7 @@ export interface FTSRow {
22
22
  security_findings_count: number | null;
23
23
  security_scanned_at: string | null;
24
24
  security_passed: number | null;
25
+ compatibility: string | null;
25
26
  created_at: string;
26
27
  updated_at: string;
27
28
  rank: number;
@@ -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;IAC9B,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
+ {"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 Logger } from '../utils/logger.js';
27
- /**
28
- * Default timeout: 10 minutes (600000ms)
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":"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"}
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
- * Default timeout: 10 minutes (600000ms)
30
- */
31
- export const DEFAULT_TASK_TIMEOUT_MS = 600000;
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 this.killProcess(task.pid);
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 this.gracefulShutdown(task.pid);
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