/ src / lib / server / memory / memory-retrieval.test.ts
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