import type { AssistantConversationItem, AssistantSessionState } from "../types/assistant"; export interface CommitAssistantTurnAndLogInput { sessionId: string; assistantItem: AssistantConversationItem; eventType: string; logDetails: Record; appendItem: (sessionId: string, item: AssistantConversationItem) => void; getSession: (sessionId: string) => AssistantSessionState | null; persistSession: (session: AssistantSessionState) => void; cloneConversation: (items: AssistantConversationItem[]) => AssistantConversationItem[]; logEvent: (payload: { timestamp: string; level: "info"; service: "assistant_loop"; message: "assistant_message_processed"; sessionId: string; eventType: string; details: Record; }) => void; nowIso?: () => string; } export interface CommitAssistantTurnAndLogOutput { currentSession: AssistantSessionState | null; conversation: AssistantConversationItem[]; } export function commitAssistantTurnAndLog(input: CommitAssistantTurnAndLogInput): CommitAssistantTurnAndLogOutput { input.appendItem(input.sessionId, input.assistantItem); const currentSession = input.getSession(input.sessionId); if (currentSession) { input.persistSession(currentSession); } const conversation = input.cloneConversation(currentSession?.items ?? []); input.logEvent({ timestamp: (input.nowIso ?? (() => new Date().toISOString()))(), level: "info", service: "assistant_loop", message: "assistant_message_processed", sessionId: input.sessionId, eventType: input.eventType, details: input.logDetails }); return { currentSession, conversation }; }