memory-retrieval.test.ts
1 import assert from 'node:assert/strict' 2 import { test } from 'node:test' 3 import type { MemoryEntry } from '@/types' 4 import { filterMemoriesByScope, normalizeMemoryScopeMode } from '@/lib/server/memory/memory-db' 5 6 function makeEntry(id: string, patch: Partial<MemoryEntry> = {}): MemoryEntry { 7 return { 8 id, 9 agentId: null, 10 sessionId: null, 11 category: 'note', 12 title: `Entry ${id}`, 13 content: `content ${id}`, 14 createdAt: 1, 15 updatedAt: 1, 16 ...patch, 17 } 18 } 19 20 test('normalizeMemoryScopeMode maps shared alias to global', () => { 21 assert.equal(normalizeMemoryScopeMode('shared'), 'global') 22 assert.equal(normalizeMemoryScopeMode('project'), 'project') 23 assert.equal(normalizeMemoryScopeMode('unknown'), 'auto') 24 }) 25 26 test('filterMemoriesByScope auto includes global + own + shared-with-agent', () => { 27 const rows: MemoryEntry[] = [ 28 makeEntry('global', { agentId: null }), 29 makeEntry('mine', { agentId: 'agent-a' }), 30 makeEntry('shared', { agentId: 'agent-b', sharedWith: ['agent-a'] }), 31 makeEntry('other', { agentId: 'agent-b' }), 32 ] 33 const filtered = filterMemoriesByScope(rows, { mode: 'auto', agentId: 'agent-a' }) 34 assert.deepEqual(filtered.map((r) => r.id), ['global', 'mine', 'shared']) 35 }) 36 37 test('filterMemoriesByScope supports project and session scopes', () => { 38 const rows: MemoryEntry[] = [ 39 makeEntry('proj-hit', { 40 sessionId: 's-1', 41 references: [{ type: 'project', path: '/repo/swarm', projectRoot: '/repo/swarm', timestamp: 1 }], 42 }), 43 makeEntry('proj-miss', { 44 sessionId: 's-1', 45 references: [{ type: 'project', path: '/repo/other', projectRoot: '/repo/other', timestamp: 1 }], 46 }), 47 makeEntry('session-hit', { sessionId: 's-2' }), 48 ] 49 50 const projectFiltered = filterMemoriesByScope(rows, { mode: 'project', projectRoot: '/repo/swarm' }) 51 assert.deepEqual(projectFiltered.map((r) => r.id), ['proj-hit']) 52 53 const sessionFiltered = filterMemoriesByScope(rows, { mode: 'session', sessionId: 's-2' }) 54 assert.deepEqual(sessionFiltered.map((r) => r.id), ['session-hit']) 55 }) 56