Skip to main content

Arquitetura

A Orquena começa como um monólito modular orientado a eventos, com processos separados apenas quando carga, segurança ou isolamento justificarem.
Esta página resume o desenho. Contratos versionados, ADRs e documentos específicos continuam sendo a autoridade para implementação.

Princípios obrigatórios

  • O Platform Kernel permanece neutro em relação aos domínios de negócio.
  • Cada registro tenant-owned pertence a uma Organization.
  • Conta, grupo ou seleção no frontend não provam autorização.
  • PostgreSQL é a fonte canônica do estado de negócio.
  • Providers são substituíveis e não definem regras de domínio.
  • Aplicações externas não compartilham o banco principal.
  • AI Runtime não acessa Prisma nem tabelas diretamente.
  • Mudanças de estado publicam eventos através de transactional outbox.
  • Trabalhos assíncronos são versionados, idempotentes, observáveis e limitados.
  • Realtime melhora a experiência, mas nunca é fonte da verdade.

Hierarquia principal

Cada loja operada separadamente é uma organização isolada. Uma organização irmã não recebe acesso implícito aos dados da outra.

Processos planejados

Os processos compartilham contratos públicos. Eles não atravessam limites importando implementações internas ou usando o banco como API improvisada.

Modularidade

Domínios dependem de contratos e capabilities. Um domínio não importa o SDK específico de um provider.

Fluxo de mensagem

A API confirma o webhook rapidamente. Geração de IA nunca bloqueia o recebimento do evento do provider.

Fluxo de agendamento

A proteção contra conflito ocorre na camada transacional. O modelo de linguagem não decide se um horário é válido.

Fluxo de IA

Cada execução registra:
  • Organização e identidade do agente.
  • Template, prompt e model versions.
  • Tool calls e referências de resultados.
  • Tokens, custo, duração e erros.
  • Decisões de política.
  • Handoff e aprovação.
  • Correlation e causation IDs.

Eventos e jobs

PostgreSQL e outbox fazem a transição durável entre uma transação e o processamento assíncrono. BullMQ sobre Valkey é o adapter inicial, atrás de contratos próprios. Cada job tenant-owned inclui:
  • Tipo e versão.
  • organizationId confiável.
  • Idempotency key.
  • Correlation e causation IDs.
  • Timeout.
  • Política de retry e backoff.
  • Limite de concorrência.
  • Dead-letter e replay auditado.
Nenhum worker possui um tenant global ativo. O contexto é criado e destruído para cada execução.

Dados e credenciais

  • PostgreSQL guarda estado de negócio e metadados canônicos.
  • Valkey guarda filas, cache e coordenação efêmera.
  • Object storage guarda mídia e documentos.
  • Credenciais são criptografadas e separadas de configuração comum.
  • Tokens de providers nunca aparecem em logs ou eventos de domínio.
  • Payloads externos permanecem dentro dos adapters.

Extensibilidade

Plugins declaram:
  • Identidade e versão.
  • Capabilities fornecidas e exigidas.
  • Permissions.
  • Configuração e credenciais.
  • Rotas e contribuições de UI.
  • Eventos, jobs e tools.
  • Compatibilidade e health checks.
A primeira implementação não executa pacotes arbitrários de terceiros dentro da API. Extensões externas exigem isolamento e contratos explícitos.

Implantação inicial

A topologia inicial será Docker Compose em VPS, com containers separados para processos e serviços stateful. A evolução para múltiplas máquinas, serviços gerenciados ou orquestração acontece somente com evidência de carga ou necessidade operacional. Separar deployment não muda automaticamente a propriedade dos domínios.

Documentos detalhados

Visão arquitetural

Contexto, camadas, processos e limites.

Multi-tenancy

Organizações, memberships e isolamento.

Monorepo

Estrutura e regras de dependência.

Specification Pack

Contratos aceitos antes do código.
Contratos canônicos adicionais:
  • docs/architecture/system-context-v1.md
  • docs/architecture/data-model-v1.md
  • docs/architecture/events-and-jobs-v1.md
  • docs/architecture/plugin-contracts-v1.md
  • docs/architecture/conversation-ai-control-v1.md