diff --git a/src/crewai/utilities/events/event_listener.py b/src/crewai/utilities/events/event_listener.py index 1917eca1f..3d700b086 100644 --- a/src/crewai/utilities/events/event_listener.py +++ b/src/crewai/utilities/events/event_listener.py @@ -161,8 +161,10 @@ class EventListener(BaseEventListener): def on_task_started(source, event: TaskStartedEvent): span = self._telemetry.task_started(crew=source.agent.crew, task=source) self.execution_spans[source] = span + # Pass both task ID and task name (if set) + task_name = source.name if hasattr(source, 'name') and source.name else None self.formatter.create_task_branch( - self.formatter.current_crew_tree, source.id + self.formatter.current_crew_tree, source.id, task_name ) @crewai_event_bus.on(TaskCompletedEvent) @@ -173,11 +175,14 @@ class EventListener(BaseEventListener): self._telemetry.task_ended(span, source, source.agent.crew) self.execution_spans[source] = None + # Pass task name if it exists + task_name = source.name if hasattr(source, 'name') and source.name else None self.formatter.update_task_status( self.formatter.current_crew_tree, source.id, source.agent.role, "completed", + task_name ) @crewai_event_bus.on(TaskFailedEvent) @@ -188,11 +193,14 @@ class EventListener(BaseEventListener): self._telemetry.task_ended(span, source, source.agent.crew) self.execution_spans[source] = None + # Pass task name if it exists + task_name = source.name if hasattr(source, 'name') and source.name else None self.formatter.update_task_status( self.formatter.current_crew_tree, source.id, source.agent.role, "failed", + task_name ) # ----------- AGENT EVENTS ----------- diff --git a/src/crewai/utilities/events/utils/console_formatter.py b/src/crewai/utilities/events/utils/console_formatter.py index 5039aa1be..68dc556a0 100644 --- a/src/crewai/utilities/events/utils/console_formatter.py +++ b/src/crewai/utilities/events/utils/console_formatter.py @@ -220,14 +220,22 @@ class ConsoleFormatter: return tree def create_task_branch( - self, crew_tree: Optional[Tree], task_id: str + self, crew_tree: Optional[Tree], task_id: str, task_name: Optional[str] = None ) -> Optional[Tree]: """Create and initialize a task branch.""" if not self.verbose: return None task_content = Text() - task_content.append(f"📋 Task: {task_id}", style="yellow bold") + + # Display task name if available, otherwise just the ID + if task_name: + task_content.append("📋 Task: ", style="yellow bold") + task_content.append(f"{task_name}", style="yellow bold") + task_content.append(f" (ID: {task_id})", style="yellow dim") + else: + task_content.append(f"📋 Task: {task_id}", style="yellow bold") + task_content.append("\nStatus: ", style="white") task_content.append("Executing Task...", style="yellow dim") @@ -251,6 +259,7 @@ class ConsoleFormatter: task_id: str, agent_role: str, status: str = "completed", + task_name: Optional[str] = None, ) -> None: """Update task status in the tree.""" if not self.verbose or crew_tree is None: @@ -270,8 +279,13 @@ class ConsoleFormatter: if str(task_id) in str(branch.label): # Build label without introducing stray blank lines task_content = Text() - # First line: Task ID - task_content.append(f"📋 Task: {task_id}", style=f"{style} bold") + # First line: Task ID/name + if task_name: + task_content.append("📋 Task: ", style=f"{style} bold") + task_content.append(f"{task_name}", style=f"{style} bold") + task_content.append(f" (ID: {task_id})", style=f"{style} dim") + else: + task_content.append(f"📋 Task: {task_id}", style=f"{style} bold") # Second line: Assigned to task_content.append("\nAssigned to: ", style="white") @@ -285,8 +299,9 @@ class ConsoleFormatter: break # Show status panel + display_name = task_name if task_name else str(task_id) content = self.create_status_content( - f"Task {status.title()}", str(task_id), style, Agent=agent_role + f"Task {status.title()}", display_name, style, Agent=agent_role ) self.print_panel(content, panel_title, style)