@startuml !define RECTANGLE class skinparam componentStyle rectangle package "Artifact Editor" { [CLI Entry Point] as CLI [Editor UI\n(Dear PyGui)] as UI [Renderer Registry] as Registry package "Renderers" { [MermaidRenderer] as Mermaid [PlantUMLRenderer] as PlantUML [OpenSCADRenderer] as SCAD [SVGRenderer] as SVG [ASCIIRenderer] as ASCII } package "AI Assist\n(SmartTools)" { [artifact-generator] as Gen [artifact-refiner] as Refine [artifact-assist] as Assist } } package "External Tools" { [mermaid-cli] as MermaidCLI [plantuml.jar] as PlantUMLJar [openscad] as OpenSCADApp [cairosvg] as Cairo } package "Parent App\n(orchestrated-discussions)" { [Comment Dialog] as Parent } ' Flow Parent --> CLI : launch with --output CLI --> UI : initialize UI --> Registry : get_renderer(file_ext) Registry --> Mermaid : route by extension Mermaid --> MermaidCLI : subprocess call MermaidCLI --> Mermaid : SVG bytes Mermaid --> UI : preview image UI --> Gen : user clicks "Generate" Gen --> UI : artifact code UI --> CLI : user saves CLI --> Parent : stdout: ARTIFACT_SAVED:path note right of Registry Strategy pattern: Each renderer knows how to validate, render, and preview its format end note note right of Gen SmartTools run as subprocesses Input: description or existing code Output: JSON with artifact content end note note bottom of CLI Integration Contract: - Input: --output --type - Output: ARTIFACT_SAVED: - Exit: 0=saved, 1=error, 2=cancelled end note @enduml