@skillsmith/core 0.4.13 → 0.4.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/README.md +2 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/analytics/storage.d.ts +8 -2
  4. package/dist/src/analytics/storage.d.ts.map +1 -1
  5. package/dist/src/analytics/storage.js +16 -5
  6. package/dist/src/analytics/storage.js.map +1 -1
  7. package/dist/src/analytics/usage-tracker.d.ts +8 -2
  8. package/dist/src/analytics/usage-tracker.d.ts.map +1 -1
  9. package/dist/src/analytics/usage-tracker.js +24 -11
  10. package/dist/src/analytics/usage-tracker.js.map +1 -1
  11. package/dist/src/api/client.d.ts +1 -0
  12. package/dist/src/api/client.d.ts.map +1 -1
  13. package/dist/src/api/client.health.d.ts +26 -0
  14. package/dist/src/api/client.health.d.ts.map +1 -0
  15. package/dist/src/api/client.health.js +74 -0
  16. package/dist/src/api/client.health.js.map +1 -0
  17. package/dist/src/api/client.js +3 -51
  18. package/dist/src/api/client.js.map +1 -1
  19. package/dist/src/benchmarks/IndexBenchmark.js +2 -2
  20. package/dist/src/benchmarks/IndexBenchmark.js.map +1 -1
  21. package/dist/src/benchmarks/SearchBenchmark.js +2 -2
  22. package/dist/src/benchmarks/SearchBenchmark.js.map +1 -1
  23. package/dist/src/benchmarks/cacheBenchmark.js +2 -2
  24. package/dist/src/benchmarks/cacheBenchmark.js.map +1 -1
  25. package/dist/src/benchmarks/embeddingBenchmark.js +1 -1
  26. package/dist/src/benchmarks/embeddingBenchmark.js.map +1 -1
  27. package/dist/src/cache/CacheManager.d.ts +13 -2
  28. package/dist/src/cache/CacheManager.d.ts.map +1 -1
  29. package/dist/src/cache/CacheManager.js +27 -6
  30. package/dist/src/cache/CacheManager.js.map +1 -1
  31. package/dist/src/cache/TieredCache.d.ts +15 -2
  32. package/dist/src/cache/TieredCache.d.ts.map +1 -1
  33. package/dist/src/cache/TieredCache.js +52 -70
  34. package/dist/src/cache/TieredCache.js.map +1 -1
  35. package/dist/src/cache/index.d.ts +12 -0
  36. package/dist/src/cache/index.d.ts.map +1 -1
  37. package/dist/src/cache/index.js +20 -1
  38. package/dist/src/cache/index.js.map +1 -1
  39. package/dist/src/cache/sqlite.d.ts +15 -1
  40. package/dist/src/cache/sqlite.d.ts.map +1 -1
  41. package/dist/src/cache/sqlite.js +22 -4
  42. package/dist/src/cache/sqlite.js.map +1 -1
  43. package/dist/src/db/createDatabase.d.ts +9 -1
  44. package/dist/src/db/createDatabase.d.ts.map +1 -1
  45. package/dist/src/db/createDatabase.js +21 -1
  46. package/dist/src/db/createDatabase.js.map +1 -1
  47. package/dist/src/db/drivers/sqljsDriver.d.ts.map +1 -1
  48. package/dist/src/db/drivers/sqljsDriver.js +5 -2
  49. package/dist/src/db/drivers/sqljsDriver.js.map +1 -1
  50. package/dist/src/db/migrations/v5-skill-versions.d.ts +30 -0
  51. package/dist/src/db/migrations/v5-skill-versions.d.ts.map +1 -0
  52. package/dist/src/db/migrations/v5-skill-versions.js +45 -0
  53. package/dist/src/db/migrations/v5-skill-versions.js.map +1 -0
  54. package/dist/src/db/migrations/v5b-change-type.d.ts +19 -0
  55. package/dist/src/db/migrations/v5b-change-type.d.ts.map +1 -0
  56. package/dist/src/db/migrations/v5b-change-type.js +22 -0
  57. package/dist/src/db/migrations/v5b-change-type.js.map +1 -0
  58. package/dist/src/db/migrations/v6-advisories.d.ts +32 -0
  59. package/dist/src/db/migrations/v6-advisories.d.ts.map +1 -0
  60. package/dist/src/db/migrations/v6-advisories.js +53 -0
  61. package/dist/src/db/migrations/v6-advisories.js.map +1 -0
  62. package/dist/src/db/migrations/v7-compatibility.d.ts +21 -0
  63. package/dist/src/db/migrations/v7-compatibility.d.ts.map +1 -0
  64. package/dist/src/db/migrations/v7-compatibility.js +23 -0
  65. package/dist/src/db/migrations/v7-compatibility.js.map +1 -0
  66. package/dist/src/db/migrations/v8-co-installs.d.ts +21 -0
  67. package/dist/src/db/migrations/v8-co-installs.d.ts.map +1 -0
  68. package/dist/src/db/migrations/v8-co-installs.js +33 -0
  69. package/dist/src/db/migrations/v8-co-installs.js.map +1 -0
  70. package/dist/src/db/schema.d.ts +6 -11
  71. package/dist/src/db/schema.d.ts.map +1 -1
  72. package/dist/src/db/schema.js +38 -17
  73. package/dist/src/db/schema.js.map +1 -1
  74. package/dist/src/embeddings/hnsw-store.d.ts +14 -0
  75. package/dist/src/embeddings/hnsw-store.d.ts.map +1 -1
  76. package/dist/src/embeddings/hnsw-store.helpers.d.ts +4 -4
  77. package/dist/src/embeddings/hnsw-store.helpers.d.ts.map +1 -1
  78. package/dist/src/embeddings/hnsw-store.helpers.js +5 -5
  79. package/dist/src/embeddings/hnsw-store.helpers.js.map +1 -1
  80. package/dist/src/embeddings/hnsw-store.js +32 -4
  81. package/dist/src/embeddings/hnsw-store.js.map +1 -1
  82. package/dist/src/embeddings/index.d.ts +15 -1
  83. package/dist/src/embeddings/index.d.ts.map +1 -1
  84. package/dist/src/embeddings/index.js +24 -4
  85. package/dist/src/embeddings/index.js.map +1 -1
  86. package/dist/src/exports/repositories.d.ts +5 -0
  87. package/dist/src/exports/repositories.d.ts.map +1 -1
  88. package/dist/src/exports/repositories.js +17 -0
  89. package/dist/src/exports/repositories.js.map +1 -1
  90. package/dist/src/exports/types.d.ts +1 -1
  91. package/dist/src/exports/types.d.ts.map +1 -1
  92. package/dist/src/exports/types.js.map +1 -1
  93. package/dist/src/index.d.ts +1 -1
  94. package/dist/src/index.d.ts.map +1 -1
  95. package/dist/src/index.js +2 -1
  96. package/dist/src/index.js.map +1 -1
  97. package/dist/src/indexer/SkillParser.d.ts +2 -0
  98. package/dist/src/indexer/SkillParser.d.ts.map +1 -1
  99. package/dist/src/indexer/SkillParser.js.map +1 -1
  100. package/dist/src/learning/PatternStore.d.ts +8 -2
  101. package/dist/src/learning/PatternStore.d.ts.map +1 -1
  102. package/dist/src/learning/PatternStore.helpers.d.ts +19 -1
  103. package/dist/src/learning/PatternStore.helpers.d.ts.map +1 -1
  104. package/dist/src/learning/PatternStore.helpers.js +51 -0
  105. package/dist/src/learning/PatternStore.helpers.js.map +1 -1
  106. package/dist/src/learning/PatternStore.js +19 -39
  107. package/dist/src/learning/PatternStore.js.map +1 -1
  108. package/dist/src/repositories/AdvisoryRepository.d.ts +80 -0
  109. package/dist/src/repositories/AdvisoryRepository.d.ts.map +1 -0
  110. package/dist/src/repositories/AdvisoryRepository.js +128 -0
  111. package/dist/src/repositories/AdvisoryRepository.js.map +1 -0
  112. package/dist/src/repositories/AdvisoryRepository.test.d.ts +6 -0
  113. package/dist/src/repositories/AdvisoryRepository.test.d.ts.map +1 -0
  114. package/dist/src/repositories/AdvisoryRepository.test.js +149 -0
  115. package/dist/src/repositories/AdvisoryRepository.test.js.map +1 -0
  116. package/dist/src/repositories/CoInstallRepository.d.ts +68 -0
  117. package/dist/src/repositories/CoInstallRepository.d.ts.map +1 -0
  118. package/dist/src/repositories/CoInstallRepository.js +122 -0
  119. package/dist/src/repositories/CoInstallRepository.js.map +1 -0
  120. package/dist/src/repositories/SkillRepository.d.ts.map +1 -1
  121. package/dist/src/repositories/SkillRepository.js +16 -5
  122. package/dist/src/repositories/SkillRepository.js.map +1 -1
  123. package/dist/src/repositories/SkillVersionRepository.d.ts +82 -0
  124. package/dist/src/repositories/SkillVersionRepository.d.ts.map +1 -0
  125. package/dist/src/repositories/SkillVersionRepository.js +118 -0
  126. package/dist/src/repositories/SkillVersionRepository.js.map +1 -0
  127. package/dist/src/search/hybrid.d.ts +15 -4
  128. package/dist/src/search/hybrid.d.ts.map +1 -1
  129. package/dist/src/search/hybrid.js +25 -9
  130. package/dist/src/search/hybrid.js.map +1 -1
  131. package/dist/src/services/SearchService.helpers.d.ts.map +1 -1
  132. package/dist/src/services/SearchService.helpers.js +4 -0
  133. package/dist/src/services/SearchService.helpers.js.map +1 -1
  134. package/dist/src/services/SearchService.types.d.ts +1 -0
  135. package/dist/src/services/SearchService.types.d.ts.map +1 -1
  136. package/dist/src/services/TaskRunner.d.ts +5 -81
  137. package/dist/src/services/TaskRunner.d.ts.map +1 -1
  138. package/dist/src/services/TaskRunner.js +7 -68
  139. package/dist/src/services/TaskRunner.js.map +1 -1
  140. package/dist/src/services/TaskRunner.process.d.ts +33 -0
  141. package/dist/src/services/TaskRunner.process.d.ts.map +1 -0
  142. package/dist/src/services/TaskRunner.process.js +70 -0
  143. package/dist/src/services/TaskRunner.process.js.map +1 -0
  144. package/dist/src/services/TaskRunner.types.d.ts +76 -0
  145. package/dist/src/services/TaskRunner.types.d.ts.map +1 -0
  146. package/dist/src/services/TaskRunner.types.js +22 -0
  147. package/dist/src/services/TaskRunner.types.js.map +1 -0
  148. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts +13 -0
  149. package/dist/src/services/__tests__/TaskRunner.process.test.d.ts.map +1 -0
  150. package/dist/src/services/__tests__/TaskRunner.process.test.js +91 -0
  151. package/dist/src/services/__tests__/TaskRunner.process.test.js.map +1 -0
  152. package/dist/src/services/quarantine/QuarantineService.d.ts +3 -24
  153. package/dist/src/services/quarantine/QuarantineService.d.ts.map +1 -1
  154. package/dist/src/services/quarantine/QuarantineService.js +8 -205
  155. package/dist/src/services/quarantine/QuarantineService.js.map +1 -1
  156. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts +57 -0
  157. package/dist/src/services/quarantine/QuarantineService.multiapproval.d.ts.map +1 -0
  158. package/dist/src/services/quarantine/QuarantineService.multiapproval.js +211 -0
  159. package/dist/src/services/quarantine/QuarantineService.multiapproval.js.map +1 -0
  160. package/dist/src/session/SessionManager.d.ts +2 -33
  161. package/dist/src/session/SessionManager.d.ts.map +1 -1
  162. package/dist/src/session/SessionManager.js +14 -238
  163. package/dist/src/session/SessionManager.js.map +1 -1
  164. package/dist/src/session/SessionManager.memory.d.ts +67 -0
  165. package/dist/src/session/SessionManager.memory.d.ts.map +1 -0
  166. package/dist/src/session/SessionManager.memory.js +262 -0
  167. package/dist/src/session/SessionManager.memory.js.map +1 -0
  168. package/dist/src/sync/SyncEngine.d.ts +13 -1
  169. package/dist/src/sync/SyncEngine.d.ts.map +1 -1
  170. package/dist/src/sync/SyncEngine.js +50 -1
  171. package/dist/src/sync/SyncEngine.js.map +1 -1
  172. package/dist/src/testing/MultiLLMProvider.d.ts +5 -6
  173. package/dist/src/testing/MultiLLMProvider.d.ts.map +1 -1
  174. package/dist/src/testing/MultiLLMProvider.js +18 -130
  175. package/dist/src/testing/MultiLLMProvider.js.map +1 -1
  176. package/dist/src/testing/MultiLLMProvider.metrics.d.ts +33 -0
  177. package/dist/src/testing/MultiLLMProvider.metrics.d.ts.map +1 -0
  178. package/dist/src/testing/MultiLLMProvider.metrics.js +87 -0
  179. package/dist/src/testing/MultiLLMProvider.metrics.js.map +1 -0
  180. package/dist/src/testing/MultiLLMProvider.selection.d.ts +77 -0
  181. package/dist/src/testing/MultiLLMProvider.selection.d.ts.map +1 -0
  182. package/dist/src/testing/MultiLLMProvider.selection.js +151 -0
  183. package/dist/src/testing/MultiLLMProvider.selection.js.map +1 -0
  184. package/dist/src/types/skill.d.ts +10 -0
  185. package/dist/src/types/skill.d.ts.map +1 -1
  186. package/dist/src/types.d.ts +34 -0
  187. package/dist/src/types.d.ts.map +1 -1
  188. package/dist/src/versioning/change-classifier.d.ts +38 -0
  189. package/dist/src/versioning/change-classifier.d.ts.map +1 -0
  190. package/dist/src/versioning/change-classifier.js +187 -0
  191. package/dist/src/versioning/change-classifier.js.map +1 -0
  192. package/dist/src/versioning/change-classifier.test.d.ts +6 -0
  193. package/dist/src/versioning/change-classifier.test.d.ts.map +1 -0
  194. package/dist/src/versioning/change-classifier.test.js +275 -0
  195. package/dist/src/versioning/change-classifier.test.js.map +1 -0
  196. package/dist/src/versioning/update-risk.d.ts +50 -0
  197. package/dist/src/versioning/update-risk.d.ts.map +1 -0
  198. package/dist/src/versioning/update-risk.js +80 -0
  199. package/dist/src/versioning/update-risk.js.map +1 -0
  200. package/dist/src/versioning/update-risk.test.d.ts +6 -0
  201. package/dist/src/versioning/update-risk.test.d.ts.map +1 -0
  202. package/dist/src/versioning/update-risk.test.js +200 -0
  203. package/dist/src/versioning/update-risk.test.js.map +1 -0
  204. package/dist/tests/AnalyticsStorage.test.js +2 -2
  205. package/dist/tests/AnalyticsStorage.test.js.map +1 -1
  206. package/dist/tests/AuditLogger.edge-cases.test.d.ts +10 -0
  207. package/dist/tests/AuditLogger.edge-cases.test.d.ts.map +1 -0
  208. package/dist/tests/AuditLogger.edge-cases.test.js +183 -0
  209. package/dist/tests/AuditLogger.edge-cases.test.js.map +1 -0
  210. package/dist/tests/CacheManager.test.d.ts +9 -0
  211. package/dist/tests/CacheManager.test.d.ts.map +1 -0
  212. package/dist/tests/CacheManager.test.js +163 -0
  213. package/dist/tests/CacheManager.test.js.map +1 -0
  214. package/dist/tests/CacheSecurity.test.js +4 -4
  215. package/dist/tests/CacheSecurity.test.js.map +1 -1
  216. package/dist/tests/EmbeddingService.test.js +11 -12
  217. package/dist/tests/EmbeddingService.test.js.map +1 -1
  218. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts +10 -0
  219. package/dist/tests/GitHubIndexer.edge-cases.test.d.ts.map +1 -0
  220. package/dist/tests/GitHubIndexer.edge-cases.test.js +255 -0
  221. package/dist/tests/GitHubIndexer.edge-cases.test.js.map +1 -0
  222. package/dist/tests/HybridSearch.test.d.ts +8 -0
  223. package/dist/tests/HybridSearch.test.d.ts.map +1 -0
  224. package/dist/tests/HybridSearch.test.js +48 -0
  225. package/dist/tests/HybridSearch.test.js.map +1 -0
  226. package/dist/tests/SearchService.test.js +71 -0
  227. package/dist/tests/SearchService.test.js.map +1 -1
  228. package/dist/tests/SkillVersionRepository.test.d.ts +2 -0
  229. package/dist/tests/SkillVersionRepository.test.d.ts.map +1 -0
  230. package/dist/tests/SkillVersionRepository.test.js +168 -0
  231. package/dist/tests/SkillVersionRepository.test.js.map +1 -0
  232. package/dist/tests/TieredCache.test.js +10 -10
  233. package/dist/tests/TieredCache.test.js.map +1 -1
  234. package/dist/tests/UsageTracker.test.js +6 -6
  235. package/dist/tests/UsageTracker.test.js.map +1 -1
  236. package/dist/tests/analytics/usage-tracker.test.js +8 -8
  237. package/dist/tests/analytics/usage-tracker.test.js.map +1 -1
  238. package/dist/tests/api/client.health.test.d.ts +15 -0
  239. package/dist/tests/api/client.health.test.d.ts.map +1 -0
  240. package/dist/tests/api/client.health.test.js +111 -0
  241. package/dist/tests/api/client.health.test.js.map +1 -0
  242. package/dist/tests/cache.test.js +7 -9
  243. package/dist/tests/cache.test.js.map +1 -1
  244. package/dist/tests/db/betterSqlite3Driver.test.d.ts +8 -0
  245. package/dist/tests/db/betterSqlite3Driver.test.d.ts.map +1 -0
  246. package/dist/tests/db/betterSqlite3Driver.test.js +88 -0
  247. package/dist/tests/db/betterSqlite3Driver.test.js.map +1 -0
  248. package/dist/tests/db/database-abstraction.test.js +48 -0
  249. package/dist/tests/db/database-abstraction.test.js.map +1 -1
  250. package/dist/tests/db/schema-migrations.test.d.ts +10 -0
  251. package/dist/tests/db/schema-migrations.test.d.ts.map +1 -0
  252. package/dist/tests/db/schema-migrations.test.js +134 -0
  253. package/dist/tests/db/schema-migrations.test.js.map +1 -0
  254. package/dist/tests/db/sqljsDriver.test.d.ts +9 -0
  255. package/dist/tests/db/sqljsDriver.test.d.ts.map +1 -0
  256. package/dist/tests/db/sqljsDriver.test.js +75 -0
  257. package/dist/tests/db/sqljsDriver.test.js.map +1 -0
  258. package/dist/tests/embeddings/hnsw-store.test.js +27 -24
  259. package/dist/tests/embeddings/hnsw-store.test.js.map +1 -1
  260. package/dist/tests/helpers/database.d.ts +32 -0
  261. package/dist/tests/helpers/database.d.ts.map +1 -0
  262. package/dist/tests/helpers/database.js +54 -0
  263. package/dist/tests/helpers/database.js.map +1 -0
  264. package/dist/tests/learning/PatternStore.helpers.test.d.ts +17 -0
  265. package/dist/tests/learning/PatternStore.helpers.test.d.ts.map +1 -0
  266. package/dist/tests/learning/PatternStore.helpers.test.js +301 -0
  267. package/dist/tests/learning/PatternStore.helpers.test.js.map +1 -0
  268. package/dist/tests/learning/PatternStore.test.js +9 -0
  269. package/dist/tests/learning/PatternStore.test.js.map +1 -1
  270. package/dist/tests/repositories/CoInstallRepository.test.d.ts +9 -0
  271. package/dist/tests/repositories/CoInstallRepository.test.d.ts.map +1 -0
  272. package/dist/tests/repositories/CoInstallRepository.test.js +126 -0
  273. package/dist/tests/repositories/CoInstallRepository.test.js.map +1 -0
  274. package/dist/tests/routing/LanguageRouter.test.d.ts +9 -0
  275. package/dist/tests/routing/LanguageRouter.test.d.ts.map +1 -0
  276. package/dist/tests/routing/LanguageRouter.test.js +150 -0
  277. package/dist/tests/routing/LanguageRouter.test.js.map +1 -0
  278. package/dist/tests/session/SessionManager.memory.test.d.ts +11 -0
  279. package/dist/tests/session/SessionManager.memory.test.d.ts.map +1 -0
  280. package/dist/tests/session/SessionManager.memory.test.js +219 -0
  281. package/dist/tests/session/SessionManager.memory.test.js.map +1 -0
  282. package/dist/tests/sync/SyncEngine.test.js +32 -18
  283. package/dist/tests/sync/SyncEngine.test.js.map +1 -1
  284. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts +13 -0
  285. package/dist/tests/testing/MultiLLMProvider.metrics.test.d.ts.map +1 -0
  286. package/dist/tests/testing/MultiLLMProvider.metrics.test.js +149 -0
  287. package/dist/tests/testing/MultiLLMProvider.metrics.test.js.map +1 -0
  288. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts +15 -0
  289. package/dist/tests/testing/MultiLLMProvider.selection.test.d.ts.map +1 -0
  290. package/dist/tests/testing/MultiLLMProvider.selection.test.js +249 -0
  291. package/dist/tests/testing/MultiLLMProvider.selection.test.js.map +1 -0
  292. package/dist/tests/unit/quarantine-query-builder.test.d.ts +10 -0
  293. package/dist/tests/unit/quarantine-query-builder.test.d.ts.map +1 -0
  294. package/dist/tests/unit/quarantine-query-builder.test.js +157 -0
  295. package/dist/tests/unit/quarantine-query-builder.test.js.map +1 -0
  296. package/package.json +1 -3
