import { describe, expect, it } from 'vitest'; import { selectCompactMemoriesFromSummary } from '../src/memory-selection.js'; describe('memory selection', () => { it('keeps stable room memories and drops transient status lines', () => { const selected = selectCompactMemoriesFromSummary( [ '방 메모리는 새 세션 시작 시에만 주입한다.', '테스트 599개 통과.', '사용자는 수동 명령보다 자동 기억 형성을 원한다.', ].join(' '), 'room:ejclaw', ); expect(selected).toHaveLength(2); expect(selected[0].content).toBe( '방 메모리는 새 세션 시작 시에만 주입한다.', ); expect(selected[0].memoryKind).toBe('room_norm'); expect(selected[1].content).toBe( '사용자는 수동 명령보다 자동 기억 형성을 원한다.', ); expect(selected[1].memoryKind).toBe('preference'); expect( selected.every((memory) => memory.keywords.includes('room:ejclaw')), ).toBe(true); }); it('returns no memories for purely operational summaries', () => { const selected = selectCompactMemoriesFromSummary( '메멘토 대체 v1 로컬 구현은 끝냈습니다. 테스트 599개 통과.', 'room:ejclaw', ); expect(selected).toEqual([]); }); it('keeps stable rule sentences even when they contain operational words', () => { const selected = selectCompactMemoriesFromSummary( '배포 전에 항상 테스트를 돌리는 것이 원칙이다.', 'room:ejclaw', ); expect(selected).toHaveLength(1); expect(selected[0].content).toBe( '배포 전에 항상 테스트를 돌리는 것이 원칙이다.', ); expect(selected[0].memoryKind).toBe('room_norm'); }); });