Pular para o conteúdo principal
Versão: 0.4.0

Diagrama C4 de Container (C2)

Este diagrama faz zoom no Invowk para mostrar seus containers internos - as principais aplicações, componentes e armazenamentos de dados que compõem o sistema.

observação

Na terminologia C4, "container" refere-se a uma unidade separadamente executável/implantável (não containers Docker). Como o Invowk é um único binário CLI, mostramos os principais componentes internos como containers lógicos.

Diagrama

Diagram: architecture/c4-container

Componentes Internos

Pontos de Entrada

ComponenteTecnologiaResponsabilidade
CLI CommandsGo/CobraPontos de entrada para todas as interações do usuário: subcomandos cmd, init, config, module, tui, completion

Motor Principal

ComponenteTecnologiaResponsabilidade
Discovery EngineGoEncontra diretórios invowkfile.cue e *.invowkmod com ordenação por precedência. Constrói árvore unificada de comandos.
Configuration ManagerGo/Viper+CUECarrega config de ~/.config/invowk/config.cue. Valida contra schema CUE.
CUE ParserGo/cuelangImplementa parsing em 3 etapas: compilar schema → unificar com dados → decodificar para structs Go. Fornece mensagens de erro ricas.
Module ResolverGoResolve dependências baseadas em Git. Gerencia cache em ~/.invowk/modules/. Lida com lock files para reprodutibilidade.

Runtimes

ComponenteTecnologiaResponsabilidade
Native RuntimeGoExecuta comandos via shell do host (bash/sh no Unix, PowerShell no Windows). Opção mais rápida.
Virtual RuntimeGo/mvdan-shInterpretador POSIX shell embutido. Inclui builtins u-root para portabilidade. Sem dependência de shell externo.
Container RuntimeGoExecuta comandos dentro de containers Docker/Podman. Fornece isolamento e reprodutibilidade.

Infraestrutura de Container

ComponenteTecnologiaResponsabilidade
Container Engine AbstractionGoInterface unificada para Docker e Podman. Auto-detecta engine disponível com fallback.
Image ProvisionerGoCria camadas efêmeras de imagem contendo binário invowk e módulos necessários. Permite execução seamless em container.

Servidores

ComponenteTecnologiaResponsabilidade
SSH ServerGo/WishServidor SSH baseado em token para callbacks container-para-host. Habilita funcionalidade enable_host_ssh.
TUI ServerGo/Bubble TeaServidor HTTP tratando requisições de componentes TUI de processos filhos. Habilita prompts interativos em qualquer runtime.

Armazenamentos de Dados

ArmazenamentoFormatoLocalizaçãoPropósito
Config FileCUE~/.config/invowk/config.cuePreferências do usuário: engine de container, search paths, etc.
InvowkfilesCUE./invowkfile.cue, search pathsDefinições de comandos com implementações
ModulesDiretórios*.invowkmod/Comandos empacotados com metadados invowkmod.cue
Module CacheSistema de Arquivos~/.invowk/modules/Módulos remotos buscados via Git em cache

Interações entre Componentes

Fluxo de Execução de Comandos

  1. Usuário invoca invowk cmd <nome>
  2. CLI Commands recebe requisição
  3. Discovery Engine encontra todos os comandos disponíveis
  4. CUE Parser faz parsing de invowkfile.cue e arquivos de módulos
  5. Comando é correspondido, runtime é selecionado
  6. Runtime apropriado executa o comando
  7. Para containers: Image Provisioner prepara o ambiente

Carregamento de Configuração

  1. Configuration Manager verifica arquivo de config
  2. CUE Parser valida contra schema
  3. Valores de config influenciam seleção de runtime e comportamento

Resolução de Módulos

  1. Discovery Engine encontra requisitos de módulos
  2. Module Resolver verifica cache, busca do Git se necessário
  3. Dependências são resolvidas transitivamente
  4. Comandos de módulos requeridos se tornam disponíveis

Fundamentos de Design

Por Que Três Runtimes?

RuntimeCaso de UsoTrade-off
NativeVelocidade, recursos completos do shellDependente de plataforma
VirtualPortabilidade, sem dependência de shellRecursos de shell limitados
ContainerIsolamento, reprodutibilidadeOverhead, apenas Linux

Por Que Servidores Separados?

  • SSH Server: Permite que comandos dentro de containers chamem de volta o host (ex: para gerenciamento de secrets)
  • TUI Server: Permite que qualquer subprocesso (native, virtual, container) solicite componentes de UI interativa

Por Que CUE para Configuração?

  • Validação de schema integrada
  • Verificação de tipos antes do runtime
  • Configurações combináveis
  • Mensagens de erro melhores que YAML/JSON

Diagramas Relacionados