session-note.ts
1 import type { Message, MessageToolEvent } from '@/types' 2 import { loadSessions, saveSessions } from './storage' 3 import { appendMessage } from '@/lib/server/messages/message-repository' 4 import { notify } from './ws-hub' 5 6 export interface SessionNoteInput { 7 sessionId: string 8 text: string 9 role?: Message['role'] 10 kind?: Message['kind'] 11 toolEvents?: MessageToolEvent[] 12 time?: number 13 } 14 15 export function buildSessionNoteMessage(input: Omit<SessionNoteInput, 'sessionId'>): Message | null { 16 const trimmed = String(input.text || '').trim() 17 if (!trimmed) return null 18 return { 19 role: input.role || 'assistant', 20 kind: input.kind || 'system', 21 text: trimmed, 22 time: typeof input.time === 'number' && Number.isFinite(input.time) ? input.time : Date.now(), 23 ...(Array.isArray(input.toolEvents) && input.toolEvents.length ? { toolEvents: input.toolEvents } : {}), 24 } 25 } 26 27 export function appendSessionNote(input: SessionNoteInput): Message | null { 28 const sessions = loadSessions() 29 const session = sessions[input.sessionId] 30 if (!session) return null 31 32 const next = buildSessionNoteMessage(input) 33 if (!next) return null 34 35 appendMessage(input.sessionId, next) 36 session.lastActiveAt = next.time 37 sessions[input.sessionId] = session 38 saveSessions(sessions) 39 notify('sessions') 40 return next 41 }