session-memory-scope.ts
1 import type { Session } from '@/types' 2 import type { MemoryScopeFilter, MemoryScopeMode } from '@/lib/server/memory/memory-db' 3 import { isDirectConnectorSession } from '@/lib/server/connectors/session-kind' 4 5 type SessionMemoryShape = { 6 id?: string | null 7 agentId?: string | null 8 memoryScopeMode?: MemoryScopeMode | string | null 9 connectorContext?: Session['connectorContext'] | null 10 name?: string | null 11 user?: string | null 12 } 13 14 function normalizeMemoryScopeMode(value: unknown): MemoryScopeMode | null { 15 if (value === null || value === undefined) return null 16 if (value === 'auto' || value === 'all' || value === 'global' || value === 'agent' || value === 'session' || value === 'project') { 17 return value 18 } 19 return null 20 } 21 22 export function shouldForceSessionScopedConnectorMemory(session?: SessionMemoryShape | null): boolean { 23 if (!session) return false 24 return isDirectConnectorSession(session) && session.connectorContext?.isOwnerConversation !== true 25 } 26 27 export function resolveEffectiveSessionMemoryScopeMode( 28 session?: SessionMemoryShape | null, 29 fallbackMode: MemoryScopeMode | null = null, 30 ): MemoryScopeMode | null { 31 if (shouldForceSessionScopedConnectorMemory(session)) return 'session' 32 const sessionMode = normalizeMemoryScopeMode(session?.memoryScopeMode) 33 return sessionMode || fallbackMode || null 34 } 35 36 export function buildSessionMemoryScopeFilter( 37 session: SessionMemoryShape, 38 fallbackMode: MemoryScopeMode | null = null, 39 projectRoot: string | null = null, 40 ): MemoryScopeFilter { 41 return { 42 mode: resolveEffectiveSessionMemoryScopeMode(session, fallbackMode) || 'auto', 43 agentId: session.agentId ?? null, 44 sessionId: session.id ?? null, 45 projectRoot, 46 } 47 }