61 lines
2.1 KiB
TypeScript
61 lines
2.1 KiB
TypeScript
import { mkdtemp, rm } from 'node:fs/promises';
|
|
import { join } from 'node:path';
|
|
import { tmpdir } from 'node:os';
|
|
import { describe, expect, it } from 'vitest';
|
|
import { createSqliteIdentityMemoryStore, InMemoryMemoryStore } from '../src';
|
|
|
|
async function seedFacts(memory: InMemoryMemoryStore, spaceId: string) {
|
|
await memory.addFact(spaceId, {
|
|
statement: 'Mina likes quiet cafes.',
|
|
topics: ['persona', 'Mina'],
|
|
source: 'test',
|
|
});
|
|
await memory.addFact(spaceId, {
|
|
statement: 'The user prefers short replies.',
|
|
topics: ['user'],
|
|
source: 'test',
|
|
});
|
|
}
|
|
|
|
describe('BoxBrain memory stores', () => {
|
|
it('lists every fact in an in-memory persona space without requiring topic guesses', async () => {
|
|
const memory = new InMemoryMemoryStore();
|
|
const space = await memory.createSpace({ displayName: 'Mina', seedMessage: 'seed', now: '2026-05-14T00:00:00.000Z' });
|
|
await seedFacts(memory, space.id);
|
|
|
|
const facts = await memory.listFacts(space.id);
|
|
|
|
expect(facts.map((fact) => fact.statement)).toEqual([
|
|
'Mina likes quiet cafes.',
|
|
'The user prefers short replies.',
|
|
]);
|
|
});
|
|
|
|
it('lists every fact in a SQLite IdentityDB-backed persona space', async () => {
|
|
const dir = await mkdtemp(join(tmpdir(), 'boxbrain-memory-'));
|
|
try {
|
|
const memory = await createSqliteIdentityMemoryStore(join(dir, 'boxbrain.sqlite'));
|
|
const space = await memory.createSpace({ displayName: 'Mina', seedMessage: 'seed', now: '2026-05-14T00:00:00.000Z' });
|
|
await memory.addFact(space.id, {
|
|
statement: 'Mina likes quiet cafes.',
|
|
topics: ['persona', 'Mina'],
|
|
source: 'test',
|
|
});
|
|
await memory.addFact(space.id, {
|
|
statement: 'The user prefers short replies.',
|
|
topics: ['user'],
|
|
source: 'test',
|
|
});
|
|
|
|
const facts = await memory.listFacts(space.id);
|
|
|
|
expect(facts.map((fact) => fact.statement)).toEqual([
|
|
'Mina likes quiet cafes.',
|
|
'The user prefers short replies.',
|
|
]);
|
|
} finally {
|
|
await rm(dir, { recursive: true, force: true });
|
|
}
|
|
});
|
|
});
|