@claude-flow/memory 3.0.0-alpha.2 → 3.0.0-alpha.21

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 (253) hide show
  1. package/README.md +651 -42
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +223 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agent-memory-scope.test.d.ts +8 -0
  7. package/dist/agent-memory-scope.test.d.ts.map +1 -0
  8. package/dist/agent-memory-scope.test.js +463 -0
  9. package/dist/agent-memory-scope.test.js.map +1 -0
  10. package/dist/agentdb-adapter.d.ts +82 -4
  11. package/dist/agentdb-adapter.d.ts.map +1 -1
  12. package/dist/agentdb-adapter.js +388 -17
  13. package/dist/agentdb-adapter.js.map +1 -1
  14. package/dist/agentdb-backend.d.ts +6 -0
  15. package/dist/agentdb-backend.d.ts.map +1 -1
  16. package/dist/agentdb-backend.js +89 -25
  17. package/dist/agentdb-backend.js.map +1 -1
  18. package/dist/auto-memory-bridge.d.ts +237 -0
  19. package/dist/auto-memory-bridge.d.ts.map +1 -0
  20. package/dist/auto-memory-bridge.js +758 -0
  21. package/dist/auto-memory-bridge.js.map +1 -0
  22. package/dist/auto-memory-bridge.test.d.ts +8 -0
  23. package/dist/auto-memory-bridge.test.d.ts.map +1 -0
  24. package/dist/auto-memory-bridge.test.js +849 -0
  25. package/dist/auto-memory-bridge.test.js.map +1 -0
  26. package/dist/benchmark.test.d.ts +2 -0
  27. package/dist/benchmark.test.d.ts.map +1 -0
  28. package/dist/benchmark.test.js +277 -0
  29. package/dist/benchmark.test.js.map +1 -0
  30. package/dist/consolidator.d.ts +96 -0
  31. package/dist/consolidator.d.ts.map +1 -0
  32. package/dist/consolidator.js +209 -0
  33. package/dist/consolidator.js.map +1 -0
  34. package/dist/consolidator.test.d.ts +17 -0
  35. package/dist/consolidator.test.d.ts.map +1 -0
  36. package/dist/consolidator.test.js +239 -0
  37. package/dist/consolidator.test.js.map +1 -0
  38. package/dist/controller-registry.d.ts +248 -0
  39. package/dist/controller-registry.d.ts.map +1 -0
  40. package/dist/controller-registry.js +1086 -0
  41. package/dist/controller-registry.js.map +1 -0
  42. package/dist/controller-registry.test.d.ts +14 -0
  43. package/dist/controller-registry.test.d.ts.map +1 -0
  44. package/dist/controller-registry.test.js +691 -0
  45. package/dist/controller-registry.test.js.map +1 -0
  46. package/dist/database-provider.d.ts +14 -2
  47. package/dist/database-provider.d.ts.map +1 -1
  48. package/dist/database-provider.js +63 -3
  49. package/dist/database-provider.js.map +1 -1
  50. package/dist/database-provider.test.js +56 -3
  51. package/dist/database-provider.test.js.map +1 -1
  52. package/dist/entity-tagger.d.ts +31 -0
  53. package/dist/entity-tagger.d.ts.map +1 -0
  54. package/dist/entity-tagger.js +80 -0
  55. package/dist/entity-tagger.js.map +1 -0
  56. package/dist/entity-tagger.test.d.ts +12 -0
  57. package/dist/entity-tagger.test.d.ts.map +1 -0
  58. package/dist/entity-tagger.test.js +70 -0
  59. package/dist/entity-tagger.test.js.map +1 -0
  60. package/dist/fts5.test.d.ts +13 -0
  61. package/dist/fts5.test.d.ts.map +1 -0
  62. package/dist/fts5.test.js +144 -0
  63. package/dist/fts5.test.js.map +1 -0
  64. package/dist/graceful-retrieval.test.d.ts +14 -0
  65. package/dist/graceful-retrieval.test.d.ts.map +1 -0
  66. package/dist/graceful-retrieval.test.js +192 -0
  67. package/dist/graceful-retrieval.test.js.map +1 -0
  68. package/dist/hnsw-index.d.ts +51 -0
  69. package/dist/hnsw-index.d.ts.map +1 -1
  70. package/dist/hnsw-index.js +396 -12
  71. package/dist/hnsw-index.js.map +1 -1
  72. package/dist/hnsw-persistence.test.d.ts +13 -0
  73. package/dist/hnsw-persistence.test.d.ts.map +1 -0
  74. package/dist/hnsw-persistence.test.js +208 -0
  75. package/dist/hnsw-persistence.test.js.map +1 -0
  76. package/dist/hybrid-backend.d.ts +28 -0
  77. package/dist/hybrid-backend.d.ts.map +1 -1
  78. package/dist/hybrid-backend.js +82 -4
  79. package/dist/hybrid-backend.js.map +1 -1
  80. package/dist/hybrid-backend.test.js +6 -5
  81. package/dist/hybrid-backend.test.js.map +1 -1
  82. package/dist/index.d.ts +167 -9
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +277 -30
  85. package/dist/index.js.map +1 -1
  86. package/dist/index.test.d.ts +10 -0
  87. package/dist/index.test.d.ts.map +1 -0
  88. package/dist/index.test.js +71 -0
  89. package/dist/index.test.js.map +1 -0
  90. package/dist/json-security.d.ts +12 -0
  91. package/dist/json-security.d.ts.map +1 -0
  92. package/dist/json-security.js +20 -0
  93. package/dist/json-security.js.map +1 -0
  94. package/dist/learning-bridge.d.ts +137 -0
  95. package/dist/learning-bridge.d.ts.map +1 -0
  96. package/dist/learning-bridge.js +335 -0
  97. package/dist/learning-bridge.js.map +1 -0
  98. package/dist/learning-bridge.test.d.ts +8 -0
  99. package/dist/learning-bridge.test.d.ts.map +1 -0
  100. package/dist/learning-bridge.test.js +578 -0
  101. package/dist/learning-bridge.test.js.map +1 -0
  102. package/dist/memory-graph.d.ts +100 -0
  103. package/dist/memory-graph.d.ts.map +1 -0
  104. package/dist/memory-graph.js +333 -0
  105. package/dist/memory-graph.js.map +1 -0
  106. package/dist/memory-graph.test.d.ts +8 -0
  107. package/dist/memory-graph.test.d.ts.map +1 -0
  108. package/dist/memory-graph.test.js +609 -0
  109. package/dist/memory-graph.test.js.map +1 -0
  110. package/dist/persistent-sona.d.ts +144 -0
  111. package/dist/persistent-sona.d.ts.map +1 -0
  112. package/dist/persistent-sona.js +332 -0
  113. package/dist/persistent-sona.js.map +1 -0
  114. package/dist/rvf-backend.d.ts +53 -0
  115. package/dist/rvf-backend.d.ts.map +1 -0
  116. package/dist/rvf-backend.js +643 -0
  117. package/dist/rvf-backend.js.map +1 -0
  118. package/dist/rvf-learning-store.d.ts +139 -0
  119. package/dist/rvf-learning-store.d.ts.map +1 -0
  120. package/dist/rvf-learning-store.js +295 -0
  121. package/dist/rvf-learning-store.js.map +1 -0
  122. package/dist/rvf-migration.d.ts +45 -0
  123. package/dist/rvf-migration.d.ts.map +1 -0
  124. package/dist/rvf-migration.js +254 -0
  125. package/dist/rvf-migration.js.map +1 -0
  126. package/dist/smart-retrieval.d.ts +118 -0
  127. package/dist/smart-retrieval.d.ts.map +1 -0
  128. package/dist/smart-retrieval.js +322 -0
  129. package/dist/smart-retrieval.js.map +1 -0
  130. package/dist/smart-retrieval.test.d.ts +2 -0
  131. package/dist/smart-retrieval.test.d.ts.map +1 -0
  132. package/dist/smart-retrieval.test.js +238 -0
  133. package/dist/smart-retrieval.test.js.map +1 -0
  134. package/dist/sqlite-backend.d.ts +10 -0
  135. package/dist/sqlite-backend.d.ts.map +1 -1
  136. package/dist/sqlite-backend.js +104 -8
  137. package/dist/sqlite-backend.js.map +1 -1
  138. package/dist/sqljs-backend.d.ts +9 -0
  139. package/dist/sqljs-backend.d.ts.map +1 -1
  140. package/dist/sqljs-backend.js +96 -5
  141. package/dist/sqljs-backend.js.map +1 -1
  142. package/dist/types.d.ts +3 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/package.json +21 -8
  145. package/.agentic-flow/intelligence.json +0 -16
  146. package/__tests__/coverage/base.css +0 -224
  147. package/__tests__/coverage/block-navigation.js +0 -87
  148. package/__tests__/coverage/coverage-final.json +0 -19
  149. package/__tests__/coverage/favicon.png +0 -0
  150. package/__tests__/coverage/index.html +0 -206
  151. package/__tests__/coverage/lcov-report/base.css +0 -224
  152. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  153. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  154. package/__tests__/coverage/lcov-report/index.html +0 -206
  155. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  156. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  157. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  158. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  159. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  160. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  161. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  162. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  163. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  164. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  165. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  166. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  167. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  168. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  169. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  170. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  171. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  172. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  173. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  174. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  175. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  176. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  177. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  178. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  179. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  180. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  181. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  182. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  183. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  184. package/__tests__/coverage/lcov.info +0 -10238
  185. package/__tests__/coverage/prettify.css +0 -1
  186. package/__tests__/coverage/prettify.js +0 -2
  187. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  188. package/__tests__/coverage/sorter.js +0 -210
  189. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  190. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  191. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  192. package/__tests__/coverage/src/application/commands/index.html +0 -131
  193. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  194. package/__tests__/coverage/src/application/queries/index.html +0 -116
  195. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  196. package/__tests__/coverage/src/application/services/index.html +0 -116
  197. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  198. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  199. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  200. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  201. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  202. package/__tests__/coverage/src/domain/services/index.html +0 -116
  203. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  204. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  205. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  206. package/__tests__/coverage/src/index.html +0 -266
  207. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  208. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  209. package/__tests__/coverage/src/migration.ts.html +0 -2092
  210. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  211. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  212. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  213. package/__tests__/coverage/src/types.ts.html +0 -2266
  214. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  215. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  216. package/benchmarks/memory-write.bench.ts +0 -469
  217. package/benchmarks/vector-search.bench.ts +0 -449
  218. package/docs/AGENTDB-INTEGRATION.md +0 -388
  219. package/docs/CROSS_PLATFORM.md +0 -505
  220. package/docs/WINDOWS_SUPPORT.md +0 -422
  221. package/examples/agentdb-example.ts +0 -345
  222. package/examples/cross-platform-usage.ts +0 -326
  223. package/framework/benchmark.ts +0 -112
  224. package/src/agentdb-adapter.ts +0 -884
  225. package/src/agentdb-backend.test.ts +0 -339
  226. package/src/agentdb-backend.ts +0 -1016
  227. package/src/application/commands/delete-memory.command.ts +0 -172
  228. package/src/application/commands/store-memory.command.ts +0 -103
  229. package/src/application/index.ts +0 -36
  230. package/src/application/queries/search-memory.query.ts +0 -237
  231. package/src/application/services/memory-application-service.ts +0 -236
  232. package/src/cache-manager.ts +0 -516
  233. package/src/database-provider.test.ts +0 -364
  234. package/src/database-provider.ts +0 -511
  235. package/src/domain/entities/memory-entry.ts +0 -289
  236. package/src/domain/index.ts +0 -35
  237. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  238. package/src/domain/services/memory-domain-service.ts +0 -403
  239. package/src/hnsw-index.ts +0 -1013
  240. package/src/hybrid-backend.test.ts +0 -399
  241. package/src/hybrid-backend.ts +0 -694
  242. package/src/index.ts +0 -515
  243. package/src/infrastructure/index.ts +0 -23
  244. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  245. package/src/migration.ts +0 -669
  246. package/src/query-builder.ts +0 -542
  247. package/src/sqlite-backend.ts +0 -732
  248. package/src/sqljs-backend.ts +0 -763
  249. package/src/types.ts +0 -727
  250. package/tmp.json +0 -0
  251. package/tsconfig.json +0 -9
  252. package/tsconfig.tsbuildinfo +0 -1
  253. package/verify-cross-platform.ts +0 -170
