@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,336 @@
1
+ /**
2
+ * @fileoverview Tests for SkillDependencyRepository (SMI-3143)
3
+ * @module @skillsmith/core/tests/repositories/SkillDependencyRepository
4
+ *
5
+ * Tests CRUD operations, upsert idempotency, source filtering,
6
+ * reverse lookup, and graceful missing-table handling.
7
+ * Uses createTestDatabase() which runs all migrations including v10.
8
+ */
9
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
10
+ import { createTestDatabase, closeDatabase } from '../helpers/database.js';
11
+ import { SkillDependencyRepository } from '../../src/repositories/SkillDependencyRepository.js';
12
+ import { createDatabase } from '../../src/db/schema.js';
13
+ // ============================================================================
14
+ // Full-migration tests
15
+ // ============================================================================
16
+ let db;
17
+ let repo;
18
+ beforeEach(() => {
19
+ db = createTestDatabase();
20
+ repo = new SkillDependencyRepository(db);
21
+ });
22
+ afterEach(() => {
23
+ closeDatabase(db);
24
+ });
25
+ describe('SkillDependencyRepository', () => {
26
+ describe('getDependencies — empty table', () => {
27
+ it('returns empty array when no dependencies recorded', () => {
28
+ const results = repo.getDependencies('nonexistent-skill');
29
+ expect(results).toEqual([]);
30
+ });
31
+ });
32
+ describe('setDependencies — insert and upsert', () => {
33
+ it('inserts dependency rows', () => {
34
+ const deps = [
35
+ {
36
+ skill_id: 'author/skill-a',
37
+ dep_type: 'mcp_server',
38
+ dep_target: 'github',
39
+ dep_version: null,
40
+ dep_source: 'declared',
41
+ confidence: null,
42
+ metadata: null,
43
+ },
44
+ {
45
+ skill_id: 'author/skill-a',
46
+ dep_type: 'skill_hard',
47
+ dep_target: 'author/util',
48
+ dep_version: '>=1.0.0',
49
+ dep_source: 'declared',
50
+ confidence: null,
51
+ metadata: '{"reason":"needed for parsing"}',
52
+ },
53
+ ];
54
+ repo.setDependencies('author/skill-a', deps, 'declared');
55
+ const results = repo.getDependencies('author/skill-a');
56
+ expect(results).toHaveLength(2);
57
+ expect(results.map((r) => r.dep_type)).toContain('mcp_server');
58
+ expect(results.map((r) => r.dep_type)).toContain('skill_hard');
59
+ });
60
+ it('upserts on repeated calls (idempotent)', () => {
61
+ const dep = {
62
+ skill_id: 'author/skill-a',
63
+ dep_type: 'mcp_server',
64
+ dep_target: 'github',
65
+ dep_version: null,
66
+ dep_source: 'declared',
67
+ confidence: null,
68
+ metadata: null,
69
+ };
70
+ repo.setDependencies('author/skill-a', [dep], 'declared');
71
+ repo.setDependencies('author/skill-a', [dep], 'declared');
72
+ const results = repo.getDependencies('author/skill-a');
73
+ expect(results).toHaveLength(1);
74
+ });
75
+ it('updates version and metadata on upsert', () => {
76
+ const dep1 = {
77
+ skill_id: 'author/skill-a',
78
+ dep_type: 'skill_hard',
79
+ dep_target: 'author/util',
80
+ dep_version: '>=1.0.0',
81
+ dep_source: 'declared',
82
+ confidence: null,
83
+ metadata: null,
84
+ };
85
+ repo.setDependencies('author/skill-a', [dep1], 'declared');
86
+ const dep2 = {
87
+ ...dep1,
88
+ dep_version: '>=2.0.0',
89
+ metadata: '{"updated":true}',
90
+ };
91
+ repo.setDependencies('author/skill-a', [dep2], 'declared');
92
+ const results = repo.getDependencies('author/skill-a');
93
+ expect(results).toHaveLength(1);
94
+ expect(results[0].dep_version).toBe('>=2.0.0');
95
+ expect(results[0].metadata).toBe('{"updated":true}');
96
+ });
97
+ });
98
+ describe('getDependenciesBySource', () => {
99
+ it('filters by source', () => {
100
+ const declared = {
101
+ skill_id: 'author/skill-a',
102
+ dep_type: 'mcp_server',
103
+ dep_target: 'github',
104
+ dep_version: null,
105
+ dep_source: 'declared',
106
+ confidence: null,
107
+ metadata: null,
108
+ };
109
+ const inferred = {
110
+ skill_id: 'author/skill-a',
111
+ dep_type: 'mcp_server',
112
+ dep_target: 'linear',
113
+ dep_version: null,
114
+ dep_source: 'inferred_static',
115
+ confidence: 0.85,
116
+ metadata: null,
117
+ };
118
+ repo.setDependencies('author/skill-a', [declared], 'declared');
119
+ repo.setDependencies('author/skill-a', [inferred], 'inferred_static');
120
+ const declaredResults = repo.getDependenciesBySource('author/skill-a', 'declared');
121
+ expect(declaredResults).toHaveLength(1);
122
+ expect(declaredResults[0].dep_target).toBe('github');
123
+ const inferredResults = repo.getDependenciesBySource('author/skill-a', 'inferred_static');
124
+ expect(inferredResults).toHaveLength(1);
125
+ expect(inferredResults[0].dep_target).toBe('linear');
126
+ });
127
+ });
128
+ describe('getDependents — reverse lookup', () => {
129
+ it('finds skills that depend on a target', () => {
130
+ const depA = {
131
+ skill_id: 'author/skill-a',
132
+ dep_type: 'mcp_server',
133
+ dep_target: 'github',
134
+ dep_version: null,
135
+ dep_source: 'declared',
136
+ confidence: null,
137
+ metadata: null,
138
+ };
139
+ const depB = {
140
+ skill_id: 'author/skill-b',
141
+ dep_type: 'mcp_server',
142
+ dep_target: 'github',
143
+ dep_version: null,
144
+ dep_source: 'inferred_static',
145
+ confidence: 0.9,
146
+ metadata: null,
147
+ };
148
+ repo.setDependencies('author/skill-a', [depA], 'declared');
149
+ repo.setDependencies('author/skill-b', [depB], 'inferred_static');
150
+ const dependents = repo.getDependents('github');
151
+ expect(dependents).toHaveLength(2);
152
+ expect(dependents.map((r) => r.skill_id).sort()).toEqual(['author/skill-a', 'author/skill-b']);
153
+ });
154
+ it('filters by depType when provided', () => {
155
+ const mcpDep = {
156
+ skill_id: 'author/skill-a',
157
+ dep_type: 'mcp_server',
158
+ dep_target: 'github',
159
+ dep_version: null,
160
+ dep_source: 'declared',
161
+ confidence: null,
162
+ metadata: null,
163
+ };
164
+ const envDep = {
165
+ skill_id: 'author/skill-b',
166
+ dep_type: 'env_tool',
167
+ dep_target: 'github',
168
+ dep_version: null,
169
+ dep_source: 'declared',
170
+ confidence: null,
171
+ metadata: null,
172
+ };
173
+ repo.setDependencies('author/skill-a', [mcpDep], 'declared');
174
+ repo.setDependencies('author/skill-b', [envDep], 'declared');
175
+ const mcpDependents = repo.getDependents('github', 'mcp_server');
176
+ expect(mcpDependents).toHaveLength(1);
177
+ expect(mcpDependents[0].skill_id).toBe('author/skill-a');
178
+ });
179
+ });
180
+ describe('clearInferred', () => {
181
+ it('deletes inferred deps but preserves declared', () => {
182
+ const declared = {
183
+ skill_id: 'author/skill-a',
184
+ dep_type: 'mcp_server',
185
+ dep_target: 'github',
186
+ dep_version: null,
187
+ dep_source: 'declared',
188
+ confidence: null,
189
+ metadata: null,
190
+ };
191
+ const inferred = {
192
+ skill_id: 'author/skill-a',
193
+ dep_type: 'mcp_server',
194
+ dep_target: 'linear',
195
+ dep_version: null,
196
+ dep_source: 'inferred_static',
197
+ confidence: 0.85,
198
+ metadata: null,
199
+ };
200
+ repo.setDependencies('author/skill-a', [declared], 'declared');
201
+ repo.setDependencies('author/skill-a', [inferred], 'inferred_static');
202
+ repo.clearInferred('author/skill-a');
203
+ const results = repo.getDependencies('author/skill-a');
204
+ expect(results).toHaveLength(1);
205
+ expect(results[0].dep_source).toBe('declared');
206
+ expect(results[0].dep_target).toBe('github');
207
+ });
208
+ });
209
+ describe('clearAll', () => {
210
+ it('deletes all deps for a skill', () => {
211
+ const dep = {
212
+ skill_id: 'author/skill-a',
213
+ dep_type: 'mcp_server',
214
+ dep_target: 'github',
215
+ dep_version: null,
216
+ dep_source: 'declared',
217
+ confidence: null,
218
+ metadata: null,
219
+ };
220
+ repo.setDependencies('author/skill-a', [dep], 'declared');
221
+ expect(repo.getDependencies('author/skill-a')).toHaveLength(1);
222
+ repo.clearAll('author/skill-a');
223
+ expect(repo.getDependencies('author/skill-a')).toEqual([]);
224
+ });
225
+ it('does not affect other skills', () => {
226
+ const depA = {
227
+ skill_id: 'author/skill-a',
228
+ dep_type: 'mcp_server',
229
+ dep_target: 'github',
230
+ dep_version: null,
231
+ dep_source: 'declared',
232
+ confidence: null,
233
+ metadata: null,
234
+ };
235
+ const depB = {
236
+ skill_id: 'author/skill-b',
237
+ dep_type: 'mcp_server',
238
+ dep_target: 'linear',
239
+ dep_version: null,
240
+ dep_source: 'declared',
241
+ confidence: null,
242
+ metadata: null,
243
+ };
244
+ repo.setDependencies('author/skill-a', [depA], 'declared');
245
+ repo.setDependencies('author/skill-b', [depB], 'declared');
246
+ repo.clearAll('author/skill-a');
247
+ expect(repo.getDependencies('author/skill-a')).toEqual([]);
248
+ expect(repo.getDependencies('author/skill-b')).toHaveLength(1);
249
+ });
250
+ });
251
+ describe('getDependencies — ordering', () => {
252
+ it('returns results ordered by dep_type', () => {
253
+ const deps = [
254
+ {
255
+ skill_id: 'author/skill-a',
256
+ dep_type: 'skill_hard',
257
+ dep_target: 'author/util',
258
+ dep_version: null,
259
+ dep_source: 'declared',
260
+ confidence: null,
261
+ metadata: null,
262
+ },
263
+ {
264
+ skill_id: 'author/skill-a',
265
+ dep_type: 'env_tool',
266
+ dep_target: 'docker',
267
+ dep_version: null,
268
+ dep_source: 'declared',
269
+ confidence: null,
270
+ metadata: null,
271
+ },
272
+ {
273
+ skill_id: 'author/skill-a',
274
+ dep_type: 'mcp_server',
275
+ dep_target: 'github',
276
+ dep_version: null,
277
+ dep_source: 'declared',
278
+ confidence: null,
279
+ metadata: null,
280
+ },
281
+ ];
282
+ repo.setDependencies('author/skill-a', deps, 'declared');
283
+ const results = repo.getDependencies('author/skill-a');
284
+ const types = results.map((r) => r.dep_type);
285
+ // Alphabetical: env_tool, mcp_server, skill_hard
286
+ expect(types).toEqual(['env_tool', 'mcp_server', 'skill_hard']);
287
+ });
288
+ });
289
+ });
290
+ // ============================================================================
291
+ // Graceful missing-table tests (no migrations)
292
+ // ============================================================================
293
+ describe('SkillDependencyRepository — missing table', () => {
294
+ let bareDb;
295
+ beforeEach(() => {
296
+ // createDatabase() without migrations — no skill_dependencies table
297
+ bareDb = createDatabase();
298
+ });
299
+ afterEach(() => {
300
+ closeDatabase(bareDb);
301
+ });
302
+ it('getDependencies returns empty array', () => {
303
+ const bareRepo = new SkillDependencyRepository(bareDb);
304
+ expect(bareRepo.getDependencies('any-skill')).toEqual([]);
305
+ });
306
+ it('getDependenciesBySource returns empty array', () => {
307
+ const bareRepo = new SkillDependencyRepository(bareDb);
308
+ expect(bareRepo.getDependenciesBySource('any-skill', 'declared')).toEqual([]);
309
+ });
310
+ it('getDependents returns empty array', () => {
311
+ const bareRepo = new SkillDependencyRepository(bareDb);
312
+ expect(bareRepo.getDependents('any-target')).toEqual([]);
313
+ });
314
+ it('setDependencies does not throw', () => {
315
+ const bareRepo = new SkillDependencyRepository(bareDb);
316
+ const dep = {
317
+ skill_id: 'x',
318
+ dep_type: 'mcp_server',
319
+ dep_target: 'y',
320
+ dep_version: null,
321
+ dep_source: 'declared',
322
+ confidence: null,
323
+ metadata: null,
324
+ };
325
+ expect(() => bareRepo.setDependencies('x', [dep], 'declared')).not.toThrow();
326
+ });
327
+ it('clearInferred does not throw', () => {
328
+ const bareRepo = new SkillDependencyRepository(bareDb);
329
+ expect(() => bareRepo.clearInferred('any-skill')).not.toThrow();
330
+ });
331
+ it('clearAll does not throw', () => {
332
+ const bareRepo = new SkillDependencyRepository(bareDb);
333
+ expect(() => bareRepo.clearAll('any-skill')).not.toThrow();
334
+ });
335
+ });
336
+ //# sourceMappingURL=SkillDependencyRepository.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillDependencyRepository.test.js","sourceRoot":"","sources":["../../../tests/repositories/SkillDependencyRepository.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SMI-2756: Wave 3 — LanguageRouter tests
3
+ *
4
+ * Tests the LanguageRouter dispatch layer: adapter registration,
5
+ * extension-based lookup, tryGetAdapter, canHandle, getLanguage,
6
+ * getSupportedLanguages, framework rules aggregation, and dispose.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=LanguageRouter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageRouter.test.d.ts","sourceRoot":"","sources":["../../../tests/routing/LanguageRouter.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * SMI-2756: Wave 3 — LanguageRouter tests
3
+ *
4
+ * Tests the LanguageRouter dispatch layer: adapter registration,
5
+ * extension-based lookup, tryGetAdapter, canHandle, getLanguage,
6
+ * getSupportedLanguages, framework rules aggregation, and dispose.
7
+ */
8
+ import { describe, it, expect } from 'vitest';
9
+ import { LanguageRouter } from '../../src/analysis/router.js';
10
+ describe('LanguageRouter', () => {
11
+ // -------------------------------------------------------------------------
12
+ // createWithAllAdapters factory
13
+ // -------------------------------------------------------------------------
14
+ describe('createWithAllAdapters', () => {
15
+ it('creates a router with multiple adapters pre-registered', () => {
16
+ const router = LanguageRouter.createWithAllAdapters();
17
+ expect(router.adapterCount).toBeGreaterThan(0);
18
+ });
19
+ it('creates a router with only specified languages', () => {
20
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
21
+ expect(router.getSupportedLanguages()).toContain('typescript');
22
+ // Should have fewer adapters than the full set
23
+ const fullRouter = LanguageRouter.createWithAllAdapters();
24
+ expect(router.adapterCount).toBeLessThanOrEqual(fullRouter.adapterCount);
25
+ });
26
+ });
27
+ // -------------------------------------------------------------------------
28
+ // registerAdapter / unregisterAdapter
29
+ // -------------------------------------------------------------------------
30
+ describe('registerAdapter / unregisterAdapter', () => {
31
+ it('registers an adapter and makes its extension routable', () => {
32
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
33
+ expect(router.canHandle('main.ts')).toBe(true);
34
+ });
35
+ it('unregisterAdapter removes extension mappings', () => {
36
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
37
+ expect(router.canHandle('main.ts')).toBe(true);
38
+ const removed = router.unregisterAdapter('typescript');
39
+ expect(removed).toBe(true);
40
+ expect(router.canHandle('main.ts')).toBe(false);
41
+ });
42
+ it('unregisterAdapter returns false for unknown language', () => {
43
+ const router = new LanguageRouter();
44
+ const result = router.unregisterAdapter('typescript');
45
+ expect(result).toBe(false);
46
+ });
47
+ it('re-registering an adapter replaces the old one', () => {
48
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
49
+ const before = router.adapterCount;
50
+ // Re-register the same language
51
+ const tsAdapter = router.getAdapterByLanguage('typescript');
52
+ router.registerAdapter(tsAdapter);
53
+ // Count should not grow
54
+ expect(router.adapterCount).toBe(before);
55
+ });
56
+ });
57
+ // -------------------------------------------------------------------------
58
+ // getAdapter / tryGetAdapter / canHandle / getLanguage
59
+ // -------------------------------------------------------------------------
60
+ describe('getAdapter', () => {
61
+ it('returns adapter for a known extension', () => {
62
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
63
+ const adapter = router.tryGetAdapter('main.ts');
64
+ expect(adapter).not.toBeNull();
65
+ expect(adapter?.language).toBe('typescript');
66
+ });
67
+ it('throws for unknown extension', () => {
68
+ const router = new LanguageRouter();
69
+ expect(() => router.getAdapter('unknown.xyz')).toThrow(/No adapter registered/);
70
+ });
71
+ it('tryGetAdapter returns null for unknown extension', () => {
72
+ const router = new LanguageRouter();
73
+ expect(router.tryGetAdapter('unknown.xyz')).toBeNull();
74
+ });
75
+ });
76
+ describe('canHandle', () => {
77
+ it('returns true for registered extension', () => {
78
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['python'] });
79
+ expect(router.canHandle('app.py')).toBe(true);
80
+ });
81
+ it('returns false for unregistered extension', () => {
82
+ const router = new LanguageRouter();
83
+ expect(router.canHandle('app.cobol')).toBe(false);
84
+ });
85
+ });
86
+ describe('getLanguage', () => {
87
+ it('returns language for a known file path', () => {
88
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['python'] });
89
+ expect(router.getLanguage('script.py')).toBe('python');
90
+ });
91
+ it('returns null for unsupported extension', () => {
92
+ const router = new LanguageRouter();
93
+ expect(router.getLanguage('file.cobol')).toBeNull();
94
+ });
95
+ });
96
+ // -------------------------------------------------------------------------
97
+ // getSupportedLanguages / getSupportedExtensions
98
+ // -------------------------------------------------------------------------
99
+ describe('getSupportedLanguages / getSupportedExtensions', () => {
100
+ it('getSupportedLanguages returns registered language keys', () => {
101
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript', 'python'] });
102
+ const langs = router.getSupportedLanguages();
103
+ expect(langs).toContain('typescript');
104
+ expect(langs).toContain('python');
105
+ });
106
+ it('getSupportedExtensions includes dot-prefixed extensions', () => {
107
+ const router = LanguageRouter.createWithAllAdapters({ languages: ['typescript'] });
108
+ const exts = router.getSupportedExtensions();
109
+ expect(exts.some((e) => e.startsWith('.'))).toBe(true);
110
+ });
111
+ });
112
+ // -------------------------------------------------------------------------
113
+ // getAllFrameworkRules / getFrameworkRules
114
+ // -------------------------------------------------------------------------
115
+ describe('framework rules', () => {
116
+ it('getAllFrameworkRules returns an array', () => {
117
+ const router = LanguageRouter.createWithAllAdapters();
118
+ const rules = router.getAllFrameworkRules();
119
+ expect(Array.isArray(rules)).toBe(true);
120
+ });
121
+ it('getFrameworkRules returns empty array for unregistered language', () => {
122
+ const router = new LanguageRouter();
123
+ const rules = router.getFrameworkRules('typescript');
124
+ expect(rules).toEqual([]);
125
+ });
126
+ });
127
+ // -------------------------------------------------------------------------
128
+ // dispose
129
+ // -------------------------------------------------------------------------
130
+ describe('dispose', () => {
131
+ it('clears adapter registry after dispose', () => {
132
+ const router = LanguageRouter.createWithAllAdapters();
133
+ expect(router.adapterCount).toBeGreaterThan(0);
134
+ router.dispose();
135
+ expect(router.adapterCount).toBe(0);
136
+ });
137
+ });
138
+ // -------------------------------------------------------------------------
139
+ // detectLanguageFromContent (disabled)
140
+ // -------------------------------------------------------------------------
141
+ describe('detectLanguageFromContent', () => {
142
+ it('returns language:null and method:none when detection is disabled', () => {
143
+ const router = new LanguageRouter({ enableLanguageDetection: false });
144
+ const result = router.detectLanguageFromContent('#!/usr/bin/env python3\nprint("hello")');
145
+ expect(result.language).toBeNull();
146
+ expect(result.method).toBe('none');
147
+ });
148
+ });
149
+ });
150
+ //# sourceMappingURL=LanguageRouter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageRouter.test.js","sourceRoot":"","sources":["../../../tests/routing/LanguageRouter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SMI-2754: SessionManager Memory Operation Tests
3
+ *
4
+ * Tests for storeMemoryEntry, retrieveMemoryEntry, deleteMemoryEntry,
5
+ * runPreTaskHook, and runPostTaskHook.
6
+ *
7
+ * Since USE_V3_API is evaluated at module load time, we mock the helpers
8
+ * module to control getClaudeFlowMemory / getClaudeFlowMcp / USE_V3_API.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=SessionManager.memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.memory.test.d.ts","sourceRoot":"","sources":["../../../tests/session/SessionManager.memory.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}