From 7f65efa728e20f0b9430037e7074165a6188a8a4 Mon Sep 17 00:00:00 2001 From: AI Christianson Date: Mon, 24 Feb 2025 13:56:08 -0500 Subject: [PATCH] add console renderer backend --- ra_aid/output/renderers/console.py | 58 ++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 ra_aid/output/renderers/console.py diff --git a/ra_aid/output/renderers/console.py b/ra_aid/output/renderers/console.py new file mode 100644 index 0000000..7a5eca3 --- /dev/null +++ b/ra_aid/output/renderers/console.py @@ -0,0 +1,58 @@ +"""Console renderer implementation using Rich.""" + +from rich.markdown import Markdown +from rich.panel import Panel + +from ra_aid.console.formatting import console +from ra_aid.output.interface.base import OutputRenderer +from ra_aid.output.interface.models import ( + MarkdownPanel, + StageHeader, + TaskHeader, + StatusMessage, +) + + +class ConsoleRenderer(OutputRenderer): + """Rich console implementation of the OutputRenderer interface.""" + + def render_panel(self, panel: MarkdownPanel) -> None: + """Render a markdown panel using Rich. + + Args: + panel: Panel configuration containing content and styling + """ + console.print( + Panel( + Markdown(panel.content), + title=f"{panel.icon + ' ' if panel.icon else ''}{panel.title or ''}".strip() or None, + border_style=panel.border_style or "bright_blue", + ) + ) + + def render_stage(self, header: StageHeader) -> None: + """Render a stage header. + + Args: + header: Stage header configuration + """ + icon = f"{header.icon} " if header.icon else "🚀 " # Default icon + panel_content = f"{icon}{header.text.title()}" + console.print(Panel(panel_content, style="green bold", padding=0)) + + def render_task(self, header: TaskHeader) -> None: + """Render a task header with markdown support. + + Args: + header: Task header configuration + """ + icon = f"{header.icon} " if header.icon else "🔧 " # Default icon + console.print(Panel(Markdown(header.text), title=f"{icon}Task", border_style="yellow bold")) + + def render_status(self, message: StatusMessage) -> None: + """Render a status message. + + Args: + message: Status message configuration + """ + console.print(message.text, style=message.style or "blue")