extractConversationText function

String extractConversationText(
  1. List<Map<String, dynamic>> messages
)

Flatten a message array into a single text string for Haiku title input.

Implementation

String extractConversationText(List<Map<String, dynamic>> messages) {
  final parts = <String>[];
  for (final msg in messages) {
    final type = msg['type'] as String?;
    if (type != 'user' && type != 'assistant') continue;
    if (msg['isMeta'] == true) continue;
    final origin = msg['origin'] as Map<String, dynamic>?;
    if (origin != null && origin['kind'] != 'human') continue;

    final content = msg['message']?['content'];
    if (content is String) {
      parts.add(content);
    } else if (content is List) {
      for (final block in content) {
        if (block is Map<String, dynamic> &&
            block['type'] == 'text' &&
            block['text'] is String) {
          parts.add(block['text'] as String);
        }
      }
    }
  }
  final text = parts.join('\n');
  return text.length > _maxConversationText
      ? text.substring(text.length - _maxConversationText)
      : text;
}