convertSDKMessage function
ConvertedMessage
convertSDKMessage(
- SessionsMessage msg, {
- ConvertOptions options = const ConvertOptions(),
Convert a SessionsMessage (SDK format) to a ConvertedMessage.
The CCR backend sends SDK-format messages via WebSocket. The Flutter UI expects internal Message types for rendering. This function bridges the two.
Implementation
ConvertedMessage convertSDKMessage(
SessionsMessage msg, {
ConvertOptions options = const ConvertOptions(),
}) {
switch (msg.type) {
case 'assistant':
return ConvertedDisplayMessage(_convertAssistantMessage(msg));
case 'user':
final rawContent =
(msg.raw['message'] as Map<String, dynamic>?)?['content'];
final isToolResult = rawContent is List &&
rawContent.any(
(b) => b is Map<String, dynamic> && b['type'] == 'tool_result',
);
if (options.convertToolResults && isToolResult) {
return ConvertedDisplayMessage(_buildUserMessage(msg));
}
if (options.convertUserTextMessages && !isToolResult) {
return ConvertedDisplayMessage(_buildUserMessage(msg));
}
return const ConvertedIgnored();
case 'stream_event':
final event = msg.raw['event'] as Map<String, dynamic>? ?? msg.raw;
return ConvertedStreamEvent(event);
case 'result':
final converted = _convertResultMessage(msg);
return converted != null
? ConvertedDisplayMessage(converted)
: const ConvertedIgnored();
case 'system':
final subtype = msg.raw['subtype'] as String?;
return switch (subtype) {
'init' => ConvertedDisplayMessage(_convertInitMessage(msg)),
'status' => () {
final m = _convertStatusMessage(msg);
return m != null
? ConvertedDisplayMessage(m)
: const ConvertedIgnored();
}(),
'compact_boundary' =>
ConvertedDisplayMessage(_convertCompactBoundaryMessage(msg)),
_ => () {
developer.log(
'Ignoring system message subtype: $subtype',
name: 'sdkMessageAdapter',
);
return const ConvertedIgnored();
}(),
};
case 'tool_progress':
return ConvertedDisplayMessage(_convertToolProgressMessage(msg));
case 'auth_status':
case 'tool_use_summary':
case 'rate_limit_event':
developer.log(
'Ignoring ${msg.type} message',
name: 'sdkMessageAdapter',
);
return const ConvertedIgnored();
default:
developer.log(
'Unknown message type: ${msg.type}',
name: 'sdkMessageAdapter',
);
return const ConvertedIgnored();
}
}