extractTodosFromTranscript function

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

Scan transcript for the last TodoWrite tool_use block and return its todos.

Implementation

List<Map<String, dynamic>> extractTodosFromTranscript(
  List<Map<String, dynamic>> messages,
) {
  for (var i = messages.length - 1; i >= 0; i--) {
    final msg = messages[i];
    if (msg['type'] != 'assistant') continue;
    final content = msg['message']?['content'];
    if (content is! List) continue;

    for (final block in content) {
      if (block is Map<String, dynamic> &&
          block['type'] == 'tool_use' &&
          block['name'] == 'TodoWrite') {
        final input = block['input'];
        if (input is Map<String, dynamic>) {
          final todos = input['todos'];
          if (todos is List) {
            return todos.cast<Map<String, dynamic>>();
          }
        }
        return [];
      }
    }
  }
  return [];
}