# Omniloq — Contexte projet ## Identité - **Nom** : Omniloq (omni + loqui = « qui parle sur tous les canaux ») - **Domaine** : `omniloq.com` (acheté 22 sept 2026, registrar Spaceship, NS launch1/launch2.spaceship.net) - **`.ai`** : libre aussi (à réserver plus tard pour protéger la marque) ## Vision SaaS d'agents IA conversationnels **multi-canal** et **multi-tenant**. Le **cœur** = un runtime d'agent. Les **canaux** = des adaptateurs branchables (pas le cœur). ## Canaux (dans l'ordre d'arrivée prévu) 1. WhatsApp (Meta Cloud API — on a déjà le bridge + la référence Nchargi en prod) 2. Telegram 3. Widget web 4. (SMS, autres — plus tard) ## Décisions techniques (validées 22 sept 2026) - **Runtime d'agent** : Vercel AI SDK 7 (`ai@7.x` + `@ai-sdk/mcp@2.x`) — multi-provider (DeepSeek, OpenAI, Gemini, Claude) - **État** : Prisma + PostgreSQL (tenant / agent / channel_account / conversation / message / mcp_server / secret / variable) - **HTTP** : Fastify (choisi — optimal + plugin system) - **Monorepo** : pnpm workspaces + Turborepo (1 seul dépôt git) - **Tests/logs/validation** : Vitest / Pino / Zod - **Langage** : TypeScript / Node 22 - **Cible** : international dès le départ - **Canaux MVP** : WhatsApp (Meta + Bird + Gupshup) + Telegram + Widget Web (JS embarquable) ## Principe structurant Interface `Channel` avec un format d'événement normalisé. Ajouter un canal = implémenter l'interface, ZÉRO changement au runtime. ## Legacy archivé - `wa-saas` (whatsapp-web.js / containers) → `/root/projects/_archive/wa-saas-2026-09-22.tar.gz`. Ne plus utiliser. ## Statut - [x] Valider stack → Fastify + AI SDK 7 + Prisma + monorepo pnpm/Turbo - [x] Valider canaux → 3 providers WA + Telegram + widget web - [x] Valider cible → international - [x] Valider repo → monorepo - [x] Écrire ARCHITECTURE.md (couches, interface Channel, schéma Prisma, garde-fous, plan phasé) - [x] Nettoyage disque serveur (22 Go libérés, 100% → 71%) - [ ] Phase 0 — spike de preuve (AI SDK + MCP nchargi vs Dify) ## Serveur — état disque (22 sept 2026) - Nettoyage fait : logs Docker (19 Go supabase_analytics) + npm cache + pm2 flush + syslog → **22 Go libérés**. - Rotation Docker configurée : `/etc/docker/daemon.json` → `max-size=10m, max-file=3` (plus jamais de log géant). - ⚠️ `supabase_auth_startdpp` en crash-loop (pré-existant, non bloquant — logs désormais plafonnés à 30 Mo). - `/root/projects` = 9,6 Go (code) ; `.gradle` 2,1 Go, `.npm` vidé, `.codex` 320 Mo — cibles Tier 3 si besoin plus tard.