@claude-flow/memory 3.0.0-alpha.9 → 3.0.1

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 (188) hide show
  1. package/README.md +308 -37
  2. package/dist/agent-memory-scope.d.ts.map +1 -1
  3. package/dist/agent-memory-scope.js +10 -2
  4. package/dist/agent-memory-scope.js.map +1 -1
  5. package/dist/agentdb-adapter-key-isolation.test.d.ts +2 -0
  6. package/dist/agentdb-adapter-key-isolation.test.d.ts.map +1 -0
  7. package/dist/agentdb-adapter-key-isolation.test.js +175 -0
  8. package/dist/agentdb-adapter-key-isolation.test.js.map +1 -0
  9. package/dist/agentdb-adapter-upsert.test.d.ts +2 -0
  10. package/dist/agentdb-adapter-upsert.test.d.ts.map +1 -0
  11. package/dist/agentdb-adapter-upsert.test.js +216 -0
  12. package/dist/agentdb-adapter-upsert.test.js.map +1 -0
  13. package/dist/agentdb-adapter.d.ts +70 -1
  14. package/dist/agentdb-adapter.d.ts.map +1 -1
  15. package/dist/agentdb-adapter.js +365 -32
  16. package/dist/agentdb-adapter.js.map +1 -1
  17. package/dist/agentdb-backend.d.ts +25 -0
  18. package/dist/agentdb-backend.d.ts.map +1 -1
  19. package/dist/agentdb-backend.js +113 -28
  20. package/dist/agentdb-backend.js.map +1 -1
  21. package/dist/agentdb-retrieval-guard.d.ts +76 -0
  22. package/dist/agentdb-retrieval-guard.d.ts.map +1 -0
  23. package/dist/agentdb-retrieval-guard.js +77 -0
  24. package/dist/agentdb-retrieval-guard.js.map +1 -0
  25. package/dist/agentdb-retrieval-guard.test.d.ts +12 -0
  26. package/dist/agentdb-retrieval-guard.test.d.ts.map +1 -0
  27. package/dist/agentdb-retrieval-guard.test.js +129 -0
  28. package/dist/agentdb-retrieval-guard.test.js.map +1 -0
  29. package/dist/auto-memory-bridge.d.ts +12 -1
  30. package/dist/auto-memory-bridge.d.ts.map +1 -1
  31. package/dist/auto-memory-bridge.js +101 -7
  32. package/dist/auto-memory-bridge.js.map +1 -1
  33. package/dist/auto-memory-bridge.test.js +121 -15
  34. package/dist/auto-memory-bridge.test.js.map +1 -1
  35. package/dist/auto-memory-index-3224.test.d.ts +2 -0
  36. package/dist/auto-memory-index-3224.test.d.ts.map +1 -0
  37. package/dist/auto-memory-index-3224.test.js +77 -0
  38. package/dist/auto-memory-index-3224.test.js.map +1 -0
  39. package/dist/consolidator-embedding-benchmark.test.d.ts +39 -0
  40. package/dist/consolidator-embedding-benchmark.test.d.ts.map +1 -0
  41. package/dist/consolidator-embedding-benchmark.test.js +366 -0
  42. package/dist/consolidator-embedding-benchmark.test.js.map +1 -0
  43. package/dist/consolidator.d.ts +131 -0
  44. package/dist/consolidator.d.ts.map +1 -0
  45. package/dist/consolidator.js +309 -0
  46. package/dist/consolidator.js.map +1 -0
  47. package/dist/consolidator.test.d.ts +17 -0
  48. package/dist/consolidator.test.d.ts.map +1 -0
  49. package/dist/consolidator.test.js +376 -0
  50. package/dist/consolidator.test.js.map +1 -0
  51. package/dist/controller-registry.d.ts +290 -0
  52. package/dist/controller-registry.d.ts.map +1 -0
  53. package/dist/controller-registry.js +1095 -0
  54. package/dist/controller-registry.js.map +1 -0
  55. package/dist/controller-registry.test.d.ts +14 -0
  56. package/dist/controller-registry.test.d.ts.map +1 -0
  57. package/dist/controller-registry.test.js +818 -0
  58. package/dist/controller-registry.test.js.map +1 -0
  59. package/dist/database-provider.d.ts +14 -2
  60. package/dist/database-provider.d.ts.map +1 -1
  61. package/dist/database-provider.js +63 -3
  62. package/dist/database-provider.js.map +1 -1
  63. package/dist/database-provider.test.js +56 -3
  64. package/dist/database-provider.test.js.map +1 -1
  65. package/dist/entity-tagger.d.ts +31 -0
  66. package/dist/entity-tagger.d.ts.map +1 -0
  67. package/dist/entity-tagger.js +80 -0
  68. package/dist/entity-tagger.js.map +1 -0
  69. package/dist/entity-tagger.test.d.ts +12 -0
  70. package/dist/entity-tagger.test.d.ts.map +1 -0
  71. package/dist/entity-tagger.test.js +70 -0
  72. package/dist/entity-tagger.test.js.map +1 -0
  73. package/dist/fts5.test.d.ts +13 -0
  74. package/dist/fts5.test.d.ts.map +1 -0
  75. package/dist/fts5.test.js +144 -0
  76. package/dist/fts5.test.js.map +1 -0
  77. package/dist/graceful-retrieval.test.d.ts +14 -0
  78. package/dist/graceful-retrieval.test.d.ts.map +1 -0
  79. package/dist/graceful-retrieval.test.js +251 -0
  80. package/dist/graceful-retrieval.test.js.map +1 -0
  81. package/dist/hnsw-index.d.ts +62 -0
  82. package/dist/hnsw-index.d.ts.map +1 -1
  83. package/dist/hnsw-index.js +461 -16
  84. package/dist/hnsw-index.js.map +1 -1
  85. package/dist/hnsw-persistence.test.d.ts +13 -0
  86. package/dist/hnsw-persistence.test.d.ts.map +1 -0
  87. package/dist/hnsw-persistence.test.js +208 -0
  88. package/dist/hnsw-persistence.test.js.map +1 -0
  89. package/dist/hnsw-quantization.test.d.ts +17 -0
  90. package/dist/hnsw-quantization.test.d.ts.map +1 -0
  91. package/dist/hnsw-quantization.test.js +140 -0
  92. package/dist/hnsw-quantization.test.js.map +1 -0
  93. package/dist/hybrid-backend.d.ts +46 -2
  94. package/dist/hybrid-backend.d.ts.map +1 -1
  95. package/dist/hybrid-backend.js +120 -21
  96. package/dist/hybrid-backend.js.map +1 -1
  97. package/dist/hybrid-backend.test.js +139 -5
  98. package/dist/hybrid-backend.test.js.map +1 -1
  99. package/dist/index.d.ts +164 -10
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +272 -30
  102. package/dist/index.js.map +1 -1
  103. package/dist/index.test.d.ts +10 -0
  104. package/dist/index.test.d.ts.map +1 -0
  105. package/dist/index.test.js +71 -0
  106. package/dist/index.test.js.map +1 -0
  107. package/dist/json-security.d.ts +12 -0
  108. package/dist/json-security.d.ts.map +1 -0
  109. package/dist/json-security.js +20 -0
  110. package/dist/json-security.js.map +1 -0
  111. package/dist/learning-bridge.d.ts +29 -0
  112. package/dist/learning-bridge.d.ts.map +1 -1
  113. package/dist/learning-bridge.js +71 -6
  114. package/dist/learning-bridge.js.map +1 -1
  115. package/dist/learning-bridge.test.js +181 -1
  116. package/dist/learning-bridge.test.js.map +1 -1
  117. package/dist/memory-key.d.ts +3 -0
  118. package/dist/memory-key.d.ts.map +1 -0
  119. package/dist/memory-key.js +5 -0
  120. package/dist/memory-key.js.map +1 -0
  121. package/dist/migration.d.ts +19 -4
  122. package/dist/migration.d.ts.map +1 -1
  123. package/dist/migration.js +99 -24
  124. package/dist/migration.js.map +1 -1
  125. package/dist/migration.test.d.ts +11 -0
  126. package/dist/migration.test.d.ts.map +1 -0
  127. package/dist/migration.test.js +141 -0
  128. package/dist/migration.test.js.map +1 -0
  129. package/dist/mmr-benchmark.test.d.ts +2 -0
  130. package/dist/mmr-benchmark.test.d.ts.map +1 -0
  131. package/dist/mmr-benchmark.test.js +286 -0
  132. package/dist/mmr-benchmark.test.js.map +1 -0
  133. package/dist/mmr-rerank-cosine-cache.test.d.ts +2 -0
  134. package/dist/mmr-rerank-cosine-cache.test.d.ts.map +1 -0
  135. package/dist/mmr-rerank-cosine-cache.test.js +334 -0
  136. package/dist/mmr-rerank-cosine-cache.test.js.map +1 -0
  137. package/dist/mmr-rerank-perf.test.d.ts +2 -0
  138. package/dist/mmr-rerank-perf.test.d.ts.map +1 -0
  139. package/dist/mmr-rerank-perf.test.js +191 -0
  140. package/dist/mmr-rerank-perf.test.js.map +1 -0
  141. package/dist/persistent-sona.d.ts +144 -0
  142. package/dist/persistent-sona.d.ts.map +1 -0
  143. package/dist/persistent-sona.js +332 -0
  144. package/dist/persistent-sona.js.map +1 -0
  145. package/dist/rvf-backend.d.ts +53 -0
  146. package/dist/rvf-backend.d.ts.map +1 -0
  147. package/dist/rvf-backend.js +643 -0
  148. package/dist/rvf-backend.js.map +1 -0
  149. package/dist/rvf-learning-store.d.ts +139 -0
  150. package/dist/rvf-learning-store.d.ts.map +1 -0
  151. package/dist/rvf-learning-store.js +295 -0
  152. package/dist/rvf-learning-store.js.map +1 -0
  153. package/dist/rvf-migration.d.ts +45 -0
  154. package/dist/rvf-migration.d.ts.map +1 -0
  155. package/dist/rvf-migration.js +254 -0
  156. package/dist/rvf-migration.js.map +1 -0
  157. package/dist/smart-retrieval-scores.test.d.ts +2 -0
  158. package/dist/smart-retrieval-scores.test.d.ts.map +1 -0
  159. package/dist/smart-retrieval-scores.test.js +75 -0
  160. package/dist/smart-retrieval-scores.test.js.map +1 -0
  161. package/dist/smart-retrieval.d.ts +141 -0
  162. package/dist/smart-retrieval.d.ts.map +1 -0
  163. package/dist/smart-retrieval.js +399 -0
  164. package/dist/smart-retrieval.js.map +1 -0
  165. package/dist/smart-retrieval.test.d.ts +2 -0
  166. package/dist/smart-retrieval.test.d.ts.map +1 -0
  167. package/dist/smart-retrieval.test.js +418 -0
  168. package/dist/smart-retrieval.test.js.map +1 -0
  169. package/dist/sqlite-backend.d.ts +10 -0
  170. package/dist/sqlite-backend.d.ts.map +1 -1
  171. package/dist/sqlite-backend.js +101 -5
  172. package/dist/sqlite-backend.js.map +1 -1
  173. package/dist/sqljs-backend.d.ts +9 -0
  174. package/dist/sqljs-backend.d.ts.map +1 -1
  175. package/dist/sqljs-backend.js +91 -3
  176. package/dist/sqljs-backend.js.map +1 -1
  177. package/dist/tiered-memory.d.ts +171 -0
  178. package/dist/tiered-memory.d.ts.map +1 -0
  179. package/dist/tiered-memory.js +350 -0
  180. package/dist/tiered-memory.js.map +1 -0
  181. package/dist/tiered-memory.test.d.ts +9 -0
  182. package/dist/tiered-memory.test.d.ts.map +1 -0
  183. package/dist/tiered-memory.test.js +220 -0
  184. package/dist/tiered-memory.test.js.map +1 -0
  185. package/dist/types.d.ts +17 -0
  186. package/dist/types.d.ts.map +1 -1
  187. package/dist/types.js.map +1 -1
  188. package/package.json +10 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mmr-rerank-cosine-cache.test.js","sourceRoot":"","sources":["../src/mmr-rerank-cosine-cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mmr-rerank-perf.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mmr-rerank-perf.test.d.ts","sourceRoot":"","sources":["../src/mmr-rerank-perf.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * mmrRerank tokenize-call regression test (Dream Cycle 2026-09-10).
