Redouble AI Nucleo documentation
Part 13 · Inside the runtime

Inside the chat messages

ai.redouble.nucleo.chat.messages · nucleo-core

This page is for people working on the runtime itself. What the frames are and how a client reads them is in Chat messages.

What is here

ClassRole
WebSocketMessageThe outgoing envelope: type, timestamp, workflowId, plus a @JsonUnwrapped payload whose properties merge into the top-level JSON. Payloads are POJOs so unwrapping applies; a Map payload nests under data instead (the conversation_loaded frame relies on exactly that).
WebSocketMessageTypeEvery frame type the clients validate against, serialized lowercase.
StatusMessageThe plain status/error payload: status + message. Used for errors, pong, unlocked, disconnected, chat_closed, history_complete.
ConnectedStatusThe CONNECTED frame's payload: StatusMessage plus the durable conversationId and scopeId. Additive on the wire - unwrapping flattens subclass properties, so clients validating only status/message keep working. Sent at every turn start so a brand-new chat learns its real identity immediately.
IncomingMessageJackson-polymorphic inbound shape, by type: message, ping, subscribe, unsubscribe, list, force_unlock. The scoped chat endpoints read ai.redouble.nucleo.chat.ScopedChatMessage instead.

Tests

ConnectedStatusShapeTest pins the unwrapped-subclass behavior through a Jackson mapper, which is what every host codec is built on.

^