syncLoadingMessageFromActiveTools method
void
syncLoadingMessageFromActiveTools()
Update loadingMessage from activeToolLoadings, supporting multiple concurrent tool loadings.
Implementation
void syncLoadingMessageFromActiveTools() {
if (activeToolLoadings.isEmpty) {
// Only reset if we were showing tool loadings; other loading types
// (dots/text/websearch) are managed separately.
if (loadingMessage.value.loadingType == LoadingType.toolUse) {
resetLoadingMessage();
}
return;
}
final entries = activeToolLoadings.entries.toList();
final List<ToolLoadingEntry> tools = entries.map((e) {
final String baseName = e.key;
final String? status = toolPartialStatuses[baseName];
final String displayName = status == null
? baseName
: "${baseName.replaceAll("_", " ")} – $status";
return ToolLoadingEntry(name: displayName, key: baseName, type: e.value);
}).toList();
// `message` is primarily used as a fallback label; each tool bubble
// uses its own `ToolLoadingEntry.name`. When multiple tools are active,
// we avoid joining names so individual bubbles keep their own titles.
final String displayMessage = tools.length == 1 ? tools.first.name : "";
final ToolUseType effectiveType = entries.first.value;
loadingMessage.value = LoadingMessage(
message: displayMessage,
loadingType: LoadingType.toolUse,
toolUseType: effectiveType,
tools: tools,
);
update();
}