getCompletedResults method

List<MessageUpdate> getCompletedResults()

Get completed results that haven't been yielded yet.

Implementation

List<MessageUpdate> getCompletedResults() {
  if (_discarded) return [];

  final results = <MessageUpdate>[];
  for (final tool in _tools) {
    // Yield pending progress
    while (tool.pendingProgress.isNotEmpty) {
      results.add(
        MessageUpdate(
          message: tool.pendingProgress.removeAt(0),
          newContext: _toolUseContext,
        ),
      );
    }

    if (tool.status == ToolStatus.yielded) continue;
    if (tool.status == ToolStatus.completed && tool.results != null) {
      tool.status = ToolStatus.yielded;
      for (final message in tool.results!) {
        results.add(
          MessageUpdate(message: message, newContext: _toolUseContext),
        );
      }
      _markToolUseAsComplete(_toolUseContext, tool.id);
    } else if (tool.status == ToolStatus.executing &&
        !tool.isConcurrencySafe) {
      break;
    }
  }
  return results;
}