session-memory-scope.test.ts
1 import assert from 'node:assert/strict' 2 import { describe, it } from 'node:test' 3 4 import type { Session } from '@/types' 5 import { 6 buildSessionMemoryScopeFilter, 7 resolveEffectiveSessionMemoryScopeMode, 8 shouldForceSessionScopedConnectorMemory, 9 } from '@/lib/server/memory/session-memory-scope' 10 11 function makeSession(overrides: Partial<Session>): Session { 12 return { 13 id: overrides.id || 'session-1', 14 name: overrides.name || 'Session', 15 cwd: overrides.cwd || '/tmp', 16 user: overrides.user || 'default', 17 provider: overrides.provider || 'openai', 18 model: overrides.model || 'gpt-test', 19 claudeSessionId: overrides.claudeSessionId ?? null, 20 messages: overrides.messages || [], 21 createdAt: overrides.createdAt || 1, 22 lastActiveAt: overrides.lastActiveAt || 1, 23 ...overrides, 24 } as Session 25 } 26 27 describe('session memory scope helpers', () => { 28 it('forces strict session scope for external connector conversations', () => { 29 const session = makeSession({ 30 user: 'connector', 31 name: 'connector:whatsapp:conn-1:peer:user-1', 32 agentId: 'agent-1', 33 connectorContext: { isOwnerConversation: false }, 34 memoryScopeMode: 'agent', 35 }) 36 37 assert.equal(shouldForceSessionScopedConnectorMemory(session), true) 38 assert.equal(resolveEffectiveSessionMemoryScopeMode(session, 'agent'), 'session') 39 assert.deepEqual(buildSessionMemoryScopeFilter(session, 'agent'), { 40 mode: 'session', 41 agentId: 'agent-1', 42 sessionId: 'session-1', 43 projectRoot: null, 44 }) 45 }) 46 47 it('keeps agent fallback scope for owner or normal sessions', () => { 48 const ownerSession = makeSession({ 49 user: 'connector', 50 name: 'connector:whatsapp:owner', 51 agentId: 'agent-1', 52 connectorContext: { isOwnerConversation: true }, 53 }) 54 const mainSession = makeSession({ 55 user: 'default', 56 name: 'Main Chat', 57 agentId: 'agent-2', 58 memoryScopeMode: 'project', 59 }) 60 61 assert.equal(shouldForceSessionScopedConnectorMemory(ownerSession), false) 62 assert.equal(resolveEffectiveSessionMemoryScopeMode(ownerSession, 'agent'), 'agent') 63 assert.equal(resolveEffectiveSessionMemoryScopeMode(mainSession, 'agent'), 'project') 64 }) 65 })