31 lines
897 B
Python
31 lines
897 B
Python
from abc import ABC, abstractmethod
|
|
from typing import Any, ClassVar
|
|
|
|
from textual.widgets import Static
|
|
|
|
|
|
class BaseToolRenderer(ABC):
|
|
tool_name: ClassVar[str] = ""
|
|
css_classes: ClassVar[list[str]] = ["tool-call"]
|
|
|
|
@classmethod
|
|
@abstractmethod
|
|
def render(cls, tool_data: dict[str, Any]) -> Static:
|
|
pass
|
|
|
|
@classmethod
|
|
def status_icon(cls, status: str) -> tuple[str, str]:
|
|
icons = {
|
|
"running": ("● In progress...", "#f59e0b"),
|
|
"completed": ("✓ Done", "#22c55e"),
|
|
"failed": ("✗ Failed", "#dc2626"),
|
|
"error": ("✗ Error", "#dc2626"),
|
|
}
|
|
return icons.get(status, ("○ Unknown", "dim"))
|
|
|
|
@classmethod
|
|
def get_css_classes(cls, status: str) -> str:
|
|
base_classes = cls.css_classes.copy()
|
|
base_classes.append(f"status-{status}")
|
|
return " ".join(base_classes)
|