diff --git a/src/main/apiServer/routes/agents/handlers/messages.ts b/src/main/apiServer/routes/agents/handlers/messages.ts index 41a3bf44d6..4ae62dcbda 100644 --- a/src/main/apiServer/routes/agents/handlers/messages.ts +++ b/src/main/apiServer/routes/agents/handlers/messages.ts @@ -49,8 +49,6 @@ export const createMessage = async (req: Request, res: Response): Promise // Track stream lifecycle so we keep the SSE connection open until persistence finishes let responseEnded = false let streamFinished = false - let awaitingPersistence = false - const persistenceResolved = false const finalizeResponse = () => { if (responseEnded) { @@ -61,10 +59,6 @@ export const createMessage = async (req: Request, res: Response): Promise return } - if (awaitingPersistence && !persistenceResolved) { - return - } - responseEnded = true try { res.write('data: {"type":"finish"}\n\n') @@ -136,7 +130,6 @@ export const createMessage = async (req: Request, res: Response): Promise // res.write(`data: ${JSON.stringify({ type: 'complete', result: event.result })}\n\n`) streamFinished = true - awaitingPersistence = true finalizeResponse() break } @@ -151,7 +144,8 @@ export const createMessage = async (req: Request, res: Response): Promise default: // Handle other event types as generic data - res.write(`data: ${JSON.stringify(event)}\n\n`) + logger.info(`Streaming message event for session: ${sessionId}:`, { event }) + // res.write(`data: ${JSON.stringify(event)}\n\n`) break } } catch (writeError) { diff --git a/src/main/services/agents/services/SessionMessageService.ts b/src/main/services/agents/services/SessionMessageService.ts index e50c4e8ffc..77f4133872 100644 --- a/src/main/services/agents/services/SessionMessageService.ts +++ b/src/main/services/agents/services/SessionMessageService.ts @@ -238,22 +238,15 @@ export class SessionMessageService extends BaseService { error: serializeError(underlyingError), persistScheduled: false }) - // Always emit a finish chunk at the end + // Always emit a complete chunk at the end sessionStream.emit('data', { - type: 'finish', + type: 'complete', persistScheduled: false }) break } case 'complete': { - const completionPayload = event.result ?? accumulator.toModelMessage('assistant') - - sessionStream.emit('data', { - type: 'complete', - result: completionPayload - }) - try { const persisted = await this.database.transaction(async (tx) => { const userMessage = await this.persistUserMessage(tx, session.id, req.content, newAgentSessionId) @@ -278,9 +271,9 @@ export class SessionMessageService extends BaseService { error: serializeError(persistError) }) } finally { - // Always emit a finish chunk at the end + // Always emit a complete chunk at the end sessionStream.emit('data', { - type: 'finish', + type: 'complete', persistScheduled: true }) }