@claude-flow/memory 3.0.5 → 3.0.7
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/dist/auto-memory-bridge.d.ts +8 -2
- package/dist/auto-memory-bridge.d.ts.map +1 -1
- package/dist/auto-memory-bridge.js +92 -12
- package/dist/auto-memory-bridge.js.map +1 -1
- package/dist/auto-memory-bridge.test.js +183 -0
- package/dist/auto-memory-bridge.test.js.map +1 -1
- package/dist/database-provider.js +1 -1
- package/dist/database-provider.js.map +1 -1
- package/dist/fts5.test.js +6 -2
- package/dist/fts5.test.js.map +1 -1
- package/dist/rvf-backend.d.ts +9 -2
- package/dist/rvf-backend.d.ts.map +1 -1
- package/dist/rvf-backend.js +13 -45
- package/dist/rvf-backend.js.map +1 -1
- package/dist/rvf-backend.test.d.ts +11 -0
- package/dist/rvf-backend.test.d.ts.map +1 -0
- package/dist/rvf-backend.test.js +98 -0
- package/dist/rvf-backend.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RvfBackend — #4279 regression guard.
|
|
3
|
+
*
|
|
4
|
+
* The backend used to try `@ruvector/rvf` first and, had that ever succeeded,
|
|
5
|
+
* skip `loadFromDisk()` and later overwrite `databasePath` with only the
|
|
6
|
+
* entries written since startup. The native branch is gone; these tests pin
|
|
7
|
+
* that a reopen always reloads the snapshot, even when an `@ruvector/rvf`
|
|
8
|
+
* whose factories succeed is importable.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
11
|
+
import * as fs from 'node:fs';
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import * as os from 'node:os';
|
|
14
|
+
import { RvfBackend } from './rvf-backend.js';
|
|
15
|
+
import { createDefaultEntry } from './types.js';
|
|
16
|
+
const rvfFactories = vi.hoisted(() => ({
|
|
17
|
+
create: vi.fn(async () => ({ close: async () => { } })),
|
|
18
|
+
open: vi.fn(async () => ({ close: async () => { } })),
|
|
19
|
+
}));
|
|
20
|
+
// Stand-in whose static factories and instance open() all succeed, so the
|
|
21
|
+
// old init would have taken the native branch.
|
|
22
|
+
vi.mock('@ruvector/rvf', () => {
|
|
23
|
+
class MockRvfDb {
|
|
24
|
+
static create = rvfFactories.create;
|
|
25
|
+
static open = rvfFactories.open;
|
|
26
|
+
async open() { }
|
|
27
|
+
async close() { }
|
|
28
|
+
}
|
|
29
|
+
return { RvfDatabase: MockRvfDb };
|
|
30
|
+
});
|
|
31
|
+
const DIM = 8;
|
|
32
|
+
function vec(seed) {
|
|
33
|
+
const out = new Float32Array(DIM);
|
|
34
|
+
for (let i = 0; i < DIM; i++)
|
|
35
|
+
out[i] = Math.sin(seed * 7 + i);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function entry(key, seed) {
|
|
39
|
+
return { ...createDefaultEntry({ key, content: `content ${key}`, namespace: 'ns' }), embedding: vec(seed) };
|
|
40
|
+
}
|
|
41
|
+
describe('RvfBackend (#4279)', () => {
|
|
42
|
+
let dir;
|
|
43
|
+
let dbPath;
|
|
44
|
+
beforeEach(() => {
|
|
45
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), 'cf-mem-rvf-4279-'));
|
|
46
|
+
dbPath = path.join(dir, 'memory.rvf');
|
|
47
|
+
rvfFactories.create.mockClear();
|
|
48
|
+
rvfFactories.open.mockClear();
|
|
49
|
+
});
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
try {
|
|
52
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
53
|
+
}
|
|
54
|
+
catch { /* ignore */ }
|
|
55
|
+
});
|
|
56
|
+
function backend() {
|
|
57
|
+
return new RvfBackend({ databasePath: dbPath, dimensions: DIM, autoPersistInterval: 0 });
|
|
58
|
+
}
|
|
59
|
+
it('reloads existing entries on reopen and keeps them on the next persist', async () => {
|
|
60
|
+
const first = backend();
|
|
61
|
+
await first.initialize();
|
|
62
|
+
await first.store(entry('a', 1));
|
|
63
|
+
await first.store(entry('b', 2));
|
|
64
|
+
await first.shutdown();
|
|
65
|
+
const second = backend();
|
|
66
|
+
await second.initialize();
|
|
67
|
+
expect(await second.count()).toBe(2);
|
|
68
|
+
expect((await second.getByKey('ns', 'a'))?.content).toBe('content a');
|
|
69
|
+
await second.store(entry('c', 3));
|
|
70
|
+
await second.shutdown();
|
|
71
|
+
const raw = fs.readFileSync(dbPath);
|
|
72
|
+
expect(raw.subarray(0, 4).toString('latin1')).toBe('RVF\0');
|
|
73
|
+
const third = backend();
|
|
74
|
+
await third.initialize();
|
|
75
|
+
expect(await third.count()).toBe(3);
|
|
76
|
+
const hits = await third.search(vec(2), { k: 1 });
|
|
77
|
+
expect(hits[0]?.entry.key).toBe('b');
|
|
78
|
+
await third.shutdown();
|
|
79
|
+
});
|
|
80
|
+
it('never opens a native @ruvector/rvf store', async () => {
|
|
81
|
+
const b = backend();
|
|
82
|
+
await b.initialize();
|
|
83
|
+
await b.store(entry('a', 1));
|
|
84
|
+
await b.shutdown();
|
|
85
|
+
expect(rvfFactories.create).not.toHaveBeenCalled();
|
|
86
|
+
expect(rvfFactories.open).not.toHaveBeenCalled();
|
|
87
|
+
});
|
|
88
|
+
it('reports a healthy index without recommending @ruvector/rvf', async () => {
|
|
89
|
+
const b = backend();
|
|
90
|
+
await b.initialize();
|
|
91
|
+
const health = await b.healthCheck();
|
|
92
|
+
expect(health.status).toBe('healthy');
|
|
93
|
+
expect(health.components.index.status).toBe('healthy');
|
|
94
|
+
expect(health.recommendations.join(' ')).not.toContain('@ruvector/rvf');
|
|
95
|
+
await b.shutdown();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=rvf-backend.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rvf-backend.test.js","sourceRoot":"","sources":["../src/rvf-backend.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED