Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 78 additions & 82 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,114 +1,110 @@
# ─────────────────────────────────────────────────────────────────────────
# tab5-engine — Variables d'environnement
# Copier ce fichier en `.env` et renseigner les valeurs.
# NE JAMAIS committer le `.env` réel (il est dans .gitignore).
#
# Le moteur fonctionne avec UNE SEULE clé gratuite (GEMINI_API_KEY).
# Tout le reste est optionnel — les providers absents sont simplement
# désactivés et le moteur se dégrade gracieusement.
# Moteur Multi-Agents — Variables d'environnement (exemple)
# Copier en `.env` et renseigner. NE JAMAIS committer le `.env` réel.
# Liste dérivée du code réel (os.environ.get). Tout est OPTIONNEL sauf mention
# « REQUIS » : une clé de provider absente = ce provider est simplement désactivé.
# ─────────────────────────────────────────────────────────────────────────

# ════════════════════════════════════════════════════════════
# SECTION 1 — SÉCURITÉ (REQUIS)
# ════════════════════════════════════════════════════════════

# Clé Bearer pour authentifier les appels à l'API locale du moteur.
# Toutes les routes /api/* sont protégées par cette clé.
# Générer une valeur forte : python -c "import secrets; print(secrets.token_urlsafe(32))"
MOTEUR_API_KEY=changez-moi

# Origines CORS autorisées (séparées par des virgules).
# Laisser vide pour autoriser toutes les origines (mode développement uniquement).
# Ex. : http://localhost:8000,http://192.168.1.100:8000
# ── Sécurité API (REQUIS — auth appliquée depuis P0-1.1) ──
# Clé Bearer exigée par TOUTES les routes /api sensibles (Depends(require_auth)),
# montées avec auth fail-closed. Seuls les webhooks WhatsApp et les assets
# statiques restent publics. Tant que cette clé n'est pas définie, les routes
# protégées renvoient 503 (jamais d'accès libre).
# Générer une valeur forte, ex. : python -c "import secrets;print(secrets.token_urlsafe(32))"
MOTEUR_API_KEY=

# [T126] Chiffrement au repos de google_token.json (refresh_token OAuth Google
# permanent). Générer : python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Si absente, le token est écrit/lu en clair (comportement historique, dégradation
# gracieuse — voir tools/encrypt_google_token.py pour migrer un fichier existant).
MCP_TOKEN_KEY=

# [Audit 2026-07-09, #T206] Racine autorisée pour les outils write_file/read_file
# (tools/system.py). Par défaut : dossier PARENT de moteur_agents/ (ex. H:\AuxFilsDesIdees
# en dev, parent du dossier de déploiement en prod). Ne définir que si cette topologie
# ne correspond pas à votre déploiement (ex. Deck avec une racine de travail différente).
MOTEUR_WORKSPACE_ROOT=

# Origines CORS autorisées (séparées par des virgules). Si vide → CORS ouvert (*)
# SANS credentials. Renseigner pour activer les credentials de façon sûre.
# Ex. : http://${ENGINE_HOST:-192.168.1.x}:8000,http://localhost:8000,http://localhost:5173
MOTEUR_CORS_ORIGINS=

# ════════════════════════════════════════════════════════════
# SECTION 2 — PROVIDERS LLM
# (Chaque clé active le provider dans la cascade de routage)
# ════════════════════════════════════════════════════════════
# ── Plugins & Tool-Maker (exécution de code généré — fail-closed) ──
# Le chargement du code des plugins (plugins/*/agent.py) exécute du code.
# Désactivé par défaut. Mettre à 1 UNIQUEMENT si les plugins sont de confiance.
MOTEUR_ENABLE_PLUGINS=0
# Le ToolMakerAgent écrit du code généré par le LLM dans plugins/auto_generated/.
# Désactivé par défaut : tant que ce flag n'est pas à 1, les outils sont générés
# + validés en sandbox mais JAMAIS persistés. 1 pour autoriser l'auto-écriture.
MOTEUR_ENABLE_TOOL_MAKER=0

# ── Google Gemini (RECOMMANDÉ POUR DÉMARRER — GRATUIT) ──
# Obtenir une clé gratuite sur : https://aistudio.google.com/apikey
# Jusqu'à 5 clés pour la rotation automatique (contournement des quotas).
# Sert aussi aux embeddings RAG (gemini-embedding-004).
# ── Providers LLM (chaque clé active le provider dans la cascade Elo) ──
# Google Gemini — Free Tier (AI Studio). Jusqu'à 6 clés pour la rotation KeyPool
# (contournement des quotas). Sert AUSSI aux embeddings RAG (gemini-embedding).
GEMINI_API_KEY=
GEMINI_API_KEY_2=
GEMINI_API_KEY_3=
GEMINI_API_KEY_4=
GEMINI_API_KEY_5=

# Modèle Gemini par défaut (optionnel, ex: gemini-2.5-flash, gemini-2.0-flash)
GEMINI_MODEL=gemini-2.0-flash

# ── Google Gemini Payant (GCP/Vertex — optionnel) ──
# Débloque Search Grounding et quotas plus élevés.
GEMINI_API_KEY_6=
# Modèle Gemini par défaut (optionnel, ex: gemini-2.5-flash).
GEMINI_MODEL=
# Google Gemini — plan PAYANT (GCP/Vertex). Débloque Search Grounding + quotas élevés.
GEMINI_PAYANT_API_KEY=
# Projet GCP ciblé (ex: projects/123456789).
GEMINI_PROJECT_NAME=

