18. Annexes Techniques

Cette section constitue la référence de bas niveau du framework ECHO v5 : spécifications réseau, schémas SQL complets, inventaire des volumes Docker, collections Qdrant et dictionnaire des valves de configuration.

Topologie Réseau (Domain-Driven IPAM) et Ports

ECHO orchestre un cluster de conteneurs sur deux réseaux Docker isolés (echo-network en 10.20.40.0/24 par défaut et echo-sandbox en 10.20.50.0/24 pour le Coding Worker), régis par stack-echo.yml et bunkerweb-stack.yml. Les briques Core utilisent la plage .100–.103 et les Workers ECHO calquent leur dernier octet IP sur le numéro de leur dossier source (.20–.30).

Service Conteneur IP (echo-network) Port interne Port hôte / Exposition
Open WebUI (Cortex)echo-open-webui.10080803000 (ou ui. via BunkerWeb)
SearXNGecho-searxng.1018080Interne uniquement
Watchtowerecho-watchtower.102-Interne uniquement
Qdrantecho-qdrant.1036333Interne uniquement
Admin Managerecho-admin-manager.2030013001 (ou am. via BunkerWeb)
Coding Worker (Sandbox)echo-coding-worker.21 (echo-sandbox)5000Interne (réseau echo-sandbox)
Browser Workerecho-browser-worker.225002Interne uniquement
MCP Brokerecho-mcp-broker.2380008000 (Interne au WAF)
ECHO Auth Manager (IdP)echo-auth-manager.248000Sous-domaine auth. via BunkerWeb
Download Brokerecho-download-broker.25DaemonInterne uniquement
N8N Worker (Headless)echo-n8n-worker.265003 (API) / 5678Interne uniquement
Embedding Workerecho-embedding.307997WAF (/ws/edge-embed)
Pont Audio In-Process (STT/TTS)In-process WebUI.1008080 (/echo/v1/audio)Interne (127.0.0.1:8080)
SSH Tunnel Auth PKCEIn-process WebUI.1008020–80248020–8024 (callback interne 8025–8034)
BunkerWeb (WAF)bunkerwebbw-universe (.2) / echo-network (.200)8080 / 844380 / 443 (WAN)

Volumes Docker

VolumePoint de montageContenu
echo-webui-data /app/backend/data webui.db, identity.db par utilisateur, bases SQLite de session (/users/{uid}/chats/{chat_id}/session.db), Codex Git (main/sandbox), Vault fichiers et cache .cache/pip.
echo-qdrant-data /qdrant/storage Index vectoriels Qdrant (echo_meta_artifacts, echo_session_rag).
echo-download-broker-data /app/downloads Drop-zone partagée entre Browser Worker, N8N Worker et Download Broker.
echo-n8n-data /home/node/.n8n (et /app/n8n-data sur Admin Manager) Base SQLite native (database.sqlite) et workflows persistants du moteur N8N.
echo-mcp-cache /app/mcp_cache Cache persistant des tokens OAuth2 MSAL Microsoft 365 (.microsoft_mcp_token_cache.json et empreinte MD5 .cred_hash) partagé entre echo-mcp-broker et echo-admin-manager.
echo-auth-data /app/auth-data Base SQLite auth.db (comptes Argon2, secrets TOTP et sessions SSO).
echo-embedding-cache /root/.cache/huggingface Poids GGUF F16 du modèle microsoft/Harrier-OSS-v1-0.6B.
echo-backups /backups (sur echo-admin-manager) Archives de sauvegarde tar.xz (5 volumes) générées par l'Admin Manager.
bw-data / bw-db-data /data (depuis /opt/ECHO/bunkerweb) et /var/lib/mysql (sur bw-db) Certificats Let's Encrypt, configurations WAF et base MariaDB 11.4.

Schéma SQL - identity.db

Base SQLite unique par utilisateur, stockée dans /app/backend/data/users/{uid}/identity.db. Gérée par EchoStateManager (instance identity_manager).

Table auth_data

