import test from 'node:test'; import assert from 'node:assert/strict'; import { filterNonemptyUserVisibleMessages, persistSessionTranscriptFromSnapshot, persistSessionTranscriptMessages, } from './conversation-transcript-persist.mjs'; test('filterNonemptyUserVisibleMessages drops empty userVisible placeholders', () => { const filtered = filterNonemptyUserVisibleMessages([ { role: 'user', content: [{ type: 'text', text: 'hello' }], metadata: { userVisible: true } }, { role: 'assistant', id: 'msg_c7f5', content: [{ type: 'text', text: '' }], metadata: { userVisible: true } }, { role: 'assistant', content: [{ type: 'text', text: 'reply' }], metadata: { userVisible: true } }, { role: 'system', content: [{ type: 'text', text: 'hidden' }], metadata: { userVisible: false } }, ]); assert.equal(filtered.length, 2); assert.equal(filtered[0].content[0].text, 'hello'); assert.equal(filtered[1].content[0].text, 'reply'); }); test('persistSessionTranscriptMessages skips empty payloads', async () => { const saved = []; const result = await persistSessionTranscriptMessages({ conversationMemoryService: { async saveConversationMessages(sessionId, userId, messages) { saved.push({ sessionId, userId, messages }); return messages; }, }, sessionId: 'session-1', userId: 'user-1', messages: [{ role: 'assistant', content: [{ type: 'text', text: '' }] }], }); assert.equal(result.saved, 0); assert.equal(saved.length, 0); }); test('persistSessionTranscriptFromSnapshot copies prior direct session into new goose session', async () => { const saved = []; const snapshots = new Map([ [ 'h5direct_old', { messages: [ { role: 'user', content: [{ type: 'text', text: '中考政策' }] }, { role: 'assistant', content: [{ type: 'text', text: '这是回复' }], metadata: { source: 'portal-direct-chat' } }, ], }, ], ]); const result = await persistSessionTranscriptFromSnapshot({ sessionSnapshotService: { async get(sessionId) { return snapshots.get(sessionId) ?? null; }, }, conversationMemoryService: { async saveConversationMessages(sessionId, userId, messages) { saved.push({ sessionId, userId, messages }); return messages; }, }, sessionId: '20260705_2', userId: 'user-john', sourceSessionId: 'h5direct_old', }); assert.equal(result.saved, 2); assert.equal(saved.length, 1); assert.equal(saved[0].sessionId, '20260705_2'); assert.equal(saved[0].messages.length, 2); });