Arquitetura
Visão geral
A CLI é um binário Go monolítico organizado em pacotes por subsistema, com
recipes oficiais embutidas no binário (go:embed). Cada comando da CLI
encadeia os subsistemas; o manifest orotools.yaml conecta os usos.
Pipeline do oro new
O fluxo de scaffold é um pipeline determinístico: carregar a recipe, resolver variáveis, validar requirements, planejar e executar.
Subsistemas
| Pacote | Responsabilidade |
|---|---|
internal/cli | Comandos cobra e wizards interativos |
internal/ui | Helpers de terminal (paleta, tabelas, TUI) |
internal/recipe | Loader/validator de recipes (YAML, embed) |
internal/variables | Resolução de variáveis (defaults → wizard → flags) |
internal/requirements | Checker de ferramentas + versões |
internal/planner | Recipe → plano (dry-run, network awareness) |
internal/executor | Steps mkdir/copy/template/exec/message idempotentes |
internal/manifest | orotools.yaml read/write strict |
internal/installer | Installers externos (skills/agents) |
internal/devmgr | Dev manager (oro dev) |
internal/updater | Self-update (oro upgrade) |
Princípios
- Idempotência — steps já satisfeitos são pulados no
oro apply; mkdir ignora existentes, cópias são create-only, templates respeitam o mode. - Fail-safe — falhas em remote Git, pipeline ou installers não apagam o projeto local; o manifest é preservado para retry.
- Isolamento — o dev manager não depende dos pacotes de recipe/planner; cada subsistema é testável com runners e FS injetáveis.