@startuml contenedores !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml LAYOUT_WITH_LEGEND() title Agatha · Nivel 2 · Contenedores Person(usuario, "Usuario") System_Ext(youtube, "YouTube", "Almacenamiento de facto") System_Boundary(agatha, "Agatha") { Container(api, "API del demo", "Python · FastAPI", "Recibe archivos, encola trabajos y sirve la reconstrucción") Container(escaner, "Escáner aislado", "Docker · ClamAV", "Analiza el archivo en un contenedor sin red antes de tocarlo") Container(core, "Núcleo hexagonal", "Python", "Chunking, BCH, bitmap 4K, códec y verificación SHA256") Container(cli, "CLI", "Python · Typer", "Operación manual del pipeline") ContainerDb(manifiestos, "Manifiestos", "SQLite", "Solo SHA256 y referencias remotas: mínima persistencia") } Rel(usuario, api, "Sube archivo + correo", "HTTPS") Rel(api, escaner, "Delega el análisis", "docker run --network none") Rel(api, core, "Codifica y reconstruye") Rel(cli, core, "Invoca las mismas etapas") Rel(core, manifiestos, "Guarda manifiesto y SHA", "SQL") Rel(core, youtube, "Sube el video (unlisted)", "OAuth") Rel(youtube, core, "Devuelve el VP9 2160p", "yt-dlp") @enduml