diff --git a/frontend/src/types/ws-messages.ts b/frontend/src/types/ws-messages.ts index a16d8fe1..aa22e1c6 100644 --- a/frontend/src/types/ws-messages.ts +++ b/frontend/src/types/ws-messages.ts @@ -170,6 +170,7 @@ interface UserMessageMsg { v: 2; messageId: string; text: string; + sessionId?: string; } interface SessionRenamedMsg { diff --git a/server/chat.ts b/server/chat.ts index 819914f9..dcb8c7fd 100644 --- a/server/chat.ts +++ b/server/chat.ts @@ -929,7 +929,7 @@ async function _startChatInner( }); eventStore.updateLastSpeaker(options.resume, 'user'); _onSessionChange?.(clientId, 'user_message'); - const echo = { type: 'user_message', messageId, text: fullPrompt }; + const echo = { type: 'user_message', v: 2, messageId, text: fullPrompt, sessionId: options.resume }; send(transport, echo); broadcastToObservers(session.observers, echo); } @@ -1055,7 +1055,7 @@ export function sendToChat( /* errors logged internally */ }); } - const echo = { type: 'user_message', messageId, text: fullPrompt }; + const echo = { type: 'user_message', v: 2, messageId, text: fullPrompt, ...(session.sessionId ? { sessionId: session.sessionId } : {}) }; send(session.transport, echo); broadcastToObservers(session.observers, echo); session.inputQueue.push(makeUserMessage(fullPrompt, 'next')); @@ -1089,7 +1089,7 @@ export async function interruptChat( eventStore.updateLastSpeaker(session.sessionId, 'user'); _onSessionChange?.(clientId, 'user_message'); } - const echo = { type: 'user_message', messageId, text: fullPrompt }; + const echo = { type: 'user_message', v: 2, messageId, text: fullPrompt, ...(session.sessionId ? { sessionId: session.sessionId } : {}) }; send(session.transport, echo); broadcastToObservers(session.observers, echo); // Stop all active subagent tasks before interrupting the parent query.