Aller au contenu principal

Architecture de la plateforme

Version anglaise : en/ARCHITECTURE.md. Architecture antérieure : overview.md, overview.html.

Chaque élément cite un chemin vérifié dans le dépôt. Le code du Control Plane est sous services/control-plane/src/eai/ (abrégé eai/).

Diagrammes​

Les dix plans (kit section 2.1)​

PlanCodeIntégrations et déploiement
Experienceportal/ (Next.js), navin-manager/ui/ (Vite)portal/src/locales, docs/
Platform Managementnavin-manager/server, agent-go, operator, catalog, packagingcatalog/components (ManagedComponent), release/
Identity/Governance/Policydomains/identity, authz, context, delegation, policies, approvals, governancedeploy/keycloak, deploy/spire, deploy/policies/opa, deploy/policies/openfga
Agent Executiondomains/agents, mcp, tools, sdks/python/src/enterprise_ai/loop et runtimeintegrations/nats.py, temporal.py, sandbox.py, deploy/apisix
Modeldomains/llm, finopsdeploy/litellm, integrations/litellm.py, vllm.py
Data/Privacydomains/knowledge, privacy, storage, lineage, retention ; sql/postgreseai/storage (S3, Azure, GCS), integrations/qdrant.py, presidio.py, docling.py, ocr.py
Multimodaldomains/multimodal, realtime ; media_worker.pydeploy/livekit, tools/multimodal
Observability/Audit/SOCeai/audit.py, domains/evidence, soc, incidents, observabilitydeploy/observability (opik, opensearch, jaeger, prometheus, alertmanager, otel-collector), deploy/runtime-security
Infrastructure/DevSecOpsdeploy/helm, gitops, argocd, cilium, keda, cert-manager, velero, terraform, policies/kyvernodeploy/ci, .forgejo/workflows/ci.yml, .gitlab-ci.yml
Commercialdomains/licensing, tools/license-issuerrelease/lock-manifest.json, release/sbom

Flux​

  1. Requête : client ou portail -> API Gateway APISIX (deploy/apisix) -> Control Plane (python -m eai.main) -> authentification (eai/auth.py), tenant tiré de l'identifiant d'accès, transaction db.tx(principal) sous RLS.
  2. Décision de politique : eai/policy.py et integrations/opa.py (OPA), require_relation via integrations/openfga.py ; puis /v1/delegations/authorize calcule l'intersection utilisateur, agent, délégation (domains/delegation/runtime.py). Défaut : refus.
  3. Modèle : Model Gateway /v1/gateway/* (domains/llm/gateway.py) -> LiteLLM -> vLLM local ou fournisseur approuvé ; quota réservé avant l'appel (domains/finops/reservation.py).
  4. Audit : chaque mutation écrit un événement chaîné (eai/audit.py), outbox et scellés (V150, V151), preuves (domains/evidence).
  5. Séparation des trois flux (kit section 11) : télémétrie OTel échantillonnable (eai/tracing.py, Opik, Jaeger, Prometheus) ; événements de sécurité security.* écrits dans leur propre transaction (eai/security, OpenSearch SIEM) ; audit critique non échantillonné dans PostgreSQL.
  6. Release : manifestes de catalog/components, release/lock-manifest.json, SBOM release/sbom (tools/components/sbom.sh), bundle hors ligne navin-manager/packaging/offline/build-bundle.py et verify-bundle.py, déploiement GitOps Argo CD (deploy/gitops/<env>).

Frontières de confiance​

  • Navigateur vers API : le frontend n'est jamais source d'autorisation, toutes les routes sont vérifiées au backend.
  • Tenant vers tenant : RLS forcée (ADR-0106).
  • Plateforme vers Internet : seul eai.security.egress sort (ADR-0121).
  • Manager vers hôtes : l'agent ouvre les connexions, mTLS + HMAC (ADR-0119).
  • Contenu non fiable (RAG, outils, MCP, mémoire) : détection d'injection et encapsulation.
  • Secrets : OpenBao ou coffre client, jamais dans le dépôt, les journaux ou les traces (ADR-0112).

Interdictions de conception (kit section 2.2) et leur mise en application​

InterdictionOù elle est appliquée
Builder drag-and-drop comme cœurdéveloppement code-first : SDK sdks/, CLI, packs packs/ ; le portail ne rend que des graphes de topologie (portal/tests/topology.test.ts)
Framework étranger imposé à NavinADR-0102, sdks/python/src/enterprise_ai/runtime/ (adaptateurs optionnels)
Appel LLM directADR-0104, domains/llm/gateway.py, domains/llm/embedder.py
Accès non contrôlé MCP, RAG, services sensiblesdomains/mcp, domains/knowledge/governance.py, eai/security/egress.py, tests/test_gateway_pep_untrusted.py
Credentials en dur ou token brutcredential_ref dans les manifestes, eai/secrets via domains/secrets, CI gitleaks (.forgejo/workflows/ci.yml)

Gestion des machines, HA, sauvegarde et PRA (addendum 20)​

Trois niveaux de contrôle : SSH pour l'installation initiale, agents et opérateur pour l'exploitation, contrôleurs HA, sauvegarde et PRA pour la continuité (diagrams/infrastructure-manager.html).

FonctionOù dans le dépôtDécision
Bootstrap SSH, préflight, enrôlement, commandes signéesnavin-manager/server/src/navin_manager/hosts, infrastructure, agentapiADR-0124
Node Agent Go (systemd)navin-manager/agent-goADR-0124, ADR-0119
Cluster Agent et Platform Operatornavin-manager/cluster-agent, navin-manager/operator, navin-manager/server/src/navin_manager/kubernetesADR-0124
Propriété, modes de déploiement, placementnavin-manager/server/src/navin_manager/availabilityADR-0125
Groupes HA, baux, fencing, tests de pannenavin-manager/server/src/navin_manager/availability, deploy/helm/enterprise-ai/values-ha.yamlADR-0126
Sauvegardes, restaurations, PRAnavin-manager/server/src/navin_manager/backup, recovery, deploy/veleroADR-0127
Moteur d'opérations du Manager (reprise, tentatives, retour arrière) à la place de Temporalnavin-manager/server/src/navin_manager/engineADR-0150
Matrice de compatibilité dans le catalogue signénavin-manager/catalog, navin-manager/server/src/navin_manager/services/upgrades.pyADR-0151
Pile frontend du portail (design system, client API généré, composants transversaux)portal/src/components, portal/src/libADR-0148
Espace Platform Manager du portail : sauvegarde et PRA, centre de configuration, liens profondsservices/control-plane/src/eai/domains/platform_manager, portal/src/screens/platform-manager.tsxADR-0162
Test dédié par écran du portail, atelier de pluginsportal/tests/screens-spaces.test.ts, portal/src/screens/studio.tsxADR-0163
Bibliothèque Navin (compétences, plugins, commandes, agents, préréglages MCP, canaux) activée par projet, règles de projetcatalog/navin, tools/navin_library/sync.py, services/control-plane/src/eai/domains/navin_library, navin-manager/server/src/navin_manager/api/mcp.pyADR-0164
Hébergement MCP dans le Navin Manager (service mcp-host) et isolation par projet de la passerelle MCPnavin-manager/mcp-host, navin-manager/catalog/services/mcp-host.yaml, services/control-plane/src/eai/domains/mcp/gateway.py, services/control-plane/src/eai/domains/mcp/hosted.pyADR-0165
Haute disponibilité déclarée par service dans le catalogue du Manager, contrôles d'installation HA, analyse obligatoire des fichiers par ClamAV et YARA-X avant toute ingestionnavin-manager/catalog/schema/service.schema.json, navin-manager/server/src/navin_manager/services/ha_checks.py, navin-manager/catalog/services/clamav.yaml, navin-manager/catalog/services/yara-x.yaml, services/control-plane/src/eai/domains/file_securityADR-0166
Runtime MCP : instances MCP isolées par tenant, projet et utilisateur sur le ToolHive Kubernetes Operator, créées à la demande et détruites après usageservices/control-plane/src/eai/domains/mcp_runtime, deploy/toolhive, deploy/policies/kyverno/mcp-runtime.yaml, deploy/cilium/mcp-runtime.yamlADR-0167
Aucun MCP en ligne, catalogue MCP de l'entreprise dans SeaweedFS, destruction dès la panne et réveil à l'appel, traçabilité par défaut du Runtime MCPservices/control-plane/src/eai/domains/mcp_runtime/service.py, services/control-plane/src/eai/domains/mcp_runtime/controller.py, services/control-plane/src/eai/domains/mcp_runtime/templates.py, services/control-plane/src/eai/domains/mcp/gateway.py, sql/postgres/V201__mcp_runtime_lifecycle.sqlADR-0170
Moteurs d'inférence locale vLLM et Ollama gérés derrière LiteLLMnavin-manager/catalog/services/vllm.yaml, navin-manager/catalog/services/ollama.yamlADR-0168
Retrait de Perses et d'Infisical OSS : tableaux de bord dans le Navin Manager et le portail, secrets dans OpenBao ou le coffre du client, packs sans tableaux de bordnavin-manager/server/src/navin_manager/services/dashboard.py, services/control-plane/src/eai/domains/platform_manager/config_center.py, sdks/python/src/enterprise_ai/packsADR-0169
Installation durcie pour la production bancaire : réseau isolé, Quadlet, profils de sécurité, Trusted Hub, rollbacknavin-manager/server/src/navin_manager/catalog/render.py, navin-manager/catalog/templates/_common/ADR-0171
Labellisation des données (Label Studio) et affinage des modèles (LLaMA-Factory) dans le catalogue, modèle exporté servi par vLLM derrière LiteLLMnavin-manager/catalog/services/label-studio.yaml, navin-manager/catalog/services/llama-factory.yamlADR-0172
Résumé borné des spans, objectifs SLO en base (eai.telemetry_spans, eai.service_slos)services/control-plane/src/eai/domains/observabilityADR-0157
Provenance SLSA, portes G6/G9, contenus de pack (eai.marketplace_assets), kill switch, supervision, import hors ligneservices/control-plane/src/eai/domains/marketplaceADR-0158
Pipeline unique de gestion du changement (eai.change_requests)services/control-plane/src/eai/domains/marketplace/changes.pyADR-0159
Hiérarchie du tenant (organisations, unités métier), champs communs stampés, identifiant runtime séparéservices/control-plane/src/eai/domains/tenancy, services/control-plane/src/eai/db.pyADR-0156
Index d'audit partitionné par event_time, clés de chaîne eai.audit_event_keys, vue eai.audit_indexsql/postgres/V186__audit_events_partitioned.sql, sql/postgres/V187__audit_index_view.sqlADR-0154
Plans du worker (audit, SOC, télémétrie), operation_id des opérations longues, compensation des actions externesservices/control-plane/src/eai/worker.py, services/control-plane/src/eai/domains/operationsADR-0155

L'état réel de chaque exigence (HOST, CLUS, HAVA, BACK, DR, INFUI, INFSDK) est dans ../implementation/STATUS.md.

Décisions​

Voir ADRs/ et ../implementation/DECISIONS.md.