countUserPromptsInMessages function

int countUserPromptsInMessages(
  1. List<PromptCountMessage> messages
)

Count user messages with visible text content in a list of non-sidechain messages. Excludes tool_result blocks, terminal output, and empty messages.

Callers should pass messages already filtered to exclude sidechain messages.

Implementation

int countUserPromptsInMessages(List<PromptCountMessage> messages) {
  var count = 0;

  for (final message in messages) {
    if (message.type != 'user') {
      continue;
    }

    final content = message.content;
    if (content == null) {
      continue;
    }

    bool hasUserText = false;

    if (content is String) {
      if (_isTerminalOutput(content)) {
        continue;
      }
      hasUserText = content.trim().isNotEmpty;
    } else if (content is List) {
      hasUserText = content.any((block) {
        if (block is! Map<String, dynamic>) {
          return false;
        }
        final blockType = block['type'];
        if (blockType == 'text') {
          final text = block['text'];
          return text is String && !_isTerminalOutput(text);
        }
        return blockType == 'image' || blockType == 'document';
      });
    }

    if (hasUserText) {
      count++;
    }
  }

  return count;
}