@@ -0,0 +1,578 @@
1
+ /**
2
+ * Tests for LearningBridge
3
+ *
4
+ * TDD London School (mock-first) tests for the bridge that connects
5
+ * AutoMemoryBridge insights to the NeuralLearningSystem.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
8
+ import { LearningBridge } from './learning-bridge.js';
9
+ // ===== Mock Neural System =====
10
+ function createMockNeuralSystem() {
11
+ return {
12
+ initialize: vi.fn().mockResolvedValue(undefined),
13
+ beginTask: vi.fn().mockReturnValue('traj-1'),
14
+ recordStep: vi.fn(),
15
+ completeTask: vi.fn().mockResolvedValue(undefined),
16
+ findPatterns: vi.fn().mockResolvedValue([]),
17
+ cleanup: vi.fn().mockResolvedValue(undefined),
18
+ };
19
+ }
20
+ function createNeuralLoader(neural) {
21
+ return async () => neural;
22
+ }
23
+ function createFailingNeuralLoader() {
24
+ return async () => { throw new Error('Module not found'); };
25
+ }
26
+ // ===== Mock Backend =====
27
+ function createMockBackend() {
28
+ const storedEntries = [];
29
+ return {
30
+ storedEntries,
31
+ initialize: vi.fn().mockResolvedValue(undefined),
32
+ shutdown: vi.fn().mockResolvedValue(undefined),
33
+ store: vi.fn().mockImplementation(async (entry) => {
34
+ storedEntries.push(entry);
35
+ }),
36
+ get: vi.fn().mockResolvedValue(null),
37
+ getByKey: vi.fn().mockResolvedValue(null),
38
+ update: vi.fn().mockImplementation(async (id, upd) => {
39
+ const entry = storedEntries.find(e => e.id === id);
40
+ if (!entry)
41
+ return null;
42
+ if (upd.metadata)
43
+ entry.metadata = { ...entry.metadata, ...upd.metadata };
44
+ return entry;
45
+ }),
46
+ delete: vi.fn().mockResolvedValue(true),
47
+ query: vi.fn().mockResolvedValue([]),
48
+ search: vi.fn().mockResolvedValue([]),
49
+ bulkInsert: vi.fn().mockResolvedValue(undefined),
50
+ bulkDelete: vi.fn().mockResolvedValue(0),
51
+ count: vi.fn().mockResolvedValue(0),
52
+ listNamespaces: vi.fn().mockResolvedValue([]),
53
+ clearNamespace: vi.fn().mockResolvedValue(0),
54
+ getStats: vi.fn().mockResolvedValue({
55
+ totalEntries: 0, entriesByNamespace: {}, entriesByType: {},
56
+ memoryUsage: 0, avgQueryTime: 0, avgSearchTime: 0,
57
+ }),
58
+ healthCheck: vi.fn().mockResolvedValue({
59
+ status: 'healthy',
60
+ components: {
61
+ storage: { status: 'healthy', latency: 0 },
62
+ index: { status: 'healthy', latency: 0 },
63
+ cache: { status: 'healthy', latency: 0 },
64
+ },
65
+ timestamp: Date.now(), issues: [], recommendations: [],
66
+ }),
67
+ };
68
+ }
69
+ // ===== Test Fixtures =====
70
+ function createTestInsight(overrides = {}) {
71
+ return {
72
+ category: 'debugging',
73
+ summary: 'HNSW index requires initialization before search',
74
+ source: 'agent:tester',
75
+ confidence: 0.95,
76
+ ...overrides,
77
+ };
78
+ }
79
+ function createTestEntry(overrides = {}) {
80
+ const now = Date.now();
81
+ return {
82
+ id: 'entry-1',
83
+ key: 'insight:debugging:12345:0',
84
+ content: 'HNSW index requires initialization',
85
+ type: 'semantic',
86
+ namespace: 'learnings',
87
+ tags: ['insight', 'debugging'],
88
+ metadata: { confidence: 0.8, category: 'debugging' },
89
+ accessLevel: 'private',
90
+ createdAt: now,
91
+ updatedAt: now,
92
+ version: 1,
93
+ references: [],
94
+ accessCount: 0,
95
+ lastAccessedAt: now,
96
+ ...overrides,
97
+ };
98
+ }
99
+ // ===== Tests =====
100
+ describe('LearningBridge', () => {
101
+ let bridge;
102
+ let backend;
103
+ let neural;
104
+ beforeEach(() => {
105
+ backend = createMockBackend();
106
+ neural = createMockNeuralSystem();
107
+ bridge = new LearningBridge(backend, { neuralLoader: createNeuralLoader(neural) });
108
+ });
109
+ afterEach(() => {
110
+ bridge.destroy();
111
+ });
112
+ // ===== constructor =====
113
+ describe('constructor', () => {
114
+ it('should create with default config', () => {
115
+ const b = new LearningBridge(backend);
116
+ const stats = b.getStats();
117
+ expect(stats.totalTrajectories).toBe(0);
118
+ expect(stats.neuralAvailable).toBe(false);
119
+ b.destroy();
120
+ });
121
+ it('should create with custom config', () => {
122
+ const custom = new LearningBridge(backend, {
123
+ sonaMode: 'research',
124
+ confidenceDecayRate: 0.01,
125
+ accessBoostAmount: 0.05,
126
+ maxConfidence: 0.9,
127
+ minConfidence: 0.2,
128
+ ewcLambda: 5000,
129
+ consolidationThreshold: 20,
130
+ });
131
+ expect(custom.getStats().totalTrajectories).toBe(0);
132
+ custom.destroy();
133
+ });
134
+ it('should respect enabled=false', async () => {
135
+ const disabled = new LearningBridge(backend, {
136
+ enabled: false,
137
+ neuralLoader: createNeuralLoader(neural),
138
+ });
139
+ await disabled.onInsightRecorded(createTestInsight(), 'entry-1');
140
+ expect(neural.beginTask).not.toHaveBeenCalled();
141
+ disabled.destroy();
142
+ });
143
+ });
144
+ // ===== onInsightRecorded =====
145
+ describe('onInsightRecorded', () => {
146
+ it('should store trajectory when neural available', async () => {
147
+ const insight = createTestInsight();
148
+ await bridge.onInsightRecorded(insight, 'entry-1');
149
+ expect(neural.beginTask).toHaveBeenCalledWith(insight.summary, 'general');
150
+ expect(neural.recordStep).toHaveBeenCalledWith('traj-1', expect.objectContaining({
151
+ action: 'record:debugging',
152
+ reward: 0.95,
153
+ }));
154
+ expect(bridge.getStats().totalTrajectories).toBe(1);
155
+ });
156
+ it('should emit insight:learning-started event', async () => {
157
+ const handler = vi.fn();
158
+ bridge.on('insight:learning-started', handler);
159
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
160
+ expect(handler).toHaveBeenCalledWith({ entryId: 'entry-1', category: 'debugging' });
161
+ });
162
+ it('should no-op when disabled', async () => {
163
+ const disabled = new LearningBridge(backend, {
164
+ enabled: false,
165
+ neuralLoader: createNeuralLoader(neural),
166
+ });
167
+ await disabled.onInsightRecorded(createTestInsight(), 'entry-1');
168
+ expect(neural.beginTask).not.toHaveBeenCalled();
169
+ disabled.destroy();
170
+ });
171
+ it('should no-op when destroyed', async () => {
172
+ bridge.destroy();
173
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
174
+ expect(neural.beginTask).not.toHaveBeenCalled();
175
+ });
176
+ it('should handle neural unavailable gracefully', async () => {
177
+ const safeBridge = new LearningBridge(backend, {
178
+ neuralLoader: createFailingNeuralLoader(),
179
+ });
180
+ const handler = vi.fn();
181
+ safeBridge.on('insight:learning-started', handler);
182
+ await safeBridge.onInsightRecorded(createTestInsight(), 'entry-1');
183
+ expect(handler).toHaveBeenCalled();
184
+ expect(safeBridge.getStats().neuralAvailable).toBe(false);
185
+ safeBridge.destroy();
186
+ });
187
+ it('should pass hash embedding as stateEmbedding', async () => {
188
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
189
+ const stepArg = neural.recordStep.mock.calls[0][1];
190
+ expect(stepArg.stateEmbedding).toBeInstanceOf(Float32Array);
191
+ expect(stepArg.stateEmbedding.length).toBe(768);
192
+ });
193
+ it('should create unique trajectory per entry', async () => {
194
+ neural.beginTask.mockReturnValueOnce('traj-1').mockReturnValueOnce('traj-2');
195
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
196
+ await bridge.onInsightRecorded(createTestInsight({ summary: 'Second insight' }), 'entry-2');
197
+ expect(bridge.getStats().totalTrajectories).toBe(2);
198
+ expect(bridge.getStats().activeTrajectories).toBe(2);
199
+ });
200
+ it('should survive beginTask throwing', async () => {
201
+ neural.beginTask.mockImplementationOnce(() => { throw new Error('fail'); });
202
+ const handler = vi.fn();
203
+ bridge.on('insight:learning-started', handler);
204
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
205
+ expect(handler).toHaveBeenCalled();
206
+ });
207
+ });
208
+ // ===== onInsightAccessed =====
209
+ describe('onInsightAccessed', () => {
210
+ it('should boost confidence by accessBoostAmount', async () => {
211
+ const entry = createTestEntry({ metadata: { confidence: 0.5 } });
212
+ backend.get.mockResolvedValueOnce(entry);
213
+ await bridge.onInsightAccessed('entry-1');
214
+ expect(backend.update).toHaveBeenCalledWith('entry-1', {
215
+ metadata: expect.objectContaining({ confidence: 0.53 }),
216
+ });
217
+ });
218
+ it('should cap confidence at maxConfidence', async () => {
219
+ const entry = createTestEntry({ metadata: { confidence: 0.99 } });
220
+ backend.get.mockResolvedValueOnce(entry);
221
+ await bridge.onInsightAccessed('entry-1');
222
+ const updateCall = backend.update.mock.calls[0];
223
+ expect(updateCall[1].metadata.confidence).toBeLessThanOrEqual(1.0);
224
+ });
225
+ it('should handle missing entry gracefully', async () => {
226
+ backend.get.mockResolvedValueOnce(null);
227
+ await bridge.onInsightAccessed('nonexistent');
228
+ expect(backend.update).not.toHaveBeenCalled();
229
+ });
230
+ it('should emit insight:accessed event', async () => {
231
+ const entry = createTestEntry({ metadata: { confidence: 0.7 } });
232
+ backend.get.mockResolvedValueOnce(entry);
233
+ const handler = vi.fn();
234
+ bridge.on('insight:accessed', handler);
235
+ await bridge.onInsightAccessed('entry-1');
236
+ expect(handler).toHaveBeenCalledWith({
237
+ entryId: 'entry-1',
238
+ newConfidence: expect.any(Number),
239
+ });
240
+ });
241
+ it('should update entry metadata in backend preserving existing fields', async () => {
242
+ const entry = createTestEntry({
243
+ metadata: { confidence: 0.6, category: 'debugging', extra: 'preserved' },
244
+ });
245
+ backend.get.mockResolvedValueOnce(entry);
246
+ await bridge.onInsightAccessed('entry-1');
247
+ const updateCall = backend.update.mock.calls[0][1];
248
+ expect(updateCall.metadata.category).toBe('debugging');
249
+ expect(updateCall.metadata.extra).toBe('preserved');
250
+ expect(updateCall.metadata.confidence).toBeCloseTo(0.63, 5);
251
+ });
252
+ it('should record neural step when trajectory exists', async () => {
253
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
254
+ vi.clearAllMocks();
255
+ const entry = createTestEntry();
256
+ backend.get.mockResolvedValueOnce(entry);
257
+ await bridge.onInsightAccessed('entry-1');
258
+ expect(neural.recordStep).toHaveBeenCalledWith('traj-1', {
259
+ action: 'access',
260
+ reward: 0.03,
261
+ });
262
+ });
263
+ it('should not record neural step without trajectory', async () => {
264
+ const entry = createTestEntry();
265
+ backend.get.mockResolvedValueOnce(entry);
266
+ await bridge.onInsightAccessed('entry-1');
267
+ expect(neural.recordStep).not.toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ action: 'access' }));
268
+ });
269
+ it('should use default 0.5 when metadata lacks confidence', async () => {
270
+ const entry = createTestEntry({ metadata: {} });
271
+ backend.get.mockResolvedValueOnce(entry);
272
+ await bridge.onInsightAccessed('entry-1');
273
+ const updateCall = backend.update.mock.calls[0][1];
274
+ expect(updateCall.metadata.confidence).toBeCloseTo(0.53, 5);
275
+ });
276
+ it('should no-op when disabled', async () => {
277
+ const disabled = new LearningBridge(backend, { enabled: false });
278
+ await disabled.onInsightAccessed('entry-1');
279
+ expect(backend.get).not.toHaveBeenCalled();
280
+ disabled.destroy();
281
+ });
282
+ it('should track boost stats', async () => {
283
+ const entry = createTestEntry({ metadata: { confidence: 0.5 } });
284
+ backend.get.mockResolvedValue(entry);
285
+ await bridge.onInsightAccessed('entry-1');
286
+ await bridge.onInsightAccessed('entry-1');
287
+ expect(bridge.getStats().avgConfidenceBoost).toBeCloseTo(0.03, 5);
288
+ });
289
+ });
290
+ // ===== consolidate =====
291
+ describe('consolidate', () => {
292
+ async function seedTrajectories(count) {
293
+ for (let i = 0; i < count; i++) {
294
+ neural.beginTask.mockReturnValueOnce(`traj-${i}`);
295
+ await bridge.onInsightRecorded(createTestInsight({ summary: `Insight ${i}` }), `entry-${i}`);
296
+ }
297
+ }
298
+ it('should complete active trajectories', async () => {
299
+ await seedTrajectories(10);
300
+ const result = await bridge.consolidate();
301
+ expect(result.trajectoriesCompleted).toBe(10);
302
+ expect(result.patternsLearned).toBe(10);
303
+ expect(result.durationMs).toBeGreaterThanOrEqual(0);
304
+ });
305
+ it('should return early when below threshold', async () => {
306
+ await seedTrajectories(2);
307
+ const result = await bridge.consolidate();
308
+ expect(result.trajectoriesCompleted).toBe(0);
309
+ expect(neural.completeTask).not.toHaveBeenCalled();
310
+ });
311
+ it('should return early when neural unavailable', async () => {
312
+ const safeBridge = new LearningBridge(backend, {
313
+ neuralLoader: createFailingNeuralLoader(),
314
+ });
315
+ const result = await safeBridge.consolidate();
316
+ expect(result.trajectoriesCompleted).toBe(0);
317
+ safeBridge.destroy();
318
+ });
319
+ it('should clear completed trajectories', async () => {
320
+ await seedTrajectories(10);
321
+ expect(bridge.getStats().activeTrajectories).toBe(10);
322
+ await bridge.consolidate();
323
+ expect(bridge.getStats().activeTrajectories).toBe(0);
324
+ });
325
+ it('should emit consolidation:completed event', async () => {
326
+ await seedTrajectories(10);
327
+ const handler = vi.fn();
328
+ bridge.on('consolidation:completed', handler);
329
+ await bridge.consolidate();
330
+ expect(handler).toHaveBeenCalledWith(expect.objectContaining({
331
+ trajectoriesCompleted: 10,
332
+ patternsLearned: 10,
333
+ }));
334
+ });
335
+ it('should track stats correctly', async () => {
336
+ await seedTrajectories(10);
337
+ await bridge.consolidate();
338
+ const stats = bridge.getStats();
339
+ expect(stats.completedTrajectories).toBe(10);
340
+ expect(stats.totalConsolidations).toBe(1);
341
+ });
342
+ it('should handle completeTask failure for individual trajectories', async () => {
343
+ await seedTrajectories(10);
344
+ let callCount = 0;
345
+ neural.completeTask.mockImplementation(async () => {
346
+ callCount++;
347
+ if (callCount === 3)
348
+ throw new Error('Neural failure');
349
+ });
350
+ const result = await bridge.consolidate();
351
+ expect(result.trajectoriesCompleted).toBe(9);
352
+ });
353
+ it('should respect custom consolidationThreshold', async () => {
354
+ const customBridge = new LearningBridge(backend, {
355
+ consolidationThreshold: 2,
356
+ neuralLoader: createNeuralLoader(neural),
357
+ });
358
+ neural.beginTask.mockReturnValueOnce('traj-1').mockReturnValueOnce('traj-2');
359
+ await customBridge.onInsightRecorded(createTestInsight(), 'e-1');
360
+ await customBridge.onInsightRecorded(createTestInsight({ summary: 'S2' }), 'e-2');
361
+ const result = await customBridge.consolidate();
362
+ expect(result.trajectoriesCompleted).toBe(2);
363
+ customBridge.destroy();
364
+ });
365
+ });
366
+ // ===== decayConfidences =====
367
+ describe('decayConfidences', () => {
368
+ it('should decay entries older than 1 hour', async () => {
369
+ const twoHoursAgo = Date.now() - 2 * 3_600_000;
370
+ const entry = createTestEntry({
371
+ id: 'old-entry', updatedAt: twoHoursAgo, metadata: { confidence: 0.9 },
372
+ });
373
+ backend.query.mockResolvedValueOnce([entry]);
374
+ const count = await bridge.decayConfidences('learnings');
375
+ expect(count).toBe(1);
376
+ const newConf = backend.update.mock.calls[0][1].metadata.confidence;
377
+ expect(newConf).toBeCloseTo(0.89, 2);
378
+ });
379
+ it('should respect minConfidence floor', async () => {
380
+ const longAgo = Date.now() - 200 * 3_600_000;
381
+ const entry = createTestEntry({
382
+ id: 'ancient', updatedAt: longAgo, metadata: { confidence: 0.5 },
383
+ });
384
+ backend.query.mockResolvedValueOnce([entry]);
385
+ await bridge.decayConfidences('learnings');
386
+ const newConf = backend.update.mock.calls[0][1].metadata.confidence;
387
+ expect(newConf).toBeGreaterThanOrEqual(0.1);
388
+ });
389
+ it('should skip recent entries', async () => {
390
+ const entry = createTestEntry({
391
+ id: 'recent', updatedAt: Date.now() - 30 * 60_000, metadata: { confidence: 0.8 },
392
+ });
393
+ backend.query.mockResolvedValueOnce([entry]);
394
+ const count = await bridge.decayConfidences('learnings');
395
+ expect(count).toBe(0);
396
+ expect(backend.update).not.toHaveBeenCalled();
397
+ });
398
+ it('should return count of decayed entries', async () => {
399
+ const old = Date.now() - 2 * 3_600_000;
400
+ const entries = [
401
+ createTestEntry({ id: 'e1', updatedAt: old, metadata: { confidence: 0.9 } }),
402
+ createTestEntry({ id: 'e2', updatedAt: old, metadata: { confidence: 0.7 } }),
403
+ createTestEntry({ id: 'e3', updatedAt: Date.now(), metadata: { confidence: 0.5 } }),
404
+ ];
405
+ backend.query.mockResolvedValueOnce(entries);
406
+ const count = await bridge.decayConfidences('learnings');
407
+ expect(count).toBe(2);
408
+ });
409
+ it('should handle empty namespace', async () => {
410
+ backend.query.mockResolvedValueOnce([]);
411
+ const count = await bridge.decayConfidences('empty-ns');
412
+ expect(count).toBe(0);
413
+ });
414
+ it('should handle query failure gracefully', async () => {
415
+ backend.query.mockRejectedValueOnce(new Error('DB error'));
416
+ const count = await bridge.decayConfidences('broken');
417
+ expect(count).toBe(0);
418
+ });
419
+ it('should track total decays in stats', async () => {
420
+ const old = Date.now() - 5 * 3_600_000;
421
+ backend.query.mockResolvedValueOnce([
422
+ createTestEntry({ id: 'e1', updatedAt: old, metadata: { confidence: 0.9 } }),
423
+ ]);
424
+ await bridge.decayConfidences('learnings');
425
+ expect(bridge.getStats().totalDecays).toBe(1);
426
+ });
427
+ });
428
+ // ===== findSimilarPatterns =====
429
+ describe('findSimilarPatterns', () => {
430
+ it('should return patterns when neural available', async () => {
431
+ neural.findPatterns.mockResolvedValueOnce([
432
+ { content: 'Pattern A', similarity: 0.9, category: 'debugging', confidence: 0.8 },
433
+ { content: 'Pattern B', similarity: 0.7, category: 'performance', confidence: 0.6 },
434
+ ]);
435
+ const patterns = await bridge.findSimilarPatterns('test query');
436
+ expect(patterns).toHaveLength(2);
437
+ expect(patterns[0].content).toBe('Pattern A');
438
+ expect(patterns[0].similarity).toBe(0.9);
439
+ expect(patterns[1].category).toBe('performance');
440
+ });
441
+ it('should return empty when neural unavailable', async () => {
442
+ const safeBridge = new LearningBridge(backend, {
443
+ neuralLoader: createFailingNeuralLoader(),
444
+ });
445
+ const patterns = await safeBridge.findSimilarPatterns('test');
446
+ expect(patterns).toHaveLength(0);
447
+ safeBridge.destroy();
448
+ });
449
+ it('should map results to PatternMatch format', async () => {
450
+ neural.findPatterns.mockResolvedValueOnce([
451
+ { data: 'Raw data', score: 0.85, reward: 0.7 },
452
+ ]);
453
+ const patterns = await bridge.findSimilarPatterns('test');
454
+ expect(patterns).toHaveLength(1);
455
+ expect(patterns[0].content).toBe('Raw data');
456
+ expect(patterns[0].similarity).toBe(0.85);
457
+ expect(patterns[0].confidence).toBe(0.7);
458
+ expect(patterns[0].category).toBe('unknown');
459
+ });
460
+ it('should pass k parameter to neural', async () => {
461
+ await bridge.findSimilarPatterns('test', 3);
462
+ expect(neural.findPatterns).toHaveBeenCalledWith(expect.any(Float32Array), 3);
463
+ });
464
+ it('should handle findPatterns throwing', async () => {
465
+ neural.findPatterns.mockRejectedValueOnce(new Error('Neural error'));
466
+ const patterns = await bridge.findSimilarPatterns('test');
467
+ expect(patterns).toHaveLength(0);
468
+ });
469
+ it('should handle non-array result from findPatterns', async () => {
470
+ neural.findPatterns.mockResolvedValueOnce(null);
471
+ const patterns = await bridge.findSimilarPatterns('test');
472
+ expect(patterns).toHaveLength(0);
473
+ });
474
+ });
475
+ // ===== getStats =====
476
+ describe('getStats', () => {
477
+ it('should return correct initial stats', () => {
478
+ const stats = bridge.getStats();
479
+ expect(stats.totalTrajectories).toBe(0);
480
+ expect(stats.completedTrajectories).toBe(0);
481
+ expect(stats.activeTrajectories).toBe(0);
482
+ expect(stats.totalConsolidations).toBe(0);
483
+ expect(stats.totalDecays).toBe(0);
484
+ expect(stats.avgConfidenceBoost).toBe(0);
485
+ });
486
+ it('should reflect operations in stats', async () => {
487
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
488
+ let stats = bridge.getStats();
489
+ expect(stats.totalTrajectories).toBe(1);
490
+ expect(stats.activeTrajectories).toBe(1);
491
+ expect(stats.neuralAvailable).toBe(true);
492
+ const entry = createTestEntry({ metadata: { confidence: 0.5 } });
493
+ backend.get.mockResolvedValueOnce(entry);
494
+ await bridge.onInsightAccessed('entry-1');
495
+ stats = bridge.getStats();
496
+ expect(stats.avgConfidenceBoost).toBeCloseTo(0.03, 5);
497
+ });
498
+ it('should show neuralAvailable=false before init', () => {
499
+ const fresh = new LearningBridge(backend);
500
+ expect(fresh.getStats().neuralAvailable).toBe(false);
501
+ fresh.destroy();
502
+ });
503
+ });
504
+ // ===== destroy =====
505
+ describe('destroy', () => {
506
+ it('should set destroyed state', async () => {
507
+ bridge.destroy();
508
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
509
+ expect(neural.beginTask).not.toHaveBeenCalled();
510
+ });
511
+ it('should clear trajectories', async () => {
512
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
513
+ expect(bridge.getStats().activeTrajectories).toBe(1);
514
+ bridge.destroy();
515
+ expect(bridge.getStats().activeTrajectories).toBe(0);
516
+ });
517
+ it('should make subsequent onInsightRecorded no-op', async () => {
518
+ bridge.destroy();
519
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
520
+ expect(bridge.getStats().totalTrajectories).toBe(0);
521
+ });
522
+ it('should make subsequent onInsightAccessed no-op', async () => {
523
+ bridge.destroy();
524
+ await bridge.onInsightAccessed('entry-1');
525
+ expect(backend.get).not.toHaveBeenCalled();
526
+ });
527
+ it('should make subsequent consolidate no-op', async () => {
528
+ bridge.destroy();
529
+ const result = await bridge.consolidate();
530
+ expect(result.trajectoriesCompleted).toBe(0);
531
+ });
532
+ it('should make subsequent decayConfidences no-op', async () => {
533
+ bridge.destroy();
534
+ const count = await bridge.decayConfidences('learnings');
535
+ expect(count).toBe(0);
536
+ });
537
+ it('should make subsequent findSimilarPatterns no-op', async () => {
538
+ bridge.destroy();
539
+ const patterns = await bridge.findSimilarPatterns('test');
540
+ expect(patterns).toHaveLength(0);
541
+ });
542
+ it('should call neural cleanup if available', async () => {
543
+ // Trigger neural init
544
+ await bridge.onInsightRecorded(createTestInsight(), 'entry-1');
545
+ vi.clearAllMocks();
546
+ bridge.destroy();
547
+ expect(neural.cleanup).toHaveBeenCalled();
548
+ });
549
+ it('should remove all event listeners', () => {
550
+ bridge.on('insight:learning-started', () => { });
551
+ bridge.on('consolidation:completed', () => { });
552
+ bridge.destroy();
553
+ expect(bridge.listenerCount('insight:learning-started')).toBe(0);
554
+ expect(bridge.listenerCount('consolidation:completed')).toBe(0);
555
+ });
556
+ });
557
+ // ===== Neural init caching =====
558
+ describe('neural initialization', () => {
559
+ it('should only attempt neural load once', async () => {
560
+ const loaderFn = vi.fn().mockResolvedValue(neural);
561
+ const b = new LearningBridge(backend, { neuralLoader: loaderFn });
562
+ await b.onInsightRecorded(createTestInsight(), 'entry-1');
563
+ await b.onInsightRecorded(createTestInsight({ summary: 'Second' }), 'entry-2');
564
+ expect(loaderFn).toHaveBeenCalledTimes(1);
565
+ b.destroy();
566
+ });
567
+ it('should cache failed init and not retry', async () => {
568
+ const loaderFn = vi.fn().mockRejectedValue(new Error('fail'));
569
+ const b = new LearningBridge(backend, { neuralLoader: loaderFn });
570
+ await b.onInsightRecorded(createTestInsight(), 'entry-1');
571
+ await b.onInsightRecorded(createTestInsight(), 'entry-2');
572
+ expect(loaderFn).toHaveBeenCalledTimes(1);
573
+ expect(b.getStats().neuralAvailable).toBe(false);
574
+ b.destroy();
575
+ });
576
+ });
577
+ });
578
+ //# sourceMappingURL=learning-bridge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learning-bridge.test.js","sourceRoot":"","sources":["../src/learning-bridge.test.ts"],"names":[],"mappings":"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"}