Diagrama C4 — Containers¶
O diagrama de containers detalha os componentes internos da plataforma AMia e seus relacionamentos.
C4Container
title AMia — Diagrama de Containers
Person(user, "Usuário", "PO, Arquiteto, Dev, QA, Admin")
System_Boundary(amia, "AMia Platform") {
Container(portal, "Portal", "Angular 19", "Interface web SPA — gestão de projetos, specs, Work Items, iterações e administração")
Container(core, "AMia Core", ".NET 10 / ASP.NET Core", "API REST + SignalR — orquestração de negócio, RBAC, Work Items, Specs, CQRS, RabbitMQ consumer")
Container(agents, "AMia Agents", "Python 3.11 / FastAPI / LangChain", "Agentes especializados de IA — Visão, Arquitetura, Design, Story Mapping, Codificação, QA")
Container(mcp, "MCP Server", "Python 3.11 / FastAPI", "Servidor MCP local — operações de arquivo no repositório do desenvolvedor, integração com Agents")
Container(cli, "CLI", "Python 3.11", "Inicialização e autenticação local do MCP Server")
ContainerDb(db, "PostgreSQL 15+", "Banco de dados relacional", "Projetos, Specs, Work Items, Iterações, Prompts, AuditLogs")
Container(mq, "RabbitMQ", "Message Broker", "Comunicação assíncrona entre Core e Agents — filas de geração de specs e Work Items")
Container(cache, "Redis", "Cache distribuído", "Estado de contingência de LLM — compartilhado entre workers do Agents")
}
System_Ext(azure_ad, "Azure AD", "SSO corporativo")
System_Ext(anthropic, "Anthropic Claude API", "LLM primário")
System_Ext(gemini, "Google Gemini API", "LLM fallback")
System_Ext(keyvault, "Azure Key Vault", "Secrets, connection strings, API keys")
System_Ext(blob, "Azure Blob Storage", "Artefatos gerados — specs, código")
System_Ext(elastic, "Elasticsearch / Grafana", "APM, logs, métricas")
Rel(user, portal, "Acessa via browser — HTTPS")
Rel(user, mcp, "Usa via IDE / Claude Code — MCP Protocol")
Rel(user, cli, "Executa localmente — terminal")
Rel(portal, core, "Chama API REST — HTTPS + JWT")
Rel(portal, core, "Recebe eventos em tempo real — SignalR/WSS")
Rel(core, db, "Lê e escreve — Entity Framework Core")
Rel(core, mq, "Publica eventos de geração — AMQP")
Rel(core, keyvault, "Recupera secrets em runtime")
Rel(core, blob, "Armazena artefatos gerados")
Rel(core, azure_ad, "Valida tokens JWT — Microsoft Graph")
Rel(agents, mq, "Consome eventos de geração — AMQP")
Rel(agents, core, "Consulta specs e salva resultados — HTTPS")
Rel(agents, anthropic, "Chamadas de geração — HTTPS")
Rel(agents, gemini, "Fallback automático — HTTPS")
Rel(agents, cache, "Estado de contingência de LLM")
Rel(agents, keyvault, "Recupera API keys em runtime")
Rel(agents, elastic, "Envia métricas de LLM e spans APM")
Rel(mcp, core, "Consulta specs e Work Items — HTTPS + JWT")
Rel(mcp, agents, "Aciona geração de código e testes — HTTPS")
Rel(cli, azure_ad, "Autenticação OAuth2/OIDC")
Comunicação entre containers¶
| De | Para | Protocolo | Autenticação |
|---|---|---|---|
| Portal | Core | HTTPS REST | JWT (Azure AD) |
| Portal | Core | WebSocket Secure (SignalR) | JWT |
| Core | Agents | AMQP (RabbitMQ) | Credencial RabbitMQ (Key Vault) |
| Agents | Core | HTTPS REST | JWT de serviço |
| MCP Server | Core | HTTPS REST | JWT (Azure AD) |
| MCP Server | Agents | HTTPS REST | JWT de serviço |
Todos os secrets (connection strings, API keys, tokens) são recuperados em runtime do Azure Key Vault — nunca hardcoded ou em variáveis de ambiente no código.