@startuml !theme plain skinparam componentStyle rectangle package "Artifact Editor" { [CLI Entry] as cli [Editor Core] as core [State Manager] as state package "Renderers" { [Renderer Registry] as registry [Mermaid Renderer] as mermaid [PlantUML Renderer] as plantuml [OpenSCAD Renderer] as openscad } package "UI Layer" { [Code Editor Panel] as code_panel [Preview Panel] as preview [Voice Input Button] as voice } } package "SmartTools (subprocess)" { [dictate] as dictate [artifact-generate] as ai_gen [artifact-modify] as ai_mod } package "External Renderers (subprocess)" { [mmdc] as mmdc_bin [plantuml.jar] as puml_bin [openscad] as oscad_bin } cli --> core : args core --> state : manage core --> registry : render request registry --> mermaid registry --> plantuml registry --> openscad mermaid --> mmdc_bin : subprocess plantuml --> puml_bin : subprocess openscad --> oscad_bin : subprocess code_panel --> core : code changes voice --> dictate : subprocess dictate --> ai_gen : pipe ai_gen --> core : generated code preview <-- registry : rendered image state --> code_panel : undo/redo note right of ai_gen SmartTools called via subprocess, never imported end note note bottom of registry All renderers run in isolated subprocess with timeout and cancellation end note @enduml