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

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 +858 -249
  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 +115 -51
  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 +232 -0
  39. package/dist/controller-registry.d.ts.map +1 -0
  40. package/dist/controller-registry.js +1049 -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 +170 -74
  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 +120 -29
  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 +48 -35
  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,144 @@
1
+ /**
2
+ * PersistentSonaCoordinator - SONA learning with RVF persistence
3
+ *
4
+ * Wraps RvfLearningStore to provide an in-memory pattern bank with
5
+ * brute-force cosine similarity, trajectory buffering, EWC tracking,
6
+ * and automatic periodic persistence to disk.
7
+ *
8
+ * This is intentionally decoupled from the ruvector SONA classes:
9
+ * it defines its own compatible types and delegates persistence to
10
+ * RvfLearningStore.
11
+ *
12
+ * @module @claude-flow/memory/persistent-sona
13
+ */
14
+ import type { PatternRecord, TrajectoryRecord } from './rvf-learning-store.js';
15
+ export interface PersistentSonaConfig {
16
+ /** Path to the RVF learning store file */
17
+ storePath: string;
18
+ /** Cosine similarity threshold for pattern matching (default: 0.85) */
19
+ patternThreshold?: number;
20
+ /** Maximum buffered trajectories before oldest are evicted (default: 1000) */
21
+ maxTrajectoryBuffer?: number;
22
+ /** Auto-persist interval in ms (default: 30000) */
23
+ autoPersistInterval?: number;
24
+ /** Enable verbose logging (default: false) */
25
+ verbose?: boolean;
26
+ }
27
+ /**
28
+ * Coordinates SONA learning with persistent storage.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const sona = new PersistentSonaCoordinator({
33
+ * storePath: './data/sona-learning.rvls',
34
+ * });
35
+ * await sona.initialize();
36
+ *
37
+ * // Store a pattern
38
+ * const id = sona.storePattern('query_response', embedding);
39
+ *
40
+ * // Find similar patterns
41
+ * const matches = sona.findSimilarPatterns(queryEmbedding, 5);
42
+ *
43
+ * // Record a trajectory
44
+ * sona.recordTrajectory({ id: 'traj-1', steps: [...], outcome: 'success', ... });
45
+ *
46
+ * // Periodic background learning
47
+ * const result = sona.runBackgroundLoop();
48
+ *
49
+ * await sona.shutdown();
50
+ * ```
51
+ */
52
+ export declare class PersistentSonaCoordinator {
53
+ private store;
54
+ private patterns;
55
+ private trajectoryBuffer;
56
+ private ewcState;
57
+ private patternThreshold;
58
+ private maxTrajectoryBuffer;
59
+ private verbose;
60
+ private initialized;
61
+ constructor(config: PersistentSonaConfig);
62
+ /**
63
+ * Initialize by loading persisted state from the RVF store.
64
+ */
65
+ initialize(): Promise<void>;
66
+ /**
67
+ * Store a new pattern and return its ID.
68
+ *
69
+ * @param type - Pattern type (e.g. 'query_response', 'routing')
70
+ * @param embedding - The pattern embedding vector
71
+ * @param metadata - Optional extra metadata (currently unused, reserved)
72
+ * @returns The generated pattern ID
73
+ */
74
+ storePattern(type: string, embedding: number[], metadata?: Record<string, unknown>): string;
75
+ /**
76
+ * Find the k most similar patterns above the configured threshold.
77
+ * Uses brute-force cosine similarity (suitable for small pattern sets).
78
+ */
79
+ findSimilarPatterns(embedding: number[], k?: number): PatternRecord[];
80
+ /**
81
+ * Record a pattern usage outcome. Updates the success rate using an
82
+ * exponential moving average (alpha = 0.1).
83
+ */
84
+ recordPatternUsage(patternId: string, success: boolean): void;
85
+ /**
86
+ * Remove patterns that have low success rates after sufficient usage.
87
+ *
88
+ * @returns The number of patterns pruned
89
+ */
90
+ prunePatterns(minSuccessRate?: number, minUseCount?: number): number;
91
+ /**
92
+ * Buffer a completed trajectory for later processing.
93
+ * When the buffer exceeds maxTrajectoryBuffer, the oldest entries
94
+ * are evicted.
95
+ */
96
+ recordTrajectory(trajectory: TrajectoryRecord): void;
97
+ /**
98
+ * Process buffered trajectories to extract new patterns.
99
+ * Successful and partial trajectories are mined for high-confidence
100
+ * steps; new patterns are stored if they are sufficiently different
101
+ * from existing ones.
102
+ *
103
+ * After processing, the trajectory buffer is cleared and low-performing
104
+ * patterns are pruned.
105
+ *
106
+ * @returns Summary of the learning pass
107
+ */
108
+ runBackgroundLoop(): {
109
+ patternsLearned: number;
110
+ trajectoriesProcessed: number;
111
+ };
112
+ /**
113
+ * Flush current in-memory state to the RVF store on disk.
114
+ */
115
+ persist(): Promise<void>;
116
+ /**
117
+ * Persist state and shut down the store.
118
+ */
119
+ shutdown(): Promise<void>;
120
+ /**
121
+ * Return a summary of the coordinator's current state.
122
+ */
123
+ getStats(): {
124
+ patterns: number;
125
+ avgSuccessRate: number;
126
+ trajectoriesBuffered: number;
127
+ ewcTasksLearned: number;
128
+ };
129
+ /**
130
+ * Extract patterns from a trajectory's high-confidence steps.
131
+ * A step produces a new pattern only if no sufficiently similar
132
+ * pattern already exists.
133
+ */
134
+ private extractPatternsFromTrajectory;
135
+ /**
136
+ * Deterministic hash-based embedding for pattern extraction.
137
+ * This is a lightweight stand-in for a real embedding model,
138
+ * matching the approach used in SonaCoordinator.
139
+ */
140
+ private createHashEmbedding;
141
+ private ensureInitialized;
142
+ private log;
143
+ }
144
+ //# sourceMappingURL=persistent-sona.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent-sona.d.ts","sourceRoot":"","sources":["../src/persistent-sona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAEV,aAAa,EAEb,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAIjC,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA2CD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,oBAAoB;IAcxC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC;;;;;;;OAOG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,MAAM;IAmBT;;;OAGG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,GAAE,MAAU,GAAG,aAAa,EAAE;IAkBxE;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAc7D;;;;OAIG;IACH,aAAa,CAAC,cAAc,GAAE,MAAY,EAAE,WAAW,GAAE,MAAU,GAAG,MAAM;IAoB5E;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAgBpD;;;;;;;;;;OAUG;IACH,iBAAiB,IAAI;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,qBAAqB,EAAE,MAAM,CAAC;KAC/B;IAyBD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B;;OAEG;IACH,QAAQ,IAAI;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;KACzB;IAkBD;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAkBrC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,GAAG;CAMZ"}
@@ -0,0 +1,332 @@
1
+ /**
2
+ * PersistentSonaCoordinator - SONA learning with RVF persistence
3
+ *
4
+ * Wraps RvfLearningStore to provide an in-memory pattern bank with
5
+ * brute-force cosine similarity, trajectory buffering, EWC tracking,
6
+ * and automatic periodic persistence to disk.
7
+ *
8
+ * This is intentionally decoupled from the ruvector SONA classes:
9
+ * it defines its own compatible types and delegates persistence to
10
+ * RvfLearningStore.
11
+ *
12
+ * @module @claude-flow/memory/persistent-sona
13
+ */
14
+ import { RvfLearningStore, } from './rvf-learning-store.js';
15
+ // ===== Constants =====
16
+ const DEFAULT_PATTERN_THRESHOLD = 0.85;
17
+ const DEFAULT_MAX_TRAJECTORY_BUFFER = 1000;
18
+ const DEFAULT_AUTO_PERSIST_MS = 30_000;
19
+ // ===== Helpers =====
20
+ /**
21
+ * Compute cosine similarity between two number arrays.
22
+ * Returns 0 when either vector has zero magnitude.
23
+ */
24
+ function cosineSimilarity(a, b) {
25
+ const len = Math.min(a.length, b.length);
26
+ let dot = 0;
27
+ let normA = 0;
28
+ let normB = 0;
29
+ // Process in groups of 4 for better throughput
30
+ let i = 0;
31
+ for (; i + 3 < len; i += 4) {
32
+ dot += a[i] * b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] + a[i + 3] * b[i + 3];
33
+ normA += a[i] * a[i] + a[i + 1] * a[i + 1] + a[i + 2] * a[i + 2] + a[i + 3] * a[i + 3];
34
+ normB += b[i] * b[i] + b[i + 1] * b[i + 1] + b[i + 2] * b[i + 2] + b[i + 3] * b[i + 3];
35
+ }
36
+ for (; i < len; i++) {
37
+ dot += a[i] * b[i];
38
+ normA += a[i] * a[i];
39
+ normB += b[i] * b[i];
40
+ }
41
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
42
+ return denom > 0 ? dot / denom : 0;
43
+ }
44
+ function generateId(prefix) {
45
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
46
+ }
47
+ // ===== PersistentSonaCoordinator =====
48
+ /**
49
+ * Coordinates SONA learning with persistent storage.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const sona = new PersistentSonaCoordinator({
54
+ * storePath: './data/sona-learning.rvls',
55
+ * });
56
+ * await sona.initialize();
57
+ *
58
+ * // Store a pattern
59
+ * const id = sona.storePattern('query_response', embedding);
60
+ *
61
+ * // Find similar patterns
62
+ * const matches = sona.findSimilarPatterns(queryEmbedding, 5);
63
+ *
64
+ * // Record a trajectory
65
+ * sona.recordTrajectory({ id: 'traj-1', steps: [...], outcome: 'success', ... });
66
+ *
67
+ * // Periodic background learning
68
+ * const result = sona.runBackgroundLoop();
69
+ *
70
+ * await sona.shutdown();
71
+ * ```
72
+ */
73
+ export class PersistentSonaCoordinator {
74
+ store;
75
+ patterns = new Map();
76
+ trajectoryBuffer = [];
77
+ ewcState = null;
78
+ patternThreshold;
79
+ maxTrajectoryBuffer;
80
+ verbose;
81
+ initialized = false;
82
+ constructor(config) {
83
+ this.patternThreshold = config.patternThreshold ?? DEFAULT_PATTERN_THRESHOLD;
84
+ this.maxTrajectoryBuffer = config.maxTrajectoryBuffer ?? DEFAULT_MAX_TRAJECTORY_BUFFER;
85
+ this.verbose = config.verbose ?? false;
86
+ const storeConfig = {
87
+ storePath: config.storePath,
88
+ autoPersistInterval: config.autoPersistInterval ?? DEFAULT_AUTO_PERSIST_MS,
89
+ verbose: config.verbose,
90
+ };
91
+ this.store = new RvfLearningStore(storeConfig);
92
+ }
93
+ /**
94
+ * Initialize by loading persisted state from the RVF store.
95
+ */
96
+ async initialize() {
97
+ if (this.initialized)
98
+ return;
99
+ await this.store.initialize();
100
+ // Rebuild in-memory state from store
101
+ const patterns = await this.store.loadPatterns();
102
+ for (const p of patterns) {
103
+ this.patterns.set(p.id, p);
104
+ }
105
+ const ewc = await this.store.loadEwcState();
106
+ this.ewcState = ewc;
107
+ const trajectories = await this.store.getTrajectories();
108
+ // getTrajectories returns newest-first, reverse for chronological buffer
109
+ this.trajectoryBuffer = trajectories.reverse();
110
+ this.initialized = true;
111
+ this.log(`Initialized: ${this.patterns.size} patterns, ` +
112
+ `${this.trajectoryBuffer.length} trajectories, ` +
113
+ `EWC: ${this.ewcState ? 'yes' : 'no'}`);
114
+ }
115
+ // ===== Pattern operations =====
116
+ /**
117
+ * Store a new pattern and return its ID.
118
+ *
119
+ * @param type - Pattern type (e.g. 'query_response', 'routing')
120
+ * @param embedding - The pattern embedding vector
121
+ * @param metadata - Optional extra metadata (currently unused, reserved)
122
+ * @returns The generated pattern ID
123
+ */
124
+ storePattern(type, embedding, metadata) {
125
+ this.ensureInitialized();
126
+ const id = generateId('pat');
127
+ const record = {
128
+ id,
129
+ type,
130
+ embedding: [...embedding],
131
+ successRate: 1.0,
132
+ useCount: 0,
133
+ lastUsed: new Date().toISOString(),
134
+ };
135
+ this.patterns.set(id, record);
136
+ // Mark for persistence on next persist() call
137
+ void this.store.savePatterns([record]).catch(() => { });
138
+ return id;
139
+ }
140
+ /**
141
+ * Find the k most similar patterns above the configured threshold.
142
+ * Uses brute-force cosine similarity (suitable for small pattern sets).
143
+ */
144
+ findSimilarPatterns(embedding, k = 5) {
145
+ this.ensureInitialized();
146
+ const results = [];
147
+ for (const record of this.patterns.values()) {
148
+ const score = cosineSimilarity(embedding, record.embedding);
149
+ if (score >= this.patternThreshold) {
150
+ results.push({ record, score });
151
+ }
152
+ }
153
+ // Sort descending by score and take top-k
154
+ results.sort((a, b) => b.score - a.score);
155
+ return results.slice(0, k).map((r) => r.record);
156
+ }
157
+ /**
158
+ * Record a pattern usage outcome. Updates the success rate using an
159
+ * exponential moving average (alpha = 0.1).
160
+ */
161
+ recordPatternUsage(patternId, success) {
162
+ this.ensureInitialized();
163
+ const pattern = this.patterns.get(patternId);
164
+ if (!pattern)
165
+ return;
166
+ pattern.useCount++;
167
+ pattern.lastUsed = new Date().toISOString();
168
+ const alpha = 0.1;
169
+ const outcome = success ? 1.0 : 0.0;
170
+ pattern.successRate = alpha * outcome + (1 - alpha) * pattern.successRate;
171
+ }
172
+ /**
173
+ * Remove patterns that have low success rates after sufficient usage.
174
+ *
175
+ * @returns The number of patterns pruned
176
+ */
177
+ prunePatterns(minSuccessRate = 0.3, minUseCount = 5) {
178
+ this.ensureInitialized();
179
+ let pruned = 0;
180
+ for (const [id, pattern] of this.patterns) {
181
+ if (pattern.useCount >= minUseCount && pattern.successRate < minSuccessRate) {
182
+ this.patterns.delete(id);
183
+ pruned++;
184
+ }
185
+ }
186
+ if (pruned > 0) {
187
+ this.log(`Pruned ${pruned} low-performing patterns`);
188
+ }
189
+ return pruned;
190
+ }
191
+ // ===== Trajectory tracking =====
192
+ /**
193
+ * Buffer a completed trajectory for later processing.
194
+ * When the buffer exceeds maxTrajectoryBuffer, the oldest entries
195
+ * are evicted.
196
+ */
197
+ recordTrajectory(trajectory) {
198
+ this.ensureInitialized();
199
+ const copy = { ...trajectory };
200
+ this.trajectoryBuffer.push(copy);
201
+ // Persist to store immediately so evicted entries are not lost
202
+ void this.store.appendTrajectory(copy).catch(() => { });
203
+ while (this.trajectoryBuffer.length > this.maxTrajectoryBuffer) {
204
+ this.trajectoryBuffer.shift();
205
+ }
206
+ }
207
+ // ===== Learning loop =====
208
+ /**
209
+ * Process buffered trajectories to extract new patterns.
210
+ * Successful and partial trajectories are mined for high-confidence
211
+ * steps; new patterns are stored if they are sufficiently different
212
+ * from existing ones.
213
+ *
214
+ * After processing, the trajectory buffer is cleared and low-performing
215
+ * patterns are pruned.
216
+ *
217
+ * @returns Summary of the learning pass
218
+ */
219
+ runBackgroundLoop() {
220
+ this.ensureInitialized();
221
+ let patternsLearned = 0;
222
+ const trajectoriesProcessed = this.trajectoryBuffer.length;
223
+ for (const traj of this.trajectoryBuffer) {
224
+ if (traj.outcome === 'success' || traj.outcome === 'partial') {
225
+ patternsLearned += this.extractPatternsFromTrajectory(traj);
226
+ }
227
+ }
228
+ this.prunePatterns();
229
+ this.trajectoryBuffer = [];
230
+ this.log(`Background loop: ${patternsLearned} patterns learned, ` +
231
+ `${trajectoriesProcessed} trajectories processed`);
232
+ return { patternsLearned, trajectoriesProcessed };
233
+ }
234
+ // ===== Persistence =====
235
+ /**
236
+ * Flush current in-memory state to the RVF store on disk.
237
+ */
238
+ async persist() {
239
+ const allPatterns = Array.from(this.patterns.values());
240
+ await this.store.savePatterns(allPatterns);
241
+ if (this.ewcState) {
242
+ await this.store.saveEwcState(this.ewcState);
243
+ }
244
+ // Persist any buffered trajectories that have not yet been saved
245
+ for (const traj of this.trajectoryBuffer) {
246
+ await this.store.appendTrajectory(traj);
247
+ }
248
+ await this.store.persist();
249
+ }
250
+ /**
251
+ * Persist state and shut down the store.
252
+ */
253
+ async shutdown() {
254
+ if (!this.initialized)
255
+ return;
256
+ await this.persist();
257
+ await this.store.close();
258
+ this.initialized = false;
259
+ this.log('Shutdown complete');
260
+ }
261
+ // ===== Stats =====
262
+ /**
263
+ * Return a summary of the coordinator's current state.
264
+ */
265
+ getStats() {
266
+ let totalSuccessRate = 0;
267
+ let count = 0;
268
+ for (const p of this.patterns.values()) {
269
+ totalSuccessRate += p.successRate;
270
+ count++;
271
+ }
272
+ return {
273
+ patterns: this.patterns.size,
274
+ avgSuccessRate: count > 0 ? totalSuccessRate / count : 0,
275
+ trajectoriesBuffered: this.trajectoryBuffer.length,
276
+ ewcTasksLearned: this.ewcState?.tasksLearned ?? 0,
277
+ };
278
+ }
279
+ // ===== Private =====
280
+ /**
281
+ * Extract patterns from a trajectory's high-confidence steps.
282
+ * A step produces a new pattern only if no sufficiently similar
283
+ * pattern already exists.
284
+ */
285
+ extractPatternsFromTrajectory(trajectory) {
286
+ let extracted = 0;
287
+ for (const step of trajectory.steps) {
288
+ if (step.confidence < this.patternThreshold)
289
+ continue;
290
+ const embedding = this.createHashEmbedding(step.input + step.output);
291
+ const similar = this.findSimilarPatterns(embedding, 1);
292
+ if (similar.length === 0) {
293
+ this.storePattern(step.type, embedding);
294
+ extracted++;
295
+ }
296
+ }
297
+ return extracted;
298
+ }
299
+ /**
300
+ * Deterministic hash-based embedding for pattern extraction.
301
+ * This is a lightweight stand-in for a real embedding model,
302
+ * matching the approach used in SonaCoordinator.
303
+ */
304
+ createHashEmbedding(text, dim = 64) {
305
+ const embedding = new Array(dim).fill(0);
306
+ for (let i = 0; i < text.length; i++) {
307
+ const idx = (text.charCodeAt(i) * (i + 1)) % dim;
308
+ embedding[idx] += 0.1;
309
+ }
310
+ let norm = 0;
311
+ for (let i = 0; i < dim; i++) {
312
+ norm += embedding[i] * embedding[i];
313
+ }
314
+ norm = Math.sqrt(norm) || 1;
315
+ for (let i = 0; i < dim; i++) {
316
+ embedding[i] /= norm;
317
+ }
318
+ return embedding;
319
+ }
320
+ ensureInitialized() {
321
+ if (!this.initialized) {
322
+ throw new Error('PersistentSonaCoordinator has not been initialized. Call initialize() first.');
323
+ }
324
+ }
325
+ log(message) {
326
+ if (this.verbose) {
327
+ // eslint-disable-next-line no-console
328
+ console.log(`[PersistentSona] ${message}`);
329
+ }
330
+ }
331
+ }
332
+ //# sourceMappingURL=persistent-sona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistent-sona.js","sourceRoot":"","sources":["../src/persistent-sona.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { IMemoryBackend, MemoryEntry, MemoryEntryUpdate, MemoryQuery, SearchOptions, SearchResult, BackendStats, HealthCheckResult } from './types.js';
2
+ export interface RvfBackendConfig {
3
+ databasePath: string;
4
+ dimensions?: number;
5
+ metric?: 'cosine' | 'euclidean' | 'dot';
6
+ quantization?: 'fp32' | 'fp16' | 'int8';
7
+ hnswM?: number;
8
+ hnswEfConstruction?: number;
9
+ maxElements?: number;
10
+ verbose?: boolean;
11
+ defaultNamespace?: string;
12
+ autoPersistInterval?: number;
13
+ }
14
+ export declare class RvfBackend implements IMemoryBackend {
15
+ private entries;
16
+ private keyIndex;
17
+ private hnswIndex;
18
+ private nativeDb;
19
+ private config;
20
+ private initialized;
21
+ private dirty;
22
+ private persisting;
23
+ private persistTimer;
24
+ private queryTimes;
25
+ private searchTimes;
26
+ constructor(config: RvfBackendConfig);
27
+ initialize(): Promise<void>;
28
+ shutdown(): Promise<void>;
29
+ store(entry: MemoryEntry): Promise<void>;
30
+ get(id: string): Promise<MemoryEntry | null>;
31
+ getByKey(namespace: string, key: string): Promise<MemoryEntry | null>;
32
+ update(id: string, updateData: MemoryEntryUpdate): Promise<MemoryEntry | null>;
33
+ delete(id: string): Promise<boolean>;
34
+ query(q: MemoryQuery): Promise<MemoryEntry[]>;
35
+ search(embedding: Float32Array, options: SearchOptions): Promise<SearchResult[]>;
36
+ bulkInsert(entries: MemoryEntry[]): Promise<void>;
37
+ bulkDelete(ids: string[]): Promise<number>;
38
+ count(namespace?: string): Promise<number>;
39
+ listNamespaces(): Promise<string[]>;
40
+ clearNamespace(namespace: string): Promise<number>;
41
+ getStats(): Promise<BackendStats>;
42
+ healthCheck(): Promise<HealthCheckResult>;
43
+ private tryNativeInit;
44
+ private compositeKey;
45
+ private bruteForceSearch;
46
+ private recordTiming;
47
+ private avg;
48
+ private loadFromDisk;
49
+ private persistQueue;
50
+ private persistToDisk;
51
+ private doPersist;
52
+ }
53
+ //# sourceMappingURL=rvf-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rvf-backend.d.ts","sourceRoot":"","sources":["../src/rvf-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAuKpB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAqBD,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAgB;gBAEvB,MAAM,EAAE,gBAAgB;IAoB9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBzB,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAQ5C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMrE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAe9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,KAAK,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAiC7C,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBhF,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAe1C,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAS1C,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAMnC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAelD,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IA+BjC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;YA2BjC,aAAa;IAyB3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,GAAG;YAIG,YAAY;IAiD1B,OAAO,CAAC,YAAY,CAAoC;YAE1C,aAAa;YAOb,SAAS;CAyDxB"}