CléTypeDescription
google_oauth2_access_tokenTEXTToken Bearer OAuth2 courant. Durée de vie : 3 300 s (55 min).
google_oauth2_refresh_tokenTEXTToken de rafraîchissement à longue durée de vie.
google_oauth2_last_refreshINTTimestamp Unix du dernier rafraîchissement de token.
google_user_emailTEXTAdresse e-mail du compte Google authentifié.
google_user_tierTEXTNiveau d'abonnement Google (ex. FREE, STANDARD).
google_project_idTEXTID du projet API Antigravity actif.
google_credits_totalTEXTCrédits AI disponibles (depuis paidTier.availableCredits).
google_g1_creditsTEXTCrédits Google One AI disponibles.
google_quota_summaryTEXT (JSON)Quotas glissants 5h et hebdomadaire sérialisés en JSON (depuis :retrieveUserQuotaSummary).
google_quota_by_modelTEXT (JSON)Dict {ca_model_id: quotaInfo}. Source du quota affiché dans le HUD.
google_quota_fractionTEXTFraction quota restante du modèle principal (0,0–1,0).
google_quota_resetTEXTHeure de reset du quota (ISO 8601).
google_quota_typeTEXTType de quota (ex. CODE_ASSIST).
google_quota_last_fetchINTTimestamp Unix du dernier appel fetch_available_models. Cooldown 10 min.
google_api_keyTEXTClé API AI Studio primaire (fallback OAuth2).
google_api_key_secondaryTEXTClé API AI Studio de secours.

Schéma SQL - session.db

Base SQLite par session de chat, stockée dans /app/backend/data/users/{uid}/chats/{chat_id}/session.db. Gérée par l'instance state_manager de EchoStateManager.

Table message_shadows

ColonneTypeDescription
message_idTEXT PKUUID du message fourni par Open WebUI (indexé également sur chat_id).
chat_idTEXT NOT NULLIdentifiant de la session de chat.
roleTEXT NOT NULLRôle de l'émetteur (user ou model).
full_parts_jsonTEXT (JSON)Structure Gemini complète des parts (texte, inlineData, functionCall, etc.).
updated_atINTVerrou de Version - timestamp physique de la dernière modification du message.
is_embeddedINT DEFAULT 0Flag booléen O(1) interrogé par conversation_rag_filter.py pour éviter toute réindexation redondante dans Qdrant.

Table suture_index

ColonneTypeDescription
cumulative_hashTEXT PKSHA-256 cumulatif - ADN de la conversation.
chat_idTEXT NOT NULLIdentifiant de la session (index idx_chat_id).
invariant_hashTEXT NOT NULLSHA-256 du contenu seul, indépendant de la position dans l'historique.
parent_hashTEXTHash cumulatif du tour précédent - forme la chaîne Merkle.
message_idTEXTRéférence vers message_shadows.
timestampINTTimestamp de scellement.

Table cognitive_signatures

ColonneTypeDescription
cumulative_hashTEXT PKLié au tour courant (chaîne Merkle).
thought_signatureTEXT NOT NULLThoughtSignature Gemini 3+ - jeton opaque cryptographique rattaché au premier functionCall.
message_idTEXTUUID du message (indexé par idx_sig_msg_id avec tri ORDER BY updated_at DESC LIMIT 1).
model_idTEXTIdentifiant du modèle ayant généré la pensée.
updated_atINTTimestamp de scellement.

Table tool_journal

ColonneTypeDescription
cumulative_hashTEXT PKLié au tour courant.
io_jsonTEXT (JSON)Appels d'outils (arguments) et sorties (réponses multipart). Journalisation traçable.
updated_atINTTimestamp de scellement.

Table echo_resources (Registre Unifié v8.0)

ColonneTypeDescription
idTEXT PKIdentifiant unique de la ressource ou de l'événement (aec_directive, aec_event).
nameTEXT NOT NULLNom du fichier, du plan, du workflow N8N ou de l'événement.
resource_typeTEXT NOT NULLType (codex, plan, media, binary, weburl, n8n_workflow, aec_directive, aec_event).
mime / statusTEXTType MIME et statut (put_in_context, vectorized_sum_up, indexed, pending_ingestion, etc.).
summary / storage_pathTEXTRésumé Smart Context ou message de directive AEC, et chemin physique dans le Vault/Codex.
item_typeTEXT DEFAULT 'file'Distinction file ou directory pour l'arborescence Codex Multi-Workspace.
created_at / updated_atINT NOT NULLHorodatages de création et de mise à jour (indexés).