@@ -0,0 +1,134 @@
1
+ /**
2
+ * SMI-2755 Wave 2: Schema migration edge case tests
3
+ *
4
+ * Tests for runMigrationsSafe, closeDatabase, and related schema
5
+ * functions from packages/core/src/db/schema.ts.
6
+ *
7
+ * Follows the import pattern from schema-async.test.ts.
8
+ */
9
+ import { describe, it, expect, afterEach } from 'vitest';
10
+ import { createDatabaseAsync, runMigrationsSafe, closeDatabase, getSchemaVersion, SCHEMA_VERSION, MIGRATIONS, } from '../../src/db/schema.js';
11
+ import { isBetterSqlite3Available } from '../../src/db/drivers/betterSqlite3Driver.js';
12
+ // Evaluated once at module load — used by it.skipIf() to skip tests
13
+ // when the SQLite driver is unavailable (e.g. WASM fallback mode).
14
+ const skipIfNoSqlite = !isBetterSqlite3Available();
15
+ const testDatabases = [];
16
+ afterEach(() => {
17
+ for (const db of testDatabases) {
18
+ if (db.open) {
19
+ closeDatabase(db);
20
+ }
21
+ }
22
+ testDatabases.length = 0;
23
+ });
24
+ // Helper to get fresh in-memory db
25
+ async function freshDb() {
26
+ const db = await createDatabaseAsync(':memory:');
27
+ testDatabases.push(db);
28
+ return db;
29
+ }
30
+ // ============================================================================
31
+ // runMigrationsSafe
32
+ // ============================================================================
33
+ describe('runMigrationsSafe', () => {
34
+ it.skipIf(skipIfNoSqlite)('handles "duplicate column" SQLite error gracefully — does not throw', async () => {
35
+ const db = await freshDb();
36
+ // createDatabaseAsync already ran initializeSchema which includes all columns.
37
+ // Running migrations again should encounter "duplicate column" on version 2/4
38
+ // and handle it silently — no throw expected.
39
+ expect(() => runMigrationsSafe(db)).not.toThrow();
40
+ });
41
+ it.skipIf(skipIfNoSqlite)('does not throw when migrations are re-applied (idempotent)', async () => {
42
+ const db = await freshDb();
43
+ // Manually set schema_version to 0 so migration 1 runs again
44
+ db.exec('DELETE FROM schema_version');
45
+ db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(0);
46
+ // Running migration 1 again will try to CREATE TABLE skills which already exists.
47
+ // Migration 1 uses CREATE TABLE IF NOT EXISTS so it's idempotent — this is fine.
48
+ // What we want to test is that genuine errors DO propagate.
49
+ // We patch: inject a failing migration by checking internal migration behavior.
50
+ // Since we cannot inject a broken SQL path easily without monkey-patching MIGRATIONS,
51
+ // we verify the inverse: migrations succeed gracefully for the known schema.
52
+ expect(() => runMigrationsSafe(db)).not.toThrow();
53
+ });
54
+ it.skipIf(skipIfNoSqlite)('handles FTS5 migration failure gracefully — does not throw', async () => {
55
+ const db = await freshDb();
56
+ // FTS5 table already exists from schema init. Running runMigrationsSafe
57
+ // calls db.exec(FTS5_MIGRATION_SQL) which attempts INSERT OR IGNORE — safe.
58
+ expect(() => runMigrationsSafe(db)).not.toThrow();
59
+ });
60
+ it.skipIf(skipIfNoSqlite)('returns migration count run (0 when already up-to-date)', async () => {
61
+ const db = await freshDb();
62
+ // Already at current schema version after createDatabaseAsync
63
+ const count = runMigrationsSafe(db);
64
+ expect(count).toBe(0); // All migrations already applied
65
+ });
66
+ it.skipIf(skipIfNoSqlite)('runs pending migrations and records version increments', async () => {
67
+ const db = await freshDb();
68
+ // Pin version to 1 (initial migration) to force re-running pending ones
69
+ // We need to delete all recorded versions above 1 to simulate pending state.
70
+ // Since the schema already has all columns, duplicate column errors are swallowed.
71
+ db.exec('DELETE FROM schema_version WHERE version > 1');
72
+ const migrationsRun = runMigrationsSafe(db);
73
+ // Should have run migrations 2 through SCHEMA_VERSION
74
+ const expectedRun = SCHEMA_VERSION - 1;
75
+ expect(migrationsRun).toBe(expectedRun);
76
+ // Version should now be up to date
77
+ const finalVersion = getSchemaVersion(db);
78
+ expect(finalVersion).toBe(SCHEMA_VERSION);
79
+ });
80
+ });
81
+ // ============================================================================
82
+ // closeDatabase
83
+ // ============================================================================
84
+ describe('closeDatabase', () => {
85
+ it.skipIf(skipIfNoSqlite)('closes an open database without error', async () => {
86
+ const db = await createDatabaseAsync(':memory:');
87
+ // Do NOT push to testDatabases — we close it manually
88
+ expect(db.open).toBe(true);
89
+ expect(() => closeDatabase(db)).not.toThrow();
90
+ expect(db.open).toBe(false);
91
+ });
92
+ });
93
+ // ============================================================================
94
+ // createDatabaseAsync — schema initialization
95
+ // ============================================================================
96
+ describe('createDatabaseAsync - schema initialization', () => {
97
+ it.skipIf(skipIfNoSqlite)('creates schema_version table and sets to current version', async () => {
98
+ const db = await freshDb();
99
+ const version = getSchemaVersion(db);
100
+ expect(version).toBe(SCHEMA_VERSION);
101
+ });
102
+ it.skipIf(skipIfNoSqlite)('initializes all required tables including schema_version', async () => {
103
+ const db = await freshDb();
104
+ const tables = db
105
+ .prepare(`SELECT name FROM sqlite_master
106
+ WHERE type='table' AND name NOT LIKE 'sqlite_%'
107
+ ORDER BY name`)
108
+ .all();
109
+ const tableNames = tables.map((t) => t.name);
110
+ expect(tableNames).toContain('schema_version');
111
+ expect(tableNames).toContain('skills');
112
+ expect(tableNames).toContain('sources');
113
+ expect(tableNames).toContain('categories');
114
+ expect(tableNames).toContain('cache');
115
+ expect(tableNames).toContain('audit_logs');
116
+ });
117
+ });
118
+ // ============================================================================
119
+ // MIGRATIONS array — version tracking
120
+ // ============================================================================
121
+ describe('MIGRATIONS array', () => {
122
+ it('has version numbers that strictly increment from 1', () => {
123
+ let prev = 0;
124
+ for (const m of MIGRATIONS) {
125
+ expect(m.version).toBeGreaterThan(prev);
126
+ prev = m.version;
127
+ }
128
+ });
129
+ it('last migration version equals SCHEMA_VERSION', () => {
130
+ const lastMigration = MIGRATIONS[MIGRATIONS.length - 1];
131
+ expect(lastMigration.version).toBe(SCHEMA_VERSION);
132
+ });
133
+ });
134
+ //# sourceMappingURL=schema-migrations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-migrations.test.js","sourceRoot":"","sources":["../../../tests/db/schema-migrations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SMI-2756: Wave 3 — sqljsDriver edge-case tests
3
+ *
4
+ * Tests WASM driver edge cases including large result sets, idempotent close,
5
+ * and isSqlJsAvailable. The better-sqlite3 mock is scoped with vi.isolateModules()
6
+ * to prevent contaminating betterSqlite3Driver.test.ts.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=sqljsDriver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqljsDriver.test.d.ts","sourceRoot":"","sources":["../../../tests/db/sqljsDriver.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * SMI-2756: Wave 3 — sqljsDriver edge-case tests
3
+ *
4
+ * Tests WASM driver edge cases including large result sets, idempotent close,
5
+ * and isSqlJsAvailable. The better-sqlite3 mock is scoped with vi.isolateModules()
6
+ * to prevent contaminating betterSqlite3Driver.test.ts.
7
+ */
8
+ import { describe, it, expect, afterEach } from 'vitest';
9
+ import { createSqlJsDatabase, SqlJsDatabaseAdapter, isSqlJsAvailable, } from '../../src/db/drivers/sqljsDriver.js';
10
+ describe('sqljsDriver — edge cases', () => {
11
+ describe('isSqlJsAvailable', () => {
12
+ it('returns true when fts5-sql-bundle is resolvable', () => {
13
+ // In a Docker/Node environment with the package installed this is always true
14
+ expect(isSqlJsAvailable()).toBe(true);
15
+ });
16
+ });
17
+ describe('createSqlJsDatabase', () => {
18
+ let db;
19
+ afterEach(() => {
20
+ if (db?.open)
21
+ db.close();
22
+ });
23
+ it('initialises successfully with in-memory path', async () => {
24
+ db = await createSqlJsDatabase(':memory:');
25
+ expect(db).toBeInstanceOf(SqlJsDatabaseAdapter);
26
+ expect(db.open).toBe(true);
27
+ expect(db.memory).toBe(true);
28
+ });
29
+ it('execute returns rows correctly', async () => {
30
+ db = await createSqlJsDatabase(':memory:');
31
+ db.exec('CREATE TABLE t (id INTEGER PRIMARY KEY, name TEXT)');
32
+ db.exec("INSERT INTO t (name) VALUES ('alpha'), ('beta')");
33
+ const stmt = db.prepare('SELECT * FROM t ORDER BY id');
34
+ const rows = stmt.all();
35
+ stmt.finalize();
36
+ expect(rows).toHaveLength(2);
37
+ expect(rows[0].name).toBe('alpha');
38
+ expect(rows[1].name).toBe('beta');
39
+ });
40
+ it('execute returns empty array when no rows match', async () => {
41
+ db = await createSqlJsDatabase(':memory:');
42
+ db.exec('CREATE TABLE empty (id INTEGER PRIMARY KEY)');
43
+ const stmt = db.prepare('SELECT * FROM empty');
44
+ const rows = stmt.all();
45
+ stmt.finalize();
46
+ expect(rows).toHaveLength(0);
47
+ });
48
+ it('close sets open to false without error', async () => {
49
+ db = await createSqlJsDatabase(':memory:');
50
+ expect(db.open).toBe(true);
51
+ db.close();
52
+ expect(db.open).toBe(false);
53
+ });
54
+ it('handles large result sets correctly (100 rows)', async () => {
55
+ db = await createSqlJsDatabase(':memory:');
56
+ db.exec('CREATE TABLE big (id INTEGER PRIMARY KEY, value TEXT)');
57
+ const insertStmt = db.prepare('INSERT INTO big (value) VALUES (?)');
58
+ for (let i = 0; i < 100; i++) {
59
+ insertStmt.run(`value_${i}`);
60
+ }
61
+ insertStmt.finalize();
62
+ const selectStmt = db.prepare('SELECT * FROM big');
63
+ const rows = selectStmt.all();
64
+ selectStmt.finalize();
65
+ expect(rows).toHaveLength(100);
66
+ expect(rows[0].value).toBe('value_0');
67
+ expect(rows[99].value).toBe('value_99');
68
+ });
69
+ it('fileMustExist throws when file does not exist', async () => {
70
+ const nonExistentPath = `/tmp/sqljs-nonexistent-${Date.now()}.db`;
71
+ await expect(createSqlJsDatabase(nonExistentPath, { fileMustExist: true })).rejects.toThrow(/SQLITE_CANTOPEN/);
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=sqljsDriver.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqljsDriver.test.js","sourceRoot":"","sources":["../../../tests/db/sqljsDriver.test.ts"],"names":[],"mappings":"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"}
@@ -34,12 +34,15 @@ describe('HNSWEmbeddingStore', () => {
34
34
  }
35
35
  });
36
36
  describe('constructor', () => {
37
- it('should create store with default config', () => {
38
- store = new HNSWEmbeddingStore({ dbPath: testDbPath });
37
+ it('should throw when dbPath is passed (use HNSWEmbeddingStore.create instead)', () => {
38
+ expect(() => new HNSWEmbeddingStore({ dbPath: testDbPath })).toThrow('[HNSWEmbeddingStore] Cannot open a database file in the sync constructor');
39
+ });
40
+ it('async factory should create store with default config', async () => {
41
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath });
39
42
  expect(store).toBeInstanceOf(HNSWEmbeddingStore);
40
43
  });
41
- it('should create store with custom config', () => {
42
- store = new HNSWEmbeddingStore({
44
+ it('async factory should create store with custom config', async () => {
45
+ store = await HNSWEmbeddingStore.create({
43
46
  dbPath: testDbPath,
44
47
  hnswConfig: {
45
48
  m: 32,
@@ -51,8 +54,8 @@ describe('HNSWEmbeddingStore', () => {
51
54
  });
52
55
  expect(store).toBeInstanceOf(HNSWEmbeddingStore);
53
56
  });
54
- it('should use brute-force fallback when useHNSW is false', () => {
55
- store = new HNSWEmbeddingStore({
57
+ it('should use brute-force fallback when useHNSW is false', async () => {
58
+ store = await HNSWEmbeddingStore.create({
56
59
  dbPath: testDbPath,
57
60
  useHNSW: false,
58
61
  });
@@ -60,8 +63,8 @@ describe('HNSWEmbeddingStore', () => {
60
63
  });
61
64
  });
62
65
  describe('storeEmbedding', () => {
63
- beforeEach(() => {
64
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
66
+ beforeEach(async () => {
67
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
65
68
  });
66
69
  it('should store embedding successfully', () => {
67
70
  const embedding = new Float32Array(384).fill(0.1);
@@ -87,8 +90,8 @@ describe('HNSWEmbeddingStore', () => {
87
90
  });
88
91
  });
89
92
  describe('getEmbedding', () => {
90
- beforeEach(() => {
91
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
93
+ beforeEach(async () => {
94
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
92
95
  });
93
96
  it('should return null for non-existent skill', () => {
94
97
  const result = store.getEmbedding('non-existent');
@@ -107,8 +110,8 @@ describe('HNSWEmbeddingStore', () => {
107
110
  });
108
111
  });
109
112
  describe('getAllEmbeddings', () => {
110
- beforeEach(() => {
111
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
113
+ beforeEach(async () => {
114
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
112
115
  });
113
116
  it('should return empty map for empty store', () => {
114
117
  const all = store.getAllEmbeddings();
@@ -126,8 +129,8 @@ describe('HNSWEmbeddingStore', () => {
126
129
  });
127
130
  });
128
131
  describe('findSimilar', () => {
129
- beforeEach(() => {
130
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
132
+ beforeEach(async () => {
133
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
131
134
  });
132
135
  it('should return empty array for empty store', () => {
133
136
  const query = new Float32Array(384).fill(0.1);
@@ -166,8 +169,8 @@ describe('HNSWEmbeddingStore', () => {
166
169
  });
167
170
  });
168
171
  describe('cosineSimilarity', () => {
169
- beforeEach(() => {
170
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
172
+ beforeEach(async () => {
173
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
171
174
  });
172
175
  it('should return 1 for identical normalized vectors', () => {
173
176
  const v = new Float32Array(384);
@@ -192,8 +195,8 @@ describe('HNSWEmbeddingStore', () => {
192
195
  });
193
196
  });
194
197
  describe('batchInsert', () => {
195
- beforeEach(() => {
196
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
198
+ beforeEach(async () => {
199
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
197
200
  });
198
201
  it('should batch insert multiple embeddings', () => {
199
202
  const embeddings = [
@@ -223,8 +226,8 @@ describe('HNSWEmbeddingStore', () => {
223
226
  });
224
227
  });
225
228
  describe('removeEmbedding', () => {
226
- beforeEach(() => {
227
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
229
+ beforeEach(async () => {
230
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
228
231
  });
229
232
  it('should remove existing embedding', () => {
230
233
  store.storeEmbedding('to-remove', new Float32Array(384).fill(0.1), 'To remove');
@@ -239,8 +242,8 @@ describe('HNSWEmbeddingStore', () => {
239
242
  });
240
243
  });
241
244
  describe('getStats', () => {
242
- beforeEach(() => {
243
- store = new HNSWEmbeddingStore({ dbPath: testDbPath, useHNSW: false });
245
+ beforeEach(async () => {
246
+ store = await HNSWEmbeddingStore.create({ dbPath: testDbPath, useHNSW: false });
244
247
  });
245
248
  it('should return correct stats for empty store', () => {
246
249
  const stats = store.getStats();
@@ -257,8 +260,8 @@ describe('HNSWEmbeddingStore', () => {
257
260
  });
258
261
  });
259
262
  describe('factory functions', () => {
260
- it('createHNSWStore should create with preset config', () => {
261
- store = createHNSWStore('large', { dbPath: testDbPath });
263
+ it('createHNSWStore should create with preset config', async () => {
264
+ store = await createHNSWStore('large', { dbPath: testDbPath });
262
265
  const stats = store.getStats();
263
266
  expect(stats.m).toBe(HNSW_PRESETS.large.m);
264
267
  expect(stats.efConstruction).toBe(HNSW_PRESETS.large.efConstruction);
@@ -1 +1 @@
1
- {"version":3,"file":"hnsw-store.test.js","sourceRoot":"","sources":["../../../tests/embeddings/hnsw-store.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hnsw-store.test.js","sourceRoot":"","sources":["../../../tests/embeddings/hnsw-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @fileoverview Test database helpers — prevents "no such table" for migrated tables
3
+ * @see SMI-2749
4
+ *
5
+ * Use createTestDatabase() instead of createDatabase(':memory:') whenever tests
6
+ * need tables that only exist in migration files (e.g. skill_versions).
7
+ *
8
+ * WHY THIS EXISTS:
9
+ * createDatabase(':memory:') calls initializeSchema(), which records SCHEMA_VERSION=5
10
+ * directly in schema_version WITHOUT running the intermediate migration SQLs.
11
+ * runMigrations() then sees version=5 and skips all migrations — a no-op.
12
+ * Tables defined only in migration SQL (not in SCHEMA_SQL) are never created.
13
+ * Example: skill_versions is in MIGRATION_V5_SQL, not SCHEMA_SQL.
14
+ *
15
+ * createTestDatabase() iterates MIGRATIONS directly (no version gate) so every
16
+ * migration's SQL runs unconditionally. New migrations added to MIGRATIONS are
17
+ * automatically included — no change required here.
18
+ */
19
+ import type { Database } from '../../src/db/database-interface.js';
20
+ export { closeDatabase } from '../../src/db/schema.js';
21
+ export type { Database } from '../../src/db/database-interface.js';
22
+ /**
23
+ * Create an in-memory SQLite database with ALL schema + migrations applied.
24
+ *
25
+ * Safe to use for any test that needs migrated tables (e.g. skill_versions,
26
+ * sync_config, sync_history). Forward-compatible: new migrations added to
27
+ * MIGRATIONS are included automatically.
28
+ *
29
+ * @returns Database with full schema + all migrations applied
30
+ */
31
+ export declare function createTestDatabase(): Database;
32
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../tests/helpers/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAGlE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAElE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAsB7C"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @fileoverview Test database helpers — prevents "no such table" for migrated tables
3
+ * @see SMI-2749
4
+ *
5
+ * Use createTestDatabase() instead of createDatabase(':memory:') whenever tests
6
+ * need tables that only exist in migration files (e.g. skill_versions).
7
+ *
8
+ * WHY THIS EXISTS:
9
+ * createDatabase(':memory:') calls initializeSchema(), which records SCHEMA_VERSION=5
10
+ * directly in schema_version WITHOUT running the intermediate migration SQLs.
11
+ * runMigrations() then sees version=5 and skips all migrations — a no-op.
12
+ * Tables defined only in migration SQL (not in SCHEMA_SQL) are never created.
13
+ * Example: skill_versions is in MIGRATION_V5_SQL, not SCHEMA_SQL.
14
+ *
15
+ * createTestDatabase() iterates MIGRATIONS directly (no version gate) so every
16
+ * migration's SQL runs unconditionally. New migrations added to MIGRATIONS are
17
+ * automatically included — no change required here.
18
+ */
19
+ import { createDatabase, MIGRATIONS } from '../../src/db/schema.js';
20
+ // Re-exported for test convenience — tests only need to import from this module
21
+ export { closeDatabase } from '../../src/db/schema.js';
22
+ /**
23
+ * Create an in-memory SQLite database with ALL schema + migrations applied.
24
+ *
25
+ * Safe to use for any test that needs migrated tables (e.g. skill_versions,
26
+ * sync_config, sync_history). Forward-compatible: new migrations added to
27
+ * MIGRATIONS are included automatically.
28
+ *
29
+ * @returns Database with full schema + all migrations applied
30
+ */
31
+ export function createTestDatabase() {
32
+ // createDatabase() calls initializeSchema() — runs SCHEMA_SQL (handling FTS5 triggers
33
+ // and multi-statement SQL correctly) and stamps SCHEMA_VERSION in schema_version.
34
+ const db = createDatabase();
35
+ // Run all migrations unconditionally (no version gate) so tables that only exist in
36
+ // migration SQL (not SCHEMA_SQL) are created. db.exec() handles multi-statement SQL
37
+ // natively — no semicolon split needed.
38
+ //
39
+ // "duplicate column" errors are caught: some migration SQL adds columns that are
40
+ // already included in the canonical SCHEMA_SQL. Those errors are expected and safe.
41
+ for (const migration of MIGRATIONS) {
42
+ try {
43
+ db.exec(migration.sql);
44
+ }
45
+ catch (error) {
46
+ const msg = error instanceof Error ? error.message : String(error);
47
+ if (!msg.includes('duplicate column'))
48
+ throw error;
49
+ }
50
+ db.prepare('INSERT OR REPLACE INTO schema_version (version) VALUES (?)').run(migration.version);
51
+ }
52
+ return db;
53
+ }
54
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../tests/helpers/database.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGnE,gFAAgF;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB;IAChC,sFAAsF;IACtF,kFAAkF;IAClF,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IAE3B,oFAAoF;IACpF,oFAAoF;IACpF,wCAAwC;IACxC,EAAE;IACF,iFAAiF;IACjF,oFAAoF;IACpF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAAE,MAAM,KAAK,CAAA;QACpD,CAAC;QACD,EAAE,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACjG,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SMI-2754: PatternStore Helper Functions Tests
3
+ *
4
+ * Tests covering pure math functions, FisherInformationMatrix,
5
+ * and DB-touching helpers extracted to PatternStore.helpers.ts.
6
+ *
7
+ * Categories:
8
+ * - FisherInformationMatrix: construct, update, accumulate, decay,
9
+ * serialize/deserialize round-trip, reset, invalid buffer size
10
+ * - contextToText: empty, partial, full context
11
+ * - computeGradient, cosineSimilarity, importanceWeightedSimilarity (zero-norm edge)
12
+ * - calculatePatternImportance: positive and negative reward
13
+ * - shouldConsolidate: too recent, no patterns, ratio threshold, near max patterns
14
+ * - computeAverageEmbedding: empty table → zero vector, populated → average
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=PatternStore.helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PatternStore.helpers.test.d.ts","sourceRoot":"","sources":["../../../tests/learning/PatternStore.helpers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}