Traduit de l'original chinois. En cas de divergence, l'original fait foi.

Confer — architecture du système

Ce document décrit l’architecture visée, pas l’état de l’implémentation. Aujourd’hui le gateway tourne en un seul processus, une seule instance : la table des connexions WebSocket, les nonces de protection anti-rejeu A2A et les compteurs de limitation de débit vivent tous dans la mémoire du processus (ws/handler.ts, lib/nonce-cache.ts, middleware/rate-limit.ts).

Le gateway ne peut donc pas tourner en deuxième réplique. Ajouter des répliques casse silencieusement la protection anti-rejeu A2A : la requête rejouée tombe sur une autre réplique dont la table de nonces est vide, et passe. Les notifications WS manquent les utilisateurs connectés à une autre réplique, et le seuil de limitation se multiplie par le nombre de répliques.

NATS et Redis, cités plus bas, sont la solution prévue pour la mise à l’échelle horizontale ; ils ne sont aujourd’hui ni déployés ni raccordés (retirés de docker-compose*.yml et de env.ts le 2026-08-07 ; jusque-là, des conteneurs qui tournaient à vide et une variable d’environnement que personne ne lisait). Pour passer réellement à l’échelle horizontale, il faut d’abord déplacer ces trois états en mémoire vers un stockage partagé — les nonces d’abord, ils sont critiques pour la sécurité.

Vue d’ensemble

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

Principes de conception

Frontières entre services

1. Edge API Gateway

Voir docs/05-api.md.

2. Agent Runtime

À chaque utilisateur correspond une instance d’Agent résidente.

3. Conversation Hub

4. Identity & A2A Gateway

La conception détaillée du protocole se trouve dans docs/03-protocol.md.

5. MCP / Tools Connector

Couche de données

Composant Usage État
PostgreSQL Utilisateurs, Agents, conversations, messages, permissions, relations avec les pairs (stockage principal) ✅ en service
Qdrant RAG de la mémoire longue de l’Agent, index des bases de connaissances de l’utilisateur ✅ en service
Compatible S3 (MinIO) Stockage des fichiers des bases de connaissances ✅ en service
Redis Session, présence, compteurs de limitation, cache des données chaudes ⬜ non déployé, utile seulement à la mise à l’échelle horizontale
NATS Streams Diffusion des messages (user.{uid}.events) + file de tâches de l’Agent Runtime ⬜ non déployé, utile seulement à la mise à l’échelle horizontale

Architecture du client

Couverture multiplateforme

Plateforme Par
iOS Prise en charge iOS de Tauri 2.0
Android Prise en charge Android de Tauri 2.0
Windows Tauri 2.0
macOS Tauri 2.0
Linux Tauri 2.0

Une seule base de code, aucune solution de repli native.

Plugin Claude Code

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

Architecture de déploiement

Instance unique (particuliers / petites équipes)

Le docker-compose.prod.yml réel (agent-runtime et identity sont des bibliothèques internes au gateway, pas des services) :

  - gateway   (service Bun, réplique unique — voir la note en tête)
  - client    (frontend servi par nginx)
  - migrate   (tâche unique)
  - postgres
  - qdrant
  - minio

Déploiement : docker compose -f docker-compose.prod.yml up -d et c’est utilisable.

Instance d’entreprise

Cloud (le cloud de Confer)

Condition préalable : le gateway est aujourd’hui en réplique unique (état dans le processus). Avant d’en mettre plusieurs, il faut déplacer la table des connexions WS, les nonces A2A et les compteurs de limitation vers un stockage partagé, sans quoi la protection anti-rejeu tombe en silence.

Fédération (entre instances)

N’importe quelle instance de Confer, auto-hébergée ou dans le cloud, peut dialoguer avec d’autres via le protocole A2A.

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

Identité et découverte :

Observabilité

Frontières de sécurité

Décisions techniques structurantes

Décision Choix Alternatives Raison
Langage du backend Bun + TypeScript Go Les SDK MCP et A2A sont TS d’abord ; types partagés sur toute la pile
Framework web Hono Elysia, Fastify Léger, rapide, écosystème stable
Client Tauri 2.0 Flutter, Electron Une base de code pour cinq plateformes, la sûreté de Rust, des binaires légers
Stockage principal PostgreSQL 18 MySQL Bon support de JSON, très extensible, pgvector en option
Bus de messages NATS Kafka, Redis Pub/Sub Léger, persistant, abonnement précis
Base vectorielle Qdrant Pinecone, pgvector Mature en auto-hébergement, écrit en Rust, performances stables
Identité DID:web DID:key, OAuth seul Compatible avec l’infrastructure web existante, recommandé par NANDA
Protocole A2A + MCP + AgentFacts Un protocole maison Nous parions sur l’écosystème des protocoles ouverts
← Retour à Confer A2A · DID:web · RFC 9421 · NANDA