Traduzido do original em chinês. Havendo divergência, o original prevalece.

Confer — arquitetura do sistema

Este documento descreve a arquitetura pretendida, não o que está implementado. A implementação atual é um gateway de processo único e instância única: a tabela de conexões WebSocket, os nonces de proteção contra repetição do A2A e os contadores de limitação de taxa vivem todos na memória do processo (ws/handler.ts, lib/nonce-cache.ts, middleware/rate-limit.ts).

Por isso o gateway não pode rodar com uma segunda réplica. Acrescentar réplicas quebra silenciosamente a proteção contra repetição do A2A: a requisição repetida cai em outra réplica, cuja tabela de nonces está vazia, e passa direto. Além disso, os avisos por WS não chegam aos usuários conectados em outra réplica, e o limite de taxa se multiplica pelo número de réplicas.

NATS e Redis, citados adiante, são a solução prevista para escalar horizontalmente; hoje não estão implantados nem ligados a nada (removidos de docker-compose*.yml e de env.ts em 2026-08-07; até então eram contêineres girando em vazio e uma variável de ambiente que ninguém lia). Para escalar horizontalmente de verdade, primeiro é preciso mover esses três estados em memória para um armazenamento compartilhado — os nonces em primeiro lugar, que são o ponto crítico de segurança.

Arquitetura em alto nível

┌────────────────────────────────────────────────────────────┐
│  Clients (Tauri 2.0)                                       │
│  iOS · Android · Windows · macOS · Linux                   │
└──────────────────────────┬─────────────────────────────────┘
                           │ WSS / HTTPS / SSE
                           ▼
┌────────────────────────────────────────────────────────────┐
│  Edge API Gateway  (Bun + Hono)                            │
│  Auth · Rate limit · Routing · WS fan-out                  │
└─────┬─────────────┬─────────────────┬────────────────┬─────┘
      │             │                 │                │
      ▼             ▼                 ▼                ▼
 ┌────────┐  ┌─────────────┐  ┌────────────┐  ┌──────────────┐
 │ Agent  │  │Conversation │  │ Identity & │  │ MCP / Tools  │
 │Runtime │  │     Hub     │  │A2A Gateway │  │  Connector   │
 └───┬────┘  └──────┬──────┘  └─────┬──────┘  └──────┬───────┘
     │              │               │                │
     ▼              ▼               ▼                ▼
┌──────────────────────────────────────────────────────────────┐
│  Data layer: PostgreSQL · Redis · NATS · Vector (Qdrant)·S3 │
└──────────────────────────────────────────────────────────────┘
       │                              │
       ▼                              ▼
 LLM providers              Other instances' Agents
 (Claude / GPT /            (federation via A2A
  DeepSeek / Qwen)           over HTTPS)

Princípios de projeto

Fronteiras entre serviços

1. Edge API Gateway

Ver docs/05-api.md.

2. Agent Runtime

Cada usuário tem uma instância de Agente residente.

3. Conversation Hub

4. Identity & A2A Gateway

O projeto detalhado do protocolo está em docs/03-protocol.md.

5. MCP / Tools Connector

Camada de dados

Componente Para quê Situação
PostgreSQL Usuários, Agentes, conversas, mensagens, permissões, relações com peers (armazenamento principal) ✅ em uso
Qdrant RAG da memória de longo prazo do Agente, índice das bases de conhecimento do usuário ✅ em uso
Compatível com S3 (MinIO) Armazenamento dos arquivos das bases de conhecimento ✅ em uso
Redis Sessão, presença, contadores de limitação, cache de dados quentes ⬜ não implantado; só será preciso ao escalar horizontalmente
NATS Streams Distribuição de mensagens (user.{uid}.events) + fila de tarefas do Agent Runtime ⬜ não implantado; só será preciso ao escalar horizontalmente

Arquitetura do cliente

Cobertura multiplataforma

Plataforma Por meio de
iOS Suporte a iOS do Tauri 2.0
Android Suporte a Android do Tauri 2.0
Windows Tauri 2.0
macOS Tauri 2.0
Linux Tauri 2.0

Um único código-base, sem alternativas nativas.

Plugin do Claude Code

Ver docs/06-claude-code-plugin.md.

Arquitetura de implantação

Instância única (pessoas / times pequenos)

O docker-compose.prod.yml real (agent-runtime e identity são bibliotecas dentro do gateway, não serviços próprios):

  - gateway   (serviço Bun, réplica única — ver a nota de abertura)
  - client    (frontend servido pelo nginx)
  - migrate   (tarefa de execução única)
  - postgres
  - qdrant
  - minio

Implantação: docker compose -f docker-compose.prod.yml up -d e já funciona.

Instância corporativa

Nuvem (a nuvem da própria Confer)

Pré-requisito: hoje o gateway é de réplica única (estado no processo). Antes de colocar várias, é preciso mover a tabela de conexões WS, os nonces do A2A e os contadores de limitação para um armazenamento compartilhado, ou a proteção contra repetição falha em silêncio.

Federação (entre instâncias)

Qualquer instância do Confer, auto-hospedada ou na nuvem, pode se comunicar com outras pelo protocolo A2A.

[acme.com]              [vendor-x.com]            [confer.cloud]
 Agent A    <─── A2A ───> Agent B    <─── A2A ───> Agent C

Identidade e descoberta:

Observabilidade

Fronteiras de segurança

Decisões técnicas centrais

Decisão Escolha Alternativas Motivo
Linguagem do backend Bun + TypeScript Go Os SDKs de MCP e A2A são TS primeiro; tipos compartilhados em toda a pilha
Framework web Hono Elysia, Fastify Leve, rápido, ecossistema estável
Cliente Tauri 2.0 Flutter, Electron Um código-base para cinco plataformas, a segurança do Rust, binários pequenos
Armazenamento principal PostgreSQL 18 MySQL Bom suporte a JSON, muito extensível, pgvector como opção
Barramento de mensagens NATS Kafka, Redis Pub/Sub Leve, com persistência e assinatura precisa
Banco vetorial Qdrant Pinecone, pgvector Maduro para auto-hospedagem, escrito em Rust, desempenho estável
Identidade DID:web DID:key, só OAuth Compatível com a infraestrutura web existente, recomendado pela NANDA
Protocolo A2A + MCP + AgentFacts Um protocolo próprio Apostamos no ecossistema de protocolos abertos
← Voltar ao Confer A2A · DID:web · RFC 9421 · NANDA