@claude-flow/memory 3.0.0-alpha.17 → 3.0.0-alpha.19
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.
- package/README.md +858 -647
- package/dist/agentdb-adapter.d.ts +60 -1
- package/dist/agentdb-adapter.d.ts.map +1 -1
- package/dist/agentdb-adapter.js +253 -9
- package/dist/agentdb-adapter.js.map +1 -1
- package/dist/agentdb-backend.js +26 -26
- package/dist/auto-memory-bridge.d.ts +12 -1
- package/dist/auto-memory-bridge.d.ts.map +1 -1
- package/dist/auto-memory-bridge.js +45 -5
- package/dist/auto-memory-bridge.js.map +1 -1
- package/dist/auto-memory-bridge.test.js +92 -33
- package/dist/auto-memory-bridge.test.js.map +1 -1
- package/dist/consolidator.d.ts +96 -0
- package/dist/consolidator.d.ts.map +1 -0
- package/dist/consolidator.js +209 -0
- package/dist/consolidator.js.map +1 -0
- package/dist/consolidator.test.d.ts +17 -0
- package/dist/consolidator.test.d.ts.map +1 -0
- package/dist/consolidator.test.js +239 -0
- package/dist/consolidator.test.js.map +1 -0
- package/dist/controller-registry.d.ts +7 -0
- package/dist/controller-registry.d.ts.map +1 -1
- package/dist/controller-registry.js +92 -5
- package/dist/controller-registry.js.map +1 -1
- package/dist/database-provider.d.ts +13 -2
- package/dist/database-provider.d.ts.map +1 -1
- package/dist/database-provider.js +37 -2
- package/dist/database-provider.js.map +1 -1
- package/dist/database-provider.test.js +41 -0
- package/dist/database-provider.test.js.map +1 -1
- package/dist/fts5.test.d.ts +13 -0
- package/dist/fts5.test.d.ts.map +1 -0
- package/dist/fts5.test.js +144 -0
- package/dist/fts5.test.js.map +1 -0
- package/dist/graceful-retrieval.test.d.ts +14 -0
- package/dist/graceful-retrieval.test.d.ts.map +1 -0
- package/dist/graceful-retrieval.test.js +144 -0
- package/dist/graceful-retrieval.test.js.map +1 -0
- package/dist/hnsw-index.d.ts +51 -0
- package/dist/hnsw-index.d.ts.map +1 -1
- package/dist/hnsw-index.js +217 -0
- package/dist/hnsw-index.js.map +1 -1
- package/dist/hnsw-persistence.test.d.ts +13 -0
- package/dist/hnsw-persistence.test.d.ts.map +1 -0
- package/dist/hnsw-persistence.test.js +208 -0
- package/dist/hnsw-persistence.test.js.map +1 -0
- package/dist/index.d.ts +149 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +260 -32
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +10 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +71 -0
- package/dist/index.test.js.map +1 -0
- package/dist/rvf-backend.d.ts.map +1 -1
- package/dist/rvf-backend.js +155 -1
- package/dist/rvf-backend.js.map +1 -1
- package/dist/smart-retrieval.d.ts +24 -0
- package/dist/smart-retrieval.d.ts.map +1 -1
- package/dist/smart-retrieval.js +19 -0
- package/dist/smart-retrieval.js.map +1 -1
- package/dist/sqlite-backend.d.ts +10 -0
- package/dist/sqlite-backend.d.ts.map +1 -1
- package/dist/sqlite-backend.js +156 -69
- package/dist/sqlite-backend.js.map +1 -1
- package/dist/sqljs-backend.d.ts +9 -0
- package/dist/sqljs-backend.d.ts.map +1 -1
- package/dist/sqljs-backend.js +113 -26
- package/dist/sqljs-backend.js.map +1 -1
- package/package.json +48 -48
- package/dist/hnsw-lite.d.ts +0 -23
- package/dist/hnsw-lite.d.ts.map +0 -1
- package/dist/hnsw-lite.js +0 -168
- package/dist/hnsw-lite.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3 — Persistent HNSW (ADR-125)
|
|
3
|
+
*
|
|
4
|
+
* Verifies that:
|
|
5
|
+
* - `HNSWIndex.serialize()` / `deserialize()` round-trip correctly.
|
|
6
|
+
* - `MemoryService` close → reopen on the same dbPath recovers all entries
|
|
7
|
+
* AND the HNSW index (Acceptance Criterion #3).
|
|
8
|
+
* - A corrupt sidecar emits `health.persistence = 'corrupt'` and the service
|
|
9
|
+
* falls back to fresh state without throwing.
|
|
10
|
+
* - Snapshot-every-N triggers a sidecar mtime update once the threshold is hit.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import * as os from 'node:os';
|
|
16
|
+
import { HNSWIndex } from './hnsw-index.js';
|
|
17
|
+
import { MemoryService } from './index.js';
|
|
18
|
+
import { createDefaultEntry } from './types.js';
|
|
19
|
+
function mkTmpDir() {
|
|
20
|
+
return fs.mkdtempSync(path.join(os.tmpdir(), 'cf-mem-phase3-'));
|
|
21
|
+
}
|
|
22
|
+
function cleanupDir(dir) {
|
|
23
|
+
try {
|
|
24
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
25
|
+
}
|
|
26
|
+
catch { /* ignore */ }
|
|
27
|
+
}
|
|
28
|
+
function randomVec(dim, seed) {
|
|
29
|
+
const out = new Float32Array(dim);
|
|
30
|
+
let s = seed;
|
|
31
|
+
for (let i = 0; i < dim; i++) {
|
|
32
|
+
// xorshift32 for deterministic values
|
|
33
|
+
s ^= s << 13;
|
|
34
|
+
s ^= s >>> 17;
|
|
35
|
+
s ^= s << 5;
|
|
36
|
+
out[i] = ((s | 0) / 2 ** 31);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
describe('Phase 3 — HNSWIndex.serialize / deserialize', () => {
|
|
41
|
+
it('round-trips an empty index', () => {
|
|
42
|
+
const idx = new HNSWIndex({ dimensions: 8, M: 4, efConstruction: 10, metric: 'cosine' });
|
|
43
|
+
const buf = idx.serialize();
|
|
44
|
+
const restored = HNSWIndex.deserialize(buf);
|
|
45
|
+
expect(restored.size).toBe(0);
|
|
46
|
+
});
|
|
47
|
+
it('round-trips a populated index and preserves neighbor sets', async () => {
|
|
48
|
+
const idx = new HNSWIndex({ dimensions: 16, M: 4, efConstruction: 20, metric: 'cosine' });
|
|
49
|
+
for (let i = 0; i < 32; i++) {
|
|
50
|
+
await idx.addPoint(`id-${i}`, randomVec(16, i + 1));
|
|
51
|
+
}
|
|
52
|
+
expect(idx.size).toBe(32);
|
|
53
|
+
const buf = idx.serialize();
|
|
54
|
+
const restored = HNSWIndex.deserialize(buf);
|
|
55
|
+
expect(restored.size).toBe(32);
|
|
56
|
+
// Same query → same top-k ordering
|
|
57
|
+
const query = randomVec(16, 999);
|
|
58
|
+
const beforeResults = await idx.search(query, 5);
|
|
59
|
+
const afterResults = await restored.search(query, 5);
|
|
60
|
+
expect(afterResults.map(r => r.id)).toEqual(beforeResults.map(r => r.id));
|
|
61
|
+
});
|
|
62
|
+
it('rejects buffers without the magic header', () => {
|
|
63
|
+
const bad = Buffer.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]);
|
|
64
|
+
expect(() => HNSWIndex.deserialize(bad)).toThrow(/magic header/);
|
|
65
|
+
});
|
|
66
|
+
it('rejects truncated payloads', () => {
|
|
67
|
+
const idx = new HNSWIndex({ dimensions: 4, M: 2, efConstruction: 4, metric: 'cosine' });
|
|
68
|
+
const buf = idx.serialize();
|
|
69
|
+
// Truncate before nodeCount
|
|
70
|
+
const truncated = buf.slice(0, 6);
|
|
71
|
+
expect(() => HNSWIndex.deserialize(truncated)).toThrow();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('Phase 3 — MemoryService snapshot + restore', () => {
|
|
75
|
+
let dir;
|
|
76
|
+
let dbPath;
|
|
77
|
+
beforeEach(() => {
|
|
78
|
+
dir = mkTmpDir();
|
|
79
|
+
dbPath = path.join(dir, 'mem.db');
|
|
80
|
+
});
|
|
81
|
+
afterEach(() => {
|
|
82
|
+
cleanupDir(dir);
|
|
83
|
+
});
|
|
84
|
+
it('Acceptance Criterion #3 — restarts recover entries AND HNSW index', async () => {
|
|
85
|
+
// Phase A: populate
|
|
86
|
+
const dim = 16;
|
|
87
|
+
let restoredStatus = null;
|
|
88
|
+
const svc1 = new MemoryService({
|
|
89
|
+
dimensions: dim,
|
|
90
|
+
persistenceEnabled: true,
|
|
91
|
+
persistencePath: dbPath,
|
|
92
|
+
snapshotInterval: 0, // disable interval-based snapshots — only close() flushes
|
|
93
|
+
embeddingGenerator: async (text) => randomVec(dim, hashStr(text)),
|
|
94
|
+
});
|
|
95
|
+
await svc1.initialize();
|
|
96
|
+
// Capture neighbors for verification
|
|
97
|
+
const inserted = [];
|
|
98
|
+
for (let i = 0; i < 100; i++) {
|
|
99
|
+
const entry = createDefaultEntry({
|
|
100
|
+
key: `k-${i}`,
|
|
101
|
+
content: `entry ${i}`,
|
|
102
|
+
namespace: 'phase3',
|
|
103
|
+
});
|
|
104
|
+
entry.embedding = randomVec(dim, i + 1);
|
|
105
|
+
await svc1.store(entry);
|
|
106
|
+
inserted.push({ id: entry.id, embedding: entry.embedding });
|
|
107
|
+
}
|
|
108
|
+
// Capture HNSW neighbors against a fixed query vector BEFORE close.
|
|
109
|
+
const queryVec = randomVec(dim, 7777);
|
|
110
|
+
const beforeNeighbors = await svc1.search(queryVec, { k: 10 });
|
|
111
|
+
await svc1.close();
|
|
112
|
+
// Phase B: reopen — should restore both entries and HNSW.
|
|
113
|
+
const svc2 = new MemoryService({
|
|
114
|
+
dimensions: dim,
|
|
115
|
+
persistenceEnabled: true,
|
|
116
|
+
persistencePath: dbPath,
|
|
117
|
+
snapshotInterval: 0,
|
|
118
|
+
embeddingGenerator: async (text) => randomVec(dim, hashStr(text)),
|
|
119
|
+
});
|
|
120
|
+
svc2.getAdapter().on('persistence:loaded', (ev) => { restoredStatus = ev; });
|
|
121
|
+
await svc2.initialize();
|
|
122
|
+
expect(restoredStatus).not.toBeNull();
|
|
123
|
+
expect(restoredStatus.status).toBe('restored');
|
|
124
|
+
expect(restoredStatus.count).toBe(100);
|
|
125
|
+
// Same query → same neighbors after restore (no rebuild log expected).
|
|
126
|
+
const afterNeighbors = await svc2.search(queryVec, { k: 10 });
|
|
127
|
+
expect(afterNeighbors.map(r => r.entry.id)).toEqual(beforeNeighbors.map(r => r.entry.id));
|
|
128
|
+
await svc2.close();
|
|
129
|
+
});
|
|
130
|
+
it('emits health.persistence = "corrupt" on tampered sidecar; falls back to fresh', async () => {
|
|
131
|
+
// Phase A: populate + close to create sidecars
|
|
132
|
+
const dim = 8;
|
|
133
|
+
const svc1 = new MemoryService({
|
|
134
|
+
dimensions: dim,
|
|
135
|
+
persistenceEnabled: true,
|
|
136
|
+
persistencePath: dbPath,
|
|
137
|
+
snapshotInterval: 0,
|
|
138
|
+
});
|
|
139
|
+
await svc1.initialize();
|
|
140
|
+
for (let i = 0; i < 5; i++) {
|
|
141
|
+
const entry = createDefaultEntry({ key: `k-${i}`, content: `x-${i}` });
|
|
142
|
+
entry.embedding = randomVec(dim, i + 1);
|
|
143
|
+
await svc1.store(entry);
|
|
144
|
+
}
|
|
145
|
+
await svc1.close();
|
|
146
|
+
const hnswSidecar = `${dbPath}.hnsw`;
|
|
147
|
+
expect(fs.existsSync(hnswSidecar)).toBe(true);
|
|
148
|
+
// Mutate the magic header byte
|
|
149
|
+
const buf = fs.readFileSync(hnswSidecar);
|
|
150
|
+
buf[0] = 0xFF;
|
|
151
|
+
fs.writeFileSync(hnswSidecar, buf);
|
|
152
|
+
// Reopen — should detect corruption and start fresh, without throwing.
|
|
153
|
+
let loadedEvent = null;
|
|
154
|
+
const svc2 = new MemoryService({
|
|
155
|
+
dimensions: dim,
|
|
156
|
+
persistenceEnabled: true,
|
|
157
|
+
persistencePath: dbPath,
|
|
158
|
+
snapshotInterval: 0,
|
|
159
|
+
});
|
|
160
|
+
svc2.getAdapter().on('persistence:loaded', (ev) => { loadedEvent = ev; });
|
|
161
|
+
await svc2.initialize();
|
|
162
|
+
expect(loadedEvent).not.toBeNull();
|
|
163
|
+
expect(loadedEvent.status).toBe('corrupt');
|
|
164
|
+
// Fresh state: count should be zero
|
|
165
|
+
expect(await svc2.count()).toBe(0);
|
|
166
|
+
await svc2.close();
|
|
167
|
+
});
|
|
168
|
+
it('snapshot-every-N triggers a sidecar write after the threshold is hit', async () => {
|
|
169
|
+
const dim = 8;
|
|
170
|
+
const N = 3;
|
|
171
|
+
const svc = new MemoryService({
|
|
172
|
+
dimensions: dim,
|
|
173
|
+
persistenceEnabled: true,
|
|
174
|
+
persistencePath: dbPath,
|
|
175
|
+
snapshotInterval: N,
|
|
176
|
+
});
|
|
177
|
+
await svc.initialize();
|
|
178
|
+
const hnswSidecar = `${dbPath}.hnsw`;
|
|
179
|
+
expect(fs.existsSync(hnswSidecar)).toBe(false);
|
|
180
|
+
// First N-1 stores should NOT flush a snapshot.
|
|
181
|
+
for (let i = 0; i < N - 1; i++) {
|
|
182
|
+
const entry = createDefaultEntry({ key: `pre-${i}`, content: `c-${i}` });
|
|
183
|
+
entry.embedding = randomVec(dim, i + 1);
|
|
184
|
+
await svc.store(entry);
|
|
185
|
+
}
|
|
186
|
+
expect(fs.existsSync(hnswSidecar)).toBe(false);
|
|
187
|
+
// The Nth store should fire saveSnapshot — await one event-loop turn so
|
|
188
|
+
// the fire-and-forget save() promise resolves.
|
|
189
|
+
const saved = new Promise((resolve) => {
|
|
190
|
+
svc.getAdapter().once('persistence:saved', () => resolve());
|
|
191
|
+
});
|
|
192
|
+
const triggerEntry = createDefaultEntry({ key: 'trigger', content: 'trigger' });
|
|
193
|
+
triggerEntry.embedding = randomVec(dim, 999);
|
|
194
|
+
await svc.store(triggerEntry);
|
|
195
|
+
await saved;
|
|
196
|
+
expect(fs.existsSync(hnswSidecar)).toBe(true);
|
|
197
|
+
await svc.close();
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
// Cheap deterministic string hash for the test embedder.
|
|
201
|
+
function hashStr(s) {
|
|
202
|
+
let h = 0;
|
|
203
|
+
for (let i = 0; i < s.length; i++) {
|
|
204
|
+
h = (h * 31 + s.charCodeAt(i)) | 0;
|
|
205
|
+
}
|
|
206
|
+
return Math.abs(h) + 1;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=hnsw-persistence.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hnsw-persistence.test.js","sourceRoot":"","sources":["../src/hnsw-persistence.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -69,10 +69,6 @@ export { SqlJsBackend } from './sqljs-backend.js';
|
|
|
69
69
|
export type { SqlJsBackendConfig } from './sqljs-backend.js';
|
|
70
70
|
export { HybridBackend } from './hybrid-backend.js';
|
|
71
71
|
export type { HybridBackendConfig, StructuredQuery, SemanticQuery, HybridQuery, } from './hybrid-backend.js';
|
|
72
|
-
export { RvfBackend } from './rvf-backend.js';
|
|
73
|
-
export type { RvfBackendConfig } from './rvf-backend.js';
|
|
74
|
-
export { HnswLite, cosineSimilarity } from './hnsw-lite.js';
|
|
75
|
-
export type { HnswSearchResult } from './hnsw-lite.js';
|
|
76
72
|
export { HNSWIndex } from './hnsw-index.js';
|
|
77
73
|
export { CacheManager, TieredCacheManager } from './cache-manager.js';
|
|
78
74
|
export { QueryBuilder, query, QueryTemplates } from './query-builder.js';
|
|
@@ -95,26 +91,115 @@ export interface UnifiedMemoryServiceConfig extends Partial<AgentDBAdapterConfig
|
|
|
95
91
|
dimensions?: number;
|
|
96
92
|
/** Embedding generator function */
|
|
97
93
|
embeddingGenerator?: EmbeddingGenerator;
|
|
94
|
+
/**
|
|
95
|
+
* Take an HNSW + metadata snapshot every N successful `store()` calls.
|
|
96
|
+
* Set to `0` (or `Infinity`) to disable interval-based snapshots — `close()`
|
|
97
|
+
* still flushes. Default: 1000.
|
|
98
|
+
*
|
|
99
|
+
* Only takes effect when `persistenceEnabled === true` and `persistencePath`
|
|
100
|
+
* is set. Added by ADR-125 Phase 3.
|
|
101
|
+
*/
|
|
102
|
+
snapshotInterval?: number;
|
|
103
|
+
/**
|
|
104
|
+
* Configuration for the background {@link MemoryConsolidator}. Added by
|
|
105
|
+
* ADR-125 Phase 4. When `autoRun: true`, the service starts a `setInterval`
|
|
106
|
+
* timer (default 6h) that runs sweep + dedup + compact and emits the
|
|
107
|
+
* result via `'consolidation:complete'`.
|
|
108
|
+
*/
|
|
109
|
+
consolidator?: {
|
|
110
|
+
autoRun?: boolean;
|
|
111
|
+
intervalMs?: number;
|
|
112
|
+
dedupStrategy?: 'keep-newest' | 'keep-oldest' | 'merge-tags';
|
|
113
|
+
};
|
|
98
114
|
}
|
|
99
115
|
/**
|
|
100
|
-
*
|
|
116
|
+
* Memory Service implementation (legacy class name).
|
|
117
|
+
*
|
|
118
|
+
* @deprecated Use {@link MemoryService} — the canonical name introduced by
|
|
119
|
+
* ADR-125 Phase 1. `UnifiedMemoryService` is preserved as an alias and will
|
|
120
|
+
* continue to work through `@claude-flow/memory@3.0.0-rc`. Both names refer
|
|
121
|
+
* to the same class.
|
|
101
122
|
*
|
|
102
|
-
* High-level interface
|
|
123
|
+
* High-level interface that provides:
|
|
103
124
|
* - Simple API for common operations
|
|
104
125
|
* - Automatic embedding generation
|
|
105
126
|
* - Cross-agent memory sharing
|
|
106
127
|
* - SONA integration for learning
|
|
107
128
|
* - Event-driven notifications
|
|
108
129
|
* - Performance monitoring
|
|
130
|
+
*
|
|
131
|
+
* @see {@link MemoryService} for the canonical alias.
|
|
109
132
|
*/
|
|
110
133
|
export declare class UnifiedMemoryService extends EventEmitter implements IMemoryBackend {
|
|
111
134
|
private adapter;
|
|
112
135
|
private config;
|
|
113
136
|
private initialized;
|
|
137
|
+
/** Total successful `store()` calls since last snapshot trigger (ADR-125 Phase 3). */
|
|
138
|
+
private storeCountSinceSnapshot;
|
|
139
|
+
/** Resolved snapshot interval — see {@link UnifiedMemoryServiceConfig.snapshotInterval}. */
|
|
140
|
+
private readonly snapshotInterval;
|
|
141
|
+
/** Background consolidator timer (ADR-125 Phase 4). */
|
|
142
|
+
private consolidatorTimer;
|
|
143
|
+
/** Lazy-loaded consolidator instance (ADR-125 Phase 4). */
|
|
144
|
+
private consolidator;
|
|
145
|
+
/**
|
|
146
|
+
* The active memory backend. Defaults to the `AgentDBAdapter` created from
|
|
147
|
+
* config, but can be any `IMemoryBackend` implementation (e.g. `HybridBackend`
|
|
148
|
+
* when constructed via `createHybridService` per ADR-009 / ADR-125 Phase 2).
|
|
149
|
+
*
|
|
150
|
+
* Public so consumers can introspect the backend type without reaching for
|
|
151
|
+
* `getAdapter()` (which is AgentDB-specific).
|
|
152
|
+
*/
|
|
153
|
+
backend: IMemoryBackend;
|
|
114
154
|
constructor(config?: UnifiedMemoryServiceConfig);
|
|
155
|
+
/**
|
|
156
|
+
* Replace the active backend with a pre-built `IMemoryBackend`.
|
|
157
|
+
*
|
|
158
|
+
* Used by `createHybridService` (ADR-125 Phase 2) to wire `HybridBackend`
|
|
159
|
+
* through `createDatabase` rather than instantiating `AgentDBAdapter`
|
|
160
|
+
* directly. The legacy `AgentDBAdapter` instance is kept around for the
|
|
161
|
+
* `storeEntry` / `semanticSearch` convenience methods that the IMemoryBackend
|
|
162
|
+
* interface doesn't cover; those calls still flow through it.
|
|
163
|
+
*
|
|
164
|
+
* Returns `this` for chaining.
|
|
165
|
+
*
|
|
166
|
+
* @internal Prefer the factory functions (`createHybridService`,
|
|
167
|
+
* `createPersistentService`, etc.) over calling this directly.
|
|
168
|
+
*/
|
|
169
|
+
withBackend(backend: IMemoryBackend): this;
|
|
115
170
|
initialize(): Promise<void>;
|
|
116
171
|
shutdown(): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Alias for {@link shutdown}. Matches the lifecycle name expected by callers
|
|
174
|
+
* who treat `MemoryService` like a connection — referenced from ADR-125
|
|
175
|
+
* Phase 3 (snapshot on close()) and Phase 4 (consolidator timer cleanup).
|
|
176
|
+
*/
|
|
177
|
+
close(): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
* Start the background consolidator timer if configured.
|
|
180
|
+
* @internal
|
|
181
|
+
*/
|
|
182
|
+
private startConsolidatorTimer;
|
|
183
|
+
/**
|
|
184
|
+
* Run a single consolidator cycle on the active adapter. Emits a
|
|
185
|
+
* `consolidation:complete` event with the {@link ConsolidationResult}.
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
private runAutoConsolidation;
|
|
189
|
+
/**
|
|
190
|
+
* Get (and lazily construct) the {@link MemoryConsolidator} bound to this
|
|
191
|
+
* service. Added by ADR-125 Phase 4.
|
|
192
|
+
*/
|
|
193
|
+
getConsolidator(): Promise<any>;
|
|
117
194
|
store(entry: MemoryEntry): Promise<void>;
|
|
195
|
+
/**
|
|
196
|
+
* If a snapshot interval is configured and the threshold is hit, fire a
|
|
197
|
+
* snapshot in the background. Only meaningful when the active backend is
|
|
198
|
+
* the AgentDBAdapter with persistence enabled.
|
|
199
|
+
*
|
|
200
|
+
* @internal — ADR-125 Phase 3
|
|
201
|
+
*/
|
|
202
|
+
private maybeSnapshot;
|
|
118
203
|
get(id: string): Promise<MemoryEntry | null>;
|
|
119
204
|
getByKey(namespace: string, key: string): Promise<MemoryEntry | null>;
|
|
120
205
|
update(id: string, update: MemoryEntryUpdate): Promise<MemoryEntry | null>;
|
|
@@ -129,11 +214,20 @@ export declare class UnifiedMemoryService extends EventEmitter implements IMemor
|
|
|
129
214
|
getStats(): Promise<BackendStats>;
|
|
130
215
|
healthCheck(): Promise<HealthCheckResult>;
|
|
131
216
|
/**
|
|
132
|
-
* Store an entry from simple input
|
|
217
|
+
* Store an entry from simple input.
|
|
218
|
+
*
|
|
219
|
+
* When the active backend is the default AgentDBAdapter, delegates to its
|
|
220
|
+
* native `storeEntry`. When a custom backend is wired (e.g. HybridBackend
|
|
221
|
+
* via `createHybridService`), this builds a full `MemoryEntry` and stores
|
|
222
|
+
* it through the IMemoryBackend interface.
|
|
133
223
|
*/
|
|
134
224
|
storeEntry(input: MemoryEntryInput): Promise<MemoryEntry>;
|
|
135
225
|
/**
|
|
136
|
-
* Semantic search by content string
|
|
226
|
+
* Semantic search by content string.
|
|
227
|
+
*
|
|
228
|
+
* When the active backend is the default AgentDBAdapter, delegates to its
|
|
229
|
+
* native `semanticSearch`. Otherwise generates an embedding via the
|
|
230
|
+
* configured generator and calls `backend.search()`.
|
|
137
231
|
*/
|
|
138
232
|
semanticSearch(content: string, k?: number, threshold?: number): Promise<SearchResult[]>;
|
|
139
233
|
/**
|
|
@@ -157,7 +251,12 @@ export declare class UnifiedMemoryService extends EventEmitter implements IMemor
|
|
|
157
251
|
*/
|
|
158
252
|
removeTags(id: string, tags: string[]): Promise<MemoryEntry | null>;
|
|
159
253
|
/**
|
|
160
|
-
* Migrate from a legacy memory source
|
|
254
|
+
* Migrate from a legacy memory source.
|
|
255
|
+
*
|
|
256
|
+
* The migrator is AgentDB-specific (writes through `AgentDBAdapter`).
|
|
257
|
+
* When a custom backend is wired (e.g. HybridBackend), migration still
|
|
258
|
+
* targets the local AgentDB adapter; the hybrid backend can pick up the
|
|
259
|
+
* migrated entries on next read via its own AgentDB index.
|
|
161
260
|
*/
|
|
162
261
|
migrateFrom(source: MigrationSource, sourcePath: string, options?: Partial<MigrationConfig>): Promise<MigrationResult>;
|
|
163
262
|
/**
|
|
@@ -177,6 +276,35 @@ export declare class UnifiedMemoryService extends EventEmitter implements IMemor
|
|
|
177
276
|
*/
|
|
178
277
|
isInitialized(): boolean;
|
|
179
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Canonical memory service entry point (ADR-125).
|
|
281
|
+
*
|
|
282
|
+
* `MemoryService` is the preferred name as of `@claude-flow/memory@3.0.0-alpha.18`.
|
|
283
|
+
* It is an alias of {@link UnifiedMemoryService}; both names refer to the same
|
|
284
|
+
* class so existing callers continue working unchanged.
|
|
285
|
+
*
|
|
286
|
+
* @example
|
|
287
|
+
* ```typescript
|
|
288
|
+
* import { MemoryService } from '@claude-flow/memory';
|
|
289
|
+
*
|
|
290
|
+
* const memory = new MemoryService({ dimensions: 1536 });
|
|
291
|
+
* await memory.initialize();
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
export declare const MemoryService: typeof UnifiedMemoryService;
|
|
295
|
+
/**
|
|
296
|
+
* @public
|
|
297
|
+
* @typedef MemoryService
|
|
298
|
+
*
|
|
299
|
+
* Type alias matching the canonical {@link MemoryService} runtime export so that
|
|
300
|
+
* `import type { MemoryService } from '@claude-flow/memory'` works alongside the
|
|
301
|
+
* value import.
|
|
302
|
+
*/
|
|
303
|
+
export type MemoryService = UnifiedMemoryService;
|
|
304
|
+
/**
|
|
305
|
+
* Config type alias for {@link MemoryService}.
|
|
306
|
+
*/
|
|
307
|
+
export type MemoryServiceConfig = UnifiedMemoryServiceConfig;
|
|
180
308
|
/**
|
|
181
309
|
* Create a simple in-memory service (for testing)
|
|
182
310
|
*/
|
|
@@ -190,12 +318,16 @@ export declare function createPersistentService(path: string): UnifiedMemoryServ
|
|
|
190
318
|
*/
|
|
191
319
|
export declare function createEmbeddingService(embeddingGenerator: EmbeddingGenerator, dimensions?: number): UnifiedMemoryService;
|
|
192
320
|
/**
|
|
193
|
-
* Create a hybrid memory service (SQLite + AgentDB)
|
|
194
|
-
*
|
|
321
|
+
* Create a hybrid memory service (SQLite + AgentDB).
|
|
322
|
+
*
|
|
323
|
+
* This is the DEFAULT recommended configuration per ADR-009. ADR-125 Phase 2
|
|
324
|
+
* delivers the real wiring: the returned service's backend is a `HybridBackend`
|
|
325
|
+
* created through `createDatabase({ provider: 'hybrid' })`, not an AgentDB-only
|
|
326
|
+
* downgrade as in earlier versions.
|
|
195
327
|
*
|
|
196
328
|
* @example
|
|
197
329
|
* ```typescript
|
|
198
|
-
* const memory = createHybridService('./data/memory.db', embeddingFn);
|
|
330
|
+
* const memory = await createHybridService('./data/memory.db', embeddingFn);
|
|
199
331
|
* await memory.initialize();
|
|
200
332
|
*
|
|
201
333
|
* // Structured queries go to SQLite
|
|
@@ -203,8 +335,12 @@ export declare function createEmbeddingService(embeddingGenerator: EmbeddingGene
|
|
|
203
335
|
*
|
|
204
336
|
* // Semantic queries go to AgentDB
|
|
205
337
|
* const similar = await memory.semanticSearch('authentication patterns', 10);
|
|
338
|
+
*
|
|
339
|
+
* // Verify the backend is actually hybrid
|
|
340
|
+
* import { HybridBackend } from '@claude-flow/memory';
|
|
341
|
+
* memory.backend instanceof HybridBackend; // true
|
|
206
342
|
* ```
|
|
207
343
|
*/
|
|
208
|
-
export declare function createHybridService(databasePath: string, embeddingGenerator: EmbeddingGenerator, dimensions?: number): UnifiedMemoryService
|
|
344
|
+
export declare function createHybridService(databasePath: string, embeddingGenerator: EmbeddingGenerator, dimensions?: number): Promise<UnifiedMemoryService>;
|
|
209
345
|
export default UnifiedMemoryService;
|
|
210
346
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,YAAY,EAEV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAGjB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EAGb,UAAU,EACV,SAAS,EACT,kBAAkB,EAGlB,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAGf,WAAW,EACX,UAAU,EACV,WAAW,EAGX,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,cAAc,EAGd,eAAe,EACf,WAAW,EACX,kBAAkB,EAGlB,QAAQ,EACR,eAAe,EAGf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9F,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,aAAa,EACb,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,GACb,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,SAAS,EACT,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|