serializeConversation function

String serializeConversation(
  1. List<Message> messages
)

Serialize messages to plain text for summarization prompts.

Ported from pi's serializeConversation: [User]:, [Assistant]:, [Assistant thinking]:, [Assistant tool calls]:, and truncated [Tool result]: lines, joined by blank lines. Image blocks are skipped.

Implementation

String serializeConversation(List<Message> messages) {
  final parts = <String>[];

  for (final msg in messages) {
    switch (msg) {
      case UserMessage(:final content):
        _serializeUserMessage(content, parts);
      case AssistantMessage(:final content):
        _serializeAssistantMessage(content, parts);
      case ToolResultMessage(:final content):
        _serializeToolResultMessage(content, parts);
      default:
    }
  }

  return parts.join('\n\n');
}