import type { AssistantConversationItem, AssistantDebugPayload, AssistantMessageResponsePayload, AssistantReplyType } from "../types/assistant"; import type { DeepAnalysisLogDetails } from "./assistantMessageLogAssembler"; import { buildAssistantDeepTurnSuccessResponse } from "./assistantDeepTurnResponseBuilder"; import type { CommitAssistantTurnAndLogOutput } from "./assistantTurnCommitRuntimeAdapter"; import { commitAssistantTurnAndLog } from "./assistantTurnCommitRuntimeAdapter"; export interface FinalizeAssistantDeepTurnInput { sessionId: string; assistantReply: string; replyType: AssistantReplyType; assistantItem: AssistantConversationItem; debug: AssistantDebugPayload; deepAnalysisLogDetails: DeepAnalysisLogDetails; appendItem: Parameters[0]["appendItem"]; getSession: Parameters[0]["getSession"]; persistSession: Parameters[0]["persistSession"]; cloneConversation: Parameters[0]["cloneConversation"]; logEvent: Parameters[0]["logEvent"]; commitFn?: typeof commitAssistantTurnAndLog; buildResponseFn?: typeof buildAssistantDeepTurnSuccessResponse; } export interface FinalizeAssistantDeepTurnOutput { commitResult: CommitAssistantTurnAndLogOutput; response: AssistantMessageResponsePayload; } export function finalizeAssistantDeepTurn( input: FinalizeAssistantDeepTurnInput ): FinalizeAssistantDeepTurnOutput { const commitSafe = input.commitFn ?? commitAssistantTurnAndLog; const buildResponseSafe = input.buildResponseFn ?? buildAssistantDeepTurnSuccessResponse; const commitResult = commitSafe({ sessionId: input.sessionId, assistantItem: input.assistantItem, eventType: "assistant_message", logDetails: input.deepAnalysisLogDetails, appendItem: input.appendItem, getSession: input.getSession, persistSession: input.persistSession, cloneConversation: input.cloneConversation, logEvent: input.logEvent }); const response = buildResponseSafe({ sessionId: input.sessionId, assistantReply: input.assistantReply, replyType: input.replyType, conversationItem: input.assistantItem, debug: input.debug, conversation: commitResult.conversation }); return { commitResult, response }; }