""" Live Coding Agent Display Dual-mode display for live coding agent sessions: - Live mode (no data): Shows start form + streaming viewer with controls - Review mode (data present): Delegates to CodingTraceDisplay Usage: fields: - key: structured_turns type: live_coding_agent display_options: show_file_tree: true show_reasoning: true collapse_long_outputs: true """ import html from typing import Dict, Any, List, Optional from .base import BaseDisplay from .coding_trace_display import CodingTraceDisplay class LiveCodingAgentDisplay(BaseDisplay): """Display type for live coding agent sessions.""" name = "live_coding_agent" required_fields = ["key"] optional_fields = { "show_file_tree": True, "show_reasoning": True, "collapse_long_outputs": True, "max_output_lines": 50, "show_controls": True, "allow_instructions": True, } description = "Live coding agent viewer with real-time streaming and intervention controls" supports_span_target = False def __init__(self): self._coding_trace_display = CodingTraceDisplay() def render(self, field_config: Dict[str, Any], data: Any) -> str: # If data has structured turns, delegate to CodingTraceDisplay (review mode) if data and isinstance(data, (list, dict)): if isinstance(data, list) and len(data) > 0: return self._coding_trace_display.render(field_config, data) if isinstance(data, dict) and data.get("structured_turns"): return self._coding_trace_display.render( field_config, data["structured_turns"] ) # Live mode: render the viewer UI field_key = html.escape(field_config.get("key", ""), quote=True) options = self.get_display_options(field_config) show_controls = options.get("show_controls", True) allow_instructions = options.get("allow_instructions", True) controls_html = "" if show_controls: controls_html = f'''