/ src / lib / server / memory / session-memory-scope.test.ts
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  })