From 5c6cbe08848529c3087617b07cb494f3a8aa54a1 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Fri, 10 Jul 2026 13:43:53 +0000 Subject: [PATCH] fix(tui): key render cache by content string and return copies Co-Authored-By: Ahmed Allam --- strix/interface/tui/renderers/agent_message_renderer.py | 9 ++++----- strix/interface/tui/renderers/shell_renderer.py | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/strix/interface/tui/renderers/agent_message_renderer.py b/strix/interface/tui/renderers/agent_message_renderer.py index b96275a8..c4362804 100644 --- a/strix/interface/tui/renderers/agent_message_renderer.py +++ b/strix/interface/tui/renderers/agent_message_renderer.py @@ -161,7 +161,7 @@ def _process_inline_formatting(line: str) -> Text: class AgentMessageRenderer: - _cache: ClassVar[dict[int, Text]] = {} + _cache: ClassVar[dict[str, Text]] = {} @classmethod def render_simple(cls, content: str) -> Text: @@ -170,12 +170,11 @@ class AgentMessageRenderer: cleaned = _BLANK_LINE_RUNS.sub("\n\n", content).strip() if not cleaned: return Text() - cache_key = hash(cleaned) - cached = cls._cache.get(cache_key) + cached = cls._cache.get(cleaned) if cached is not None: return cached.copy() rendered = _apply_markdown_styles(cleaned) if len(cls._cache) > 100: cls._cache.clear() - cls._cache[cache_key] = rendered - return rendered + cls._cache[cleaned] = rendered + return rendered.copy() diff --git a/strix/interface/tui/renderers/shell_renderer.py b/strix/interface/tui/renderers/shell_renderer.py index 131bd6cd..22a6ec13 100644 --- a/strix/interface/tui/renderers/shell_renderer.py +++ b/strix/interface/tui/renderers/shell_renderer.py @@ -71,7 +71,7 @@ def _truncate_line(line: str) -> str: def _clean_output(output: str) -> str: - cleaned = Text.from_ansi(output).plain.translate(_CONTROL_BYTES_TO_DROP) + cleaned: str = Text.from_ansi(output).plain.translate(_CONTROL_BYTES_TO_DROP) for pattern in STRIP_PATTERNS: cleaned = re.sub(pattern, "", cleaned, flags=re.MULTILINE)