3
+ *
4
+ * PR #3169 (2026-09-03/05, merged) wired embedding-cosine through as the
5
+ * preferred `pairSimilarity` path, making it the common case whenever
6
+ * Ruflo's own retrieval pipeline populates `.embedding` upstream — but the
7
+ * eager `tokenize()` calls seeding `selectedTokens`/`candTokens` on every
8
+ * outer-loop pass of `mmrRerank` survived that change unchanged, so a
9
+ * fully-embedded call site paid for O(N x limit) tokenizations whose
10
+ * result was then thrown away by the cosine branch almost every time.
11
+ *
12
+ * This candidate makes token computation lazy and cached per candidate
13
+ * instead. This file proves two properties, using the actual production
14
+ * `applyMMR`/`tokenize` exports (not a reimplementation of the fix):
15
+ *
16
+ * 1. CORRECTNESS: the new implementation's output is byte-identical to
17
+ * a frozen copy of the *old* eager-tokenize algorithm, across
18
+ * all-embedded, no-embedding, and mixed candidate sets. This is a
19
+ * pure efficiency refactor — it must never change selection order.
20
+ * 2. CALL COUNT: `tokenize()` is called dramatically fewer times by the
21
+ * candidate than by the frozen baseline algorithm, on the exact
22
+ * corpus shape (N=30, limit=20) the arch-reviewer used to estimate
23
+ * the ~551-calls-per-search baseline cost.
24
+ */
25
+ import { describe, it, expect, vi } from 'vitest';
26
+ import * as smartRetrieval from './smart-retrieval.js';
27
+ import { applyMMR, tokenize } from './smart-retrieval.js';
28
+ function makeCandidate(id, content, score, embedding) {
29
+ return { id, key: id, content, score, namespace: 'test', embedding };
30
+ }
31
+ /** Deterministic pseudo-embedding so cosine similarity is meaningful but reproducible. */
32
+ function seededEmbedding(seed, dim = 8) {
33
+ const out = [];
34
+ let x = seed * 2654435761;
35
+ for (let i = 0; i < dim; i++) {
36
+ x = (x * 1103515245 + 12345) & 0x7fffffff;
37
+ out.push((x % 1000) / 1000);
38
+ }
39
+ return out;
40
+ }
41
+ function corpus(n, opts) {
42
+ return Array.from({ length: n }, (_, i) => {
43
+ const words = Array.from({ length: 6 }, (_, w) => `w${(i * 7 + w) % 40}`).join(' ');
44
+ const hasEmbedding = opts.embedded === 'all' || (opts.embedded === 'half' && i % 2 === 0);
45
+ return makeCandidate(`c${i}`, `${words} item number ${i}`, 1 - i / n, hasEmbedding ? seededEmbedding(i) : undefined);
46
+ });
47
+ }
48
+ /**
49
+ * Frozen copy of the pre-candidate `mmrRerank` algorithm: eagerly tokenizes
50
+ * every remaining candidate on every outer-loop pass, exactly as
51
+ * `smart-retrieval.ts` did before this Dream Cycle's fix. Used only as a
52
+ * correctness/call-count baseline — never modified after being frozen here.
53
+ */
54
+ function baselineMmrRerank(scored, lambda, limit) {
55
+ if (scored.length <= 1)
56
+ return scored.slice(0, limit);
57
+ const selected = [];
58
+ const remaining = [...scored];
59
+ const selectedTokens = [];
60
+ const selectedEmbeddings = [];
61
+ const isWellFormed = (emb) => Array.isArray(emb) && emb.length > 0 && emb.every((v) => typeof v === 'number' && Number.isFinite(v));
62
+ const cosine = (a, b) => {
63
+ let dot = 0, na = 0, nb = 0;
64
+ for (let i = 0; i < a.length; i++) {
65
+ dot += a[i] * b[i];
66
+ na += a[i] * a[i];
67
+ nb += b[i] * b[i];
68
+ }
69
+ if (na === 0 || nb === 0)
70
+ return 0;
71
+ return dot / (Math.sqrt(na) * Math.sqrt(nb));
72
+ };
73
+ const jaccard = (a, b) => {
74
+ if (a.size === 0 && b.size === 0)
75
+ return 0;
76
+ let inter = 0;
77
+ for (const t of a)
78
+ if (b.has(t))
79
+ inter++;
80
+ const union = a.size + b.size - inter;
81
+ return union === 0 ? 0 : inter / union;
82
+ };
83
+ const pairSim = (embA, embB, tA, tB) => isWellFormed(embA) && isWellFormed(embB) && embA.length === embB.length ? cosine(embA, embB) : jaccard(tA, tB);
84
+ const first = remaining.shift();
85
+ selected.push(first);
86
+ selectedTokens.push(tokenize(first.candidate.content));
87
+ selectedEmbeddings.push(first.candidate.embedding);
88
+ while (selected.length < limit && remaining.length > 0) {
89
+ let bestIdx = -1;
90
+ let bestMmr = -Infinity;
91
+ for (let i = 0; i < remaining.length; i++) {
92
+ const cand = remaining[i];
93
+ const candTokens = tokenize(cand.candidate.content); // eager, every pass
94
+ const candEmbedding = cand.candidate.embedding;
95
+ let maxOverlap = 0;
96
+ for (let j = 0; j < selectedTokens.length; j++) {
97
+ const sim = pairSim(candEmbedding, selectedEmbeddings[j], candTokens, selectedTokens[j]);
98
+ if (sim > maxOverlap)
99
+ maxOverlap = sim;
100
+ }
101
+ const mmr = lambda * cand.score - (1 - lambda) * maxOverlap;
102
+ if (mmr > bestMmr) {
103
+ bestMmr = mmr;
104
+ bestIdx = i;
105
+ }
106
+ }
107
+ if (bestIdx < 0)
108
+ break;
109
+ const [chosen] = remaining.splice(bestIdx, 1);
110
+ selected.push(chosen);
111
+ selectedTokens.push(tokenize(chosen.candidate.content));
112
+ selectedEmbeddings.push(chosen.candidate.embedding);
113
+ }
114
+ return selected;
115
+ }
116
+ describe('mmrRerank lazy-tokenization refactor — correctness parity', () => {
117
+ const scenarios = [
118
+ ['all candidates embedded (common production case)', 'all'],
119
+ ['no candidates embedded (pure Jaccard fallback)', 'none'],
120
+ ['half embedded, half not (mixed fallback)', 'half'],
121
+ ];
122
+ for (const [label, embedded] of scenarios) {
123
+ it(`produces byte-identical selection order to the frozen baseline: ${label}`, () => {
124
+ const cands = corpus(24, { embedded });
125
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
126
+ const baseline = baselineMmrRerank(scored, 0.7, 15);
127
+ const candidate = applyMMR(scored, 0.7, 15);
128
+ expect(candidate.map((s) => s.candidate.id)).toEqual(baseline.map((s) => s.candidate.id));
129
+ expect(candidate.map((s) => s.score)).toEqual(baseline.map((s) => s.score));
130
+ });
131
+ }
132
+ it('handles a single candidate (early-return path) identically', () => {
133
+ const cands = corpus(1, { embedded: 'all' });
134
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
135
+ expect(applyMMR(scored, 0.7, 5)).toEqual(baselineMmrRerank(scored, 0.7, 5));
136
+ });
137
+ it('handles lambda extremes (pure relevance, pure diversity) identically', () => {
138
+ const cands = corpus(20, { embedded: 'half' });
139
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
140
+ for (const lambda of [0, 1]) {
141
+ const baseline = baselineMmrRerank(scored, lambda, 12);
142
+ const candidate = applyMMR(scored, lambda, 12);
143
+ expect(candidate.map((s) => s.candidate.id)).toEqual(baseline.map((s) => s.candidate.id));
144
+ }
145
+ });
146
+ });
147
+ describe('mmrRerank lazy-tokenization refactor — tokenize() call count', () => {
148
+ it('all-embedded corpus (N=30, limit=20): baseline ~551 calls, candidate 0 calls', () => {
149
+ const cands = corpus(30, { embedded: 'all' });
150
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
151
+ const spy = vi.spyOn(smartRetrieval, 'tokenize');
152
+ spy.mockClear();
153
+ baselineMmrRerank(scored, 0.7, 20);
154
+ const baselineCalls = spy.mock.calls.length;
155
+ spy.mockClear();
156
+ applyMMR(scored, 0.7, 20);
157
+ const candidateCalls = spy.mock.calls.length;
158
+ spy.mockRestore();
159
+ // Matches the arch-reviewer's estimate: 19 outer passes over a shrinking
160
+ // remaining-candidate list, plus 1 seed tokenization (measured: 400).
161
+ expect(baselineCalls).toBeGreaterThanOrEqual(400);
162
+ expect(candidateCalls).toBe(0);
163
+ });
164
+ it('mixed corpus (N=30, half embedded): candidate calls scale O(N), not O(N x limit)', () => {
165
+ const cands = corpus(30, { embedded: 'half' });
166
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
167
+ const spy = vi.spyOn(smartRetrieval, 'tokenize');
168
+ spy.mockClear();
169
+ baselineMmrRerank(scored, 0.7, 20);
170
+ const baselineCalls = spy.mock.calls.length;
171
+ spy.mockClear();
172
+ applyMMR(scored, 0.7, 20);
173
+ const candidateCalls = spy.mock.calls.length;
174
+ spy.mockRestore();
175
+ expect(baselineCalls).toBeGreaterThan(candidateCalls * 3);
176
+ // Cached per-candidate: at most N unique tokenizations regardless of
177
+ // how many outer passes/comparisons touch a given candidate.
178
+ expect(candidateCalls).toBeLessThanOrEqual(30);
179
+ });
180
+ it('no-embedding corpus: candidate calls tokenize at most once per candidate (caching works)', () => {
181
+ const cands = corpus(15, { embedded: 'none' });
182
+ const scored = cands.map((c) => ({ candidate: c, score: c.score }));
183
+ const spy = vi.spyOn(smartRetrieval, 'tokenize');
184
+ spy.mockClear();
185
+ applyMMR(scored, 0.7, 10);
186
+ const candidateCalls = spy.mock.calls.length;
187
+ spy.mockRestore();
188
+ expect(candidateCalls).toBeLessThanOrEqual(15);
189
+ });
190
+ });
191
+ //# sourceMappingURL=mmr-rerank-perf.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mmr-rerank-perf.test.js","sourceRoot":"","sources":["../src/mmr-rerank-perf.test.ts"],"names":[],"mappings":"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"}
@@ -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"}