# ── GitHub Models (GRATUIT avec un compte GitHub) ──
# Accès à GPT-4o, Llama 3.3 70B, etc. via : https://github.com/marketplace/models
GITHUB_TOKEN=

# ── DeepSeek (très bon rapport qualité/prix) ──
# https://platform.deepseek.com/
# Autres providers (tous optionnels).
DEEPSEEK_API_KEY=

# ── Anthropic Claude ──
# https://console.anthropic.com/
ANTHROPIC_API_KEY=

# ── Autres providers (tous optionnels) ──
MISTRAL_API_KEY=
COHERE_API_KEY=
CEREBRAS_API_KEY=
CEREBRAS_PAYANT_API_KEY=
OPENROUTER_API_KEY=
XAI_API_KEY=
MINIMAX_API_KEY=
DEEPINFRA_API_KEY=
GITHUB_TOKEN=
ZHIPU_API_KEY=

# ════════════════════════════════════════════════════════════
# SECTION 3 — HOME ASSISTANT (optionnel)
# ════════════════════════════════════════════════════════════

# URL de votre instance Home Assistant
HASS_URL=http://192.168.1.x:8123

# Token longue durée HA
# Profil HA → Sécurité → Jetons d'accès longue durée
# Alibaba Cloud Model Studio / DashScope (Coding Plan = préfixe sk-sp-)
# Endpoint Coding Plan (défaut intl). CN: https://coding.dashscope.aliyuncs.com/v1
# DASHSCOPE_BASE_URL=https://coding-intl.dashscope.aliyuncs.com/v1
DASHSCOPE_API_KEY=

# ── Sandbox distante ToolMaker (#T207) ──
# Fine-grained PAT dédié, limité à CE dépôt uniquement (Contents: read/write,
# Actions: read). NE PAS réutiliser GITHUB_TOKEN (clé LLM GitHub Models) ni un
# PAT existant plus large. Sans ce PAT, le ToolMaker rejette tout outil
# candidat (fail-closed, aucun repli vers une exécution locale).
MOTEUR_TOOLMAKER_PAT=
# Dépôt cible des branches éphémères toolmaker/validate-* (défaut ci-dessous).
MOTEUR_TOOLMAKER_REPO=Axellum/moteur_agents
# Délai max d'attente du verdict du runner (secondes, défaut 300).
MOTEUR_TOOLMAKER_TIMEOUT_S=300

# ── Home Assistant ──
# URL de l'instance HA (HASS_URL et HA_URL sont tous deux reconnus).
HASS_URL=http://${HA_HOST:-192.168.1.x}:8123
# Token longue durée HA (profil HA → Jetons d'accès). Requis pour la domotique.
HASS_TOKEN=

# Vérification TLS (true par défaut, mettre false si certificat auto-signé)
# ── TLS Home Assistant (P0-1.5) ──
# Vérification TLS sécurisée par défaut (true). HA en HTTPS auto-signé : définir
# soit HA_CA_BUNDLE (préféré, .pem/.crt du certif), soit HA_VERIFY_TLS=false.
HA_VERIFY_TLS=true
# Chemin vers le certificat CA si HTTPS auto-signé (préféré à HA_VERIFY_TLS=false)
# HA_CA_BUNDLE=/chemin/vers/ha_ca.pem
# Nom d'hôte à vérifier dans le certificat, quand HASS_URL vise une IP que le
# certificat ne couvre pas (certificat émis pour un nom DNS seulement). On joint
# alors l'IP locale — rapide, sans dépendance WAN — en validant chaîne ET nom.
# Doit correspondre au certificat réellement servi, sinon la connexion est rejetée.
# HA_TLS_SERVER_HOSTNAME=mon-domaine.example.fr

# ════════════════════════════════════════════════════════════
# SECTION 4 — FONCTIONNALITÉS AVANCÉES (optionnel)
# ════════════════════════════════════════════════════════════

# ── Plugins et Tool-Maker (DÉSACTIVÉS par défaut — sécurité) ──
# Les plugins exécutent du code Python — n'activer que si les sources sont de confiance.
MOTEUR_ENABLE_PLUGINS=0
# Le ToolMakerAgent génère des outils Python automatiquement.
# Activer à 1 pour autoriser la persistance du code généré dans plugins/auto_generated/
MOTEUR_ENABLE_TOOL_MAKER=0

# ── WhatsApp (Meta Cloud API ou Twilio — optionnel) ──
WHATSAPP_WEBHOOK_VERIFY_TOKEN=
WHATSAPP_USER_PHONE_NUMBER=
META_WHATSAPP_ACCESS_TOKEN=
META_WHATSAPP_PHONE_NUMBER_ID=
TWILIO_ACCOUNT_SID=
TWILIO_AUTH_TOKEN=
TWILIO_PHONE_NUMBER=

# ── Observabilité Langfuse (optionnel) ──
# https://langfuse.com/ — tracing des appels LLM
# ── Observabilité (Langfuse — optionnel) ──
LANGFUSE_PUBLIC_KEY=
LANGFUSE_SECRET_KEY=
LANGFUSE_HOST=https://cloud.langfuse.com
LANGFUSE_HOST=

# ── Divers ──
# Taux de conversion EUR→USD pour l'affichage des coûts (ex: 1.08)
EUR_USD_RATE=1.08
# Taux de conversion EUR→USD pour l'affichage des coûts GCP (ex: 1.08).
EUR_USD_RATE=
Loading
Loading