deriveFirstPrompt function

String deriveFirstPrompt(
  1. SerializedMessage? firstUserMessage
)

Derive a single-line title base from the first user message. Collapses whitespace so multiline first messages (pasted stacks, code) don't flow into the saved title and break the resume hint.

Implementation

String deriveFirstPrompt(SerializedMessage? firstUserMessage) {
  if (firstUserMessage == null) return 'Branched conversation';

  final message = firstUserMessage.rawData['message'];
  if (message == null) return 'Branched conversation';

  final content = message is Map ? message['content'] : null;
  if (content == null) return 'Branched conversation';

  String? raw;
  if (content is String) {
    raw = content;
  } else if (content is List) {
    for (final block in content) {
      if (block is Map && block['type'] == 'text') {
        raw = block['text'] as String?;
        break;
      }
    }
  }

  if (raw == null || raw.isEmpty) return 'Branched conversation';

  final collapsed = raw.replaceAll(RegExp(r'\s+'), ' ').trim();
  if (collapsed.isEmpty) return 'Branched conversation';

  return collapsed.length > 100 ? collapsed.substring(0, 100) : collapsed;
}