Traducido del original en chino. Si ambos difieren, el original prevalece.

Confer — arquitectura del sistema

Este documento describe la arquitectura objetivo, no lo que hay implementado hoy. La implementación actual es un gateway de un solo proceso y una sola instancia: la tabla de conexiones WebSocket, los nonces de protección contra reenvío de A2A y los contadores de limitación de tasa viven todos en la memoria del proceso del gateway (ws/handler.ts, lib/nonce-cache.ts, middleware/rate-limit.ts).

Por eso el gateway no puede correr con una segunda réplica. Añadir réplicas rompe en silencio la protección contra reenvío de A2A: cuando la petición reenviada cae en otra réplica, su tabla de nonces está vacía y la deja pasar. Además, las notificaciones por WS se pierden para los usuarios conectados a otra réplica, y el umbral de limitación se multiplica por el número de réplicas.

NATS y Redis, mencionados más abajo, son la solución prevista para escalar horizontalmente; hoy no están desplegados ni conectados a nada (se retiraron de docker-compose*.yml y de env.ts el 2026-08-07; hasta entonces eran contenedores girando en vacío y una variable de entorno que nadie leía). Si de verdad hace falta escalar horizontalmente, primero hay que mover ese estado en memoria a un almacén compartido, empezando por los nonces, que son lo crítico para la seguridad.

Arquitectura de alto nivel

┌────────────────────────────────────────────────────────────┐
│  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)

Principios de diseño

Fronteras entre servicios

1. Edge API Gateway

Véase docs/05-api.md.

2. Agent Runtime

Cada usuario tiene una instancia de Agente residente.

3. Conversation Hub

4. Identity & A2A Gateway

El diseño detallado del protocolo está en docs/03-protocol.md.

5. MCP / Tools Connector

Capa de datos

Componente Para qué Estado
PostgreSQL Usuarios, Agentes, conversaciones, mensajes, permisos, relaciones con peers (almacén principal) ✅ en uso
Qdrant RAG de la memoria a largo plazo del Agente, índice de las bases de conocimiento del usuario ✅ en uso
Compatible con S3 (MinIO) Almacenamiento de los archivos de las bases de conocimiento ✅ en uso
Redis Sesión, presencia, contadores de limitación, caché de datos calientes ⬜ no desplegado; solo hará falta al escalar horizontalmente
NATS Streams Difusión de mensajes (user.{uid}.events) + cola de tareas del Agent Runtime ⬜ no desplegado; solo hará falta al escalar horizontalmente

Arquitectura del cliente

Cobertura multiplataforma

Plataforma A través de
iOS Soporte iOS de Tauri 2.0
Android Soporte Android de Tauri 2.0
Windows Tauri 2.0
macOS Tauri 2.0
Linux Tauri 2.0

Un único código base, sin alternativas nativas.

Plugin de Claude Code

Véase docs/06-claude-code-plugin.md.

Arquitectura de despliegue

Instancia única (personas / equipos pequeños)

El docker-compose.prod.yml real (agent-runtime e identity son librerías dentro del gateway, no servicios propios):

  - gateway   (servicio Bun, una sola réplica — véase la nota inicial)
  - client    (frontend servido por nginx)
  - migrate   (tarea de una sola ejecución)
  - postgres
  - qdrant
  - minio

Despliegue: docker compose -f docker-compose.prod.yml up -d y ya funciona.

Instancia de empresa

Nube (la nube propia de Confer)

Condición previa: hoy el gateway es de una sola réplica (estado en el proceso). Antes de poner varias hay que mover la tabla de conexiones WS, los nonces de A2A y los contadores de limitación a un almacén compartido, o la protección contra reenvío falla en silencio.

Federación (entre instancias)

Cualquier instancia de Confer, autoalojada o en la nube, puede comunicarse con otras por el protocolo A2A.

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

Identidad y descubrimiento:

Observabilidad

Fronteras de seguridad

Decisiones técnicas clave

Decisión Elección Alternativas Motivo
Lenguaje del backend Bun + TypeScript Go Los SDK de MCP y A2A son TS primero; los tipos se comparten en toda la pila
Framework web Hono Elysia, Fastify Ligero, rápido, con un ecosistema estable
Cliente Tauri 2.0 Flutter, Electron Un código base para cinco plataformas, la seguridad de Rust, binarios pequeños
Almacén principal PostgreSQL 18 MySQL Buen soporte de JSON, muy extensible, pgvector como opción
Bus de mensajes NATS Kafka, Redis Pub/Sub Ligero, con persistencia y suscripción precisa
Base vectorial Qdrant Pinecone, pgvector Maduro para autoalojar, escrito en Rust, rendimiento estable
Identidad DID:web DID:key, solo OAuth Compatible con la infraestructura web existente, recomendado por NANDA
Protocolo A2A + MCP + AgentFacts Un protocolo propio Apostamos por el ecosistema de protocolos abiertos
← Volver a Confer A2A · DID:web · RFC 9421 · NANDA