Table echo_settings (Registre KV Unifié de Session)

ColonneTypeDescription
keyTEXT PKClé de réglage (last_model_id, turn_origin_model, last_framework_version, context_stats, compaction_state, aec_tier_*, model_policy).
valueTEXT NOT NULLValeur sérialisée (remplace les anciennes tables session_state et context_stats).
updated_atINT NOT NULLTimestamp de dernière mise à jour.

Tables Complémentaires (call_bridge, rich_payloads, codex_docs, cognitive_threads)

Collections Qdrant

CollectionConstanteDimensionsDistanceScopeDurée de vie
echo_meta_artifacts COLLECTION_META_ARTIFACTS 1024 (Harrier-OSS) Cosinus user_id Permanent - Consolidation Lvl1→Lvl2 & TTL par niveau (Admin Manager)
echo_session_rag COLLECTION_SESSION_RAG 1024 (Harrier-OSS) Cosinus user_id + chat_id + slug Session - purgé automatiquement en fin de session

Dictionnaire des Constantes & Valves Critiques (echo_constants.py)

Ces constantes et valves gouvernent les seuils d'ingestion, la résilience réseau et les rappels cognitifs au sein de la Stack ECHO.

Constante / ValveDéfautComposantImpact
MAX_DIRECT_TEXT_INJECT_SIZE32 KoIngestionPlafond d'injection directe en contexte pour les fichiers texte (au-delà : Smart Context RAG).
MAX_DIRECT_MMEDIA_INJECT_SIZE1 MoIngestionPlafond d'injection directe Base64 pour les fichiers multimédias et PDF.
ECHO_MAX_TOOL_TEXT_OUTPUT_CHARS131 KoAPI / SandboxPlafond anti-OOM de sortie textuelle pour api_client et worker_api.
ECHO_UCTP_CHUNK_SIZE256 KoUI EventsTaille de fragmentation des payloads JS transmis via le protocole UCTP.
ECHO_API_KEY_RETRIES2Client GeminiNombre d'échecs avant basculement vers la source d'authentification suivante.
ECHO_API_MAX_RETRIES5Client GeminiNombre maximum de tentatives par source.
ECHO_RETRY_BASE_DELAY3,0 sClient GeminiDélai de base du backoff exponentiel (compatible avec GUNICORN_TIMEOUT=120s).
ECHO_RETRY_MULTIPLIER1,5Client GeminiMultiplicateur du backoff exponentiel.
ECHO_RETRY_JITTER_MIN/MAX0,7 / 1,3Client GeminiPlage de jitter aléatoire pour éviter les tempêtes de retry.
AEC_REMINDERS22k / 34k / 55k / 88k / 120kEcho OrchestratorPaliers de tokens et outils déclenchant les rappels cognitifs multi-axes (efficiency, strategy, alignment, factuality, kernel, context_hygiene).
ECHO_COMPACTION_ENABLED_DEFAULTFalseCompactionÉtat par défaut de la valve d'auto-compaction contextuelle (ENABLE_AUTO_COMPACTION).
CONTEXT_COMPACTION_TRIGGER_RATIO0.45CompactionRatio de charge de ECHO_MAX_CONTEXT_SIZE (45 %) déclenchant le compactage contextuel in-place.
CONTEXT_COMPACTION_TARGET_RATIO0.25CompactionRatio cible de fenêtre récente conservée (25 %) après élagage et synthèse du Checkpoint.
ECHO_COMPACTION_MIN_TURNS_TO_KEEP2CompactionNombre minimal de tours complets récents préservés intacts lors du compactage.
ECHO_COMPACTION_MODELMODEL_APOLLOCompactionModèle cognitif sollicité par EchoCompactionEngine pour la consolidation téléscopique.
ECHO_COMPACTION_MAX_OUTPUT_TOKENS32768CompactionBudget maximal de tokens de sortie alloué à la génération du Checkpoint cognitif.
PKCE_CALLBACK_TIMEOUT300 sAuth PKCEDélai maximal accordé à l'utilisateur pour valider l'autorisation OAuth2.
GOOGLE_OAUTH_TOKEN_LIFETIME3 300 sAuth PKCEDurée proactive de rafraîchissement du token OAuth2 (55 min).
ECHO_AUDIO_DEFAULT_TTS_VOICEfr-FR-VivienneMultilingualNeuralPont AudioVoix neuronale multilingue par défaut de la synthèse vocale Edge TTS.
ECHO_AUDIO_DEFAULT_TTS_SPEED / PITCH1.0 / -2HzPont AudioVitesse d'élocution nominale et hauteur vocale feutrée par défaut.
ECHO_AUDIO_DEFAULT_STT_MODELMODEL_ZEPHYRPont AudioModèle cible pour la transcription vocale multimodale in-process.
ECHO_AUDIO_MAX_UPLOAD_SIZE14 MoPont AudioTaille binaire maximale acceptée par /echo/v1/audio/transcriptions.

Référence API - Classes Fondamentales

EchoStateManager - Méthodes principales

MéthodeSignatureDescription
get_message_shadow(message_id, updated_at) → list | NoneLit l'Ombre du message. Retourne None si absente ou si le Verrou de Version diffère.
save_message_shadow(message_id, chat_id, role, parts, updated_at)Scelle l'Ombre en base. Upsert idempotent.
is_message_embedded(message_id) → boolValidation O(1) en amont vérifiant le flag is_embedded dans message_shadows.
get_signature_by_id(message_id) → str | NoneLit la dernière thoughtSignature via ORDER BY updated_at DESC LIMIT 1.
index_suture(cumul, chat_id, inv, parent, message_id)Met à jour la chaîne Merkle dans suture_index.
save_session_setting(key, value, conn=None)Écrit dans le registre KV unifié echo_settings (supporte l'injection de connexion anti-deadlock).
get_auth_data / save_api_key(key_name, ...)Lecture et écriture clé-valeur dans auth_data (identity.db).

EchoGeminiClient - Méthodes principales

MéthodeDescription
call(model, payload, user_id, chat_id)Appel non-streamant gérant automatiquement le choix du backend (AI Studio / Code Assist) et le Circuit Breaker OAuth2.
call_distillation(prompt, __user__, __metadata__, is_json, max_tokens)Exécute une tâche de distillation via MODEL_DISTILLATION (gemini-3.5-flash-lite sur les deux backends, avec filtrage strict des blocs de pensée native thought).
generate_embedding(text, task_type, __user__, __metadata__)Vectorise un texte en 1024 floats via l'Edge Bridge WebGPU ou le fallback local microsoft/Harrier-OSS-v1-0.6B.
get_stealth_headers(url)Construit les en-têtes HTTP/2 haute fidélité (ECHO_STEALTH_USER_AGENT Chrome 123, Sec-Fetch-*).

Transport HTTP/2 et En-têtes Antigravity

EchoGeminiClient utilise httpx avec l'option http2=True (dépendance h2 obligatoire). Pour les requêtes vers l'API Code Assist, les en-têtes reproduisent l'identité de la plateforme Linux Docker émulée :

En-têtes - ECHO API Code Assist (Antigravity 2.24.0)
User-Agent: antigravity/hub/2.24.0 (os_type=linux; arch=amd64; cl=1000335682; auth_method=personal_consumer; proxy_client=antigravity/2.24.0)
x-goog-api-client: antigravity/2.24.0
Authorization: Bearer {oauth_token}
Content-Type: application/json

Réseau et Furtivité

Les requêtes web orchestrées par le Cortex s'appuient sur des connexions HTTP/2 strictes couplées à l'injection d'en-têtes de navigation haute fidélité (get_stealth_headers), simulant un navigateur réel lors des investigations agentiques.

← 17. Inférence Distante    19. Crédits →