/ src / lib / server / session-note.ts
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  }