diff --git a/src/cleveragents/tui/_tui_events.py b/src/cleveragents/tui/_tui_events.py index 0f205bcd6..81c459e3a 100644 --- a/src/cleveragents/tui/_tui_events.py +++ b/src/cleveragents/tui/_tui_events.py @@ -86,7 +86,30 @@ class TuiWidgetEvent: ) +# --------------------------------------------------------------------------- +# UnknownElementType exception +# --------------------------------------------------------------------------- + + +class UnknownElementType(ValueError): + """Raised when an element type is not recognised by the TUI renderer. + + This exception is raised instead of falling back to ``str(element)`` + in :func:`render_element_for_tui` so that callers get a meaningful + diagnostic rather than silently rendering garbage into the TUI output. + """ + + __slots__ = ("element",) + + def __init__(self, element: object) -> None: + super().__init__( + f"Unknown element type {type(element).__name__!r} value={element!r}" + ) + self.element = element + + __all__ = [ "TuiWidgetEvent", "TuiWidgetEventType", + "UnknownElementType", ] diff --git a/src/cleveragents/tui/_tui_renderers.py b/src/cleveragents/tui/_tui_renderers.py index 72416313d..c39787164 100644 --- a/src/cleveragents/tui/_tui_renderers.py +++ b/src/cleveragents/tui/_tui_renderers.py @@ -18,9 +18,10 @@ from cleveragents.cli.output.handles._models import ( StatusMessage, Table, TextBlock, - TreeNode, Tree, + TreeNode, ) +from cleveragents.tui._tui_events import UnknownElementType # --------------------------------------------------------------------------- # Rendering helpers @@ -196,7 +197,7 @@ def render_element_for_tui(element: ElementSnapshot) -> str: return _render_action_hint(element) if isinstance(element, TextBlock): return _render_text(element) - return str(element) # pragma: no cover + raise UnknownElementType(element) # pragma: no cover __all__ = [ diff --git a/src/cleveragents/tui/materializer.py b/src/cleveragents/tui/materializer.py index 674bf58f7..98a50ace6 100644 --- a/src/cleveragents/tui/materializer.py +++ b/src/cleveragents/tui/materializer.py @@ -41,6 +41,7 @@ from typing import TYPE_CHECKING from cleveragents.tui._tui_events import ( TuiWidgetEvent, TuiWidgetEventType, + UnknownElementType, ) from cleveragents.tui._tui_renderers import render_element_for_tui @@ -61,6 +62,7 @@ __all__ = [ "TuiMaterializer", "TuiWidgetEvent", "TuiWidgetEventType", + "UnknownElementType", "render_element_for_tui", ]