Emo Online
Deploy Emo API
dd87944
|
Raw
History Blame Contribute Delete
5.69 kB

Émo — PRD

Pricing (final)

  • Gratuit : 10 messages / jour (reset à minuit UTC), illimité dans le temps
  • Lifetime : 20 € one-shot via Stripe → messages illimités
  • Admin lifetime auto : emails dans EMO_ADMIN_EMAILS env (CSV) — hugo@example.com + huglostalatac@gmail.com par défaut

Architecture

  • LLM : Claude Sonnet 4.5 (function calling) via Emergent LLM Key
  • Backend : FastAPI + Motor + Stripe + SSE + agent long-polling + BeautifulSoup pour web
  • Agent natif Go : 5 binaires cross-compilés + --install natif (registre Windows / LaunchAgent macOS / systemd user Linux)
  • Frontend : React 19 + Monaco + Tailwind + Shadcn

Tools de Claude

Locaux (via agent)

  • exec_shell, read_file, write_file, list_dir

Web (backend, pas besoin d'agent)

  • web_search(query, limit) — DuckDuckGo HTML, retourne title/url/snippet
  • web_fetch(url, max_chars) — texte propre + liens + URLs d'images

Itération 7 — Freeze fix + Tech-by-default + Mobile (Feb 2026)

  • BUG CRITIQUE FIXÉ : freeze d'Emo causé par stdout massif (dir /s sur tout un disque) qui saturait le SSE.
    • Backend agent_relay.py : truncation 64 KB max sur stdout/stderr/content (defense-in-depth, marche même avec vieux binaires agent)
    • Go agent main.go : truncation 64 KB côté agent (garde la fin où les erreurs sont)
    • Tous les binaires rebuild (5 plateformes) — l'utilisateur doit télécharger la nouvelle version
  • 4 modes retirés du header : plus de top-bar ModeSelector
  • Sélecteur de mode déplacé dans le composer (style DeepSeek) — bouton subtil avec icône + menu dropdown
  • Tech = défaut + intégré dans la persona de base : plus de mode "normal", Tech est toujours actif. Modes restants : Tech / Créatif / Brutal (Créatif et Brutal sont des overrides).
  • Persona : "Hugo" only (jamais "hugo catala"). Suppression des références spontanées à "je suis l'IA de Hugo / je viens de DeskBuddy" — Emo répond au sujet pas à son lore.
  • Debug console : admin only (UI cache le bouton Bug pour les non-admins)
  • Mobile responsive : hamburger menu + sidebar drawer + composer/header compacts
  • Light theme contrast : header utilise var(--emo-glass-bg), dropdown sidebar utilise var(--emo-surface)
  • Suppression de ModeSelector.jsx (obsolète)
  • Migration legacy : mode == "normal" en DB → traité comme "tech" côté backend

Itération 6 — Webhook Stripe + UI simplifiée (Feb 2026)

  • Webhook Stripe vérifié via curl simulation : checkout.session.completed avec client_reference_id → user.paid=true OK
  • Fix webhook bug : licenses.update_one ajouté upsert=True pour gérer les users qui paient avant d'avoir un doc license initialisé
  • Webhook fallback email : si client_reference_id absent, recherche par customer_email → user upgrade OK
  • UI custom simplifiée : suppression de density / reduce-motion / grain-toggle / accent colors
  • Thème dark/light/system : seul choix UI restant. Détection prefers-color-scheme pour "system", persistance localStorage + backend (theme_mode)
  • CSS light theme : palette claire avec glass-panels translucides white, grain réduit, gradients atténués
  • Téléchargement code source : déjà admin-only (403 pour non-admin, 200 + tarball pour admin) — confirmé
  • Logs webhook : warning si paiement sans user_id matchable

Itération 5 — Polish + Web tools

  • Quota daily 10 msg/jour (au lieu de trial 7j) — reset minuit UTC via daily_day field
  • Pill "X / 10 aujourd'hui" remplace l'ancien essai
  • Paywall réécrit pour "Quota du jour atteint"
  • Compte admin huglostalatac@gmail.com ajouté en lifetime auto
  • Web tools : web_search (DDG) + web_fetch (BS4) intégrés à Émo
  • Persona enrichi : Émo sait chercher modèles 3D (Sketchfab, OpenGameArt, free3d, Poly Haven), docs, code, etc.
  • UI customizable++ :
    • Densité de texte : Compact / Normal / Grand
    • Animations réduites (toggle)
    • Grain en fond (toggle)
    • Couleur d'accent (5 thèmes)
    • Instructions perso pour Émo
  • Fix download : passage de <a href download> à fetch + blob (résout les pbs cross-domain et download ignoré)
  • ToolCallCard supporte les nouveaux tools (icônes Search vert, Globe bleu) + résultats formatés (titres/URLs pour search, text+liens+images pour fetch)

Tests

  • 14/14 pytest backend ✅
  • Web search testé live : "pygame documentation" → 3 résultats valides incluant pygame.org
  • Web fetch testé live : titre + 25 liens extraits
  • Émo end-to-end : web_search "raylib official documentation" → synthèse propre avec vraies URLs
  • Admin lifetime auto : huglostalatac@gmail.com signup → status admin_grant, paid=true

Comptes

  • hugo@example.com / emo-test-2026 (admin lifetime)
  • huglostalatac@gmail.com / emo2026 (admin lifetime)
  • Tout autre signup → 10 msg/jour gratuits → paiement €20 → lifetime payé

Backlog

P1

  • Tool web_screenshot (capture visuelle de page) — nécessite Playwright headless
  • Installateur Windows graphique (.exe Inno Setup) avec UAC
  • macOS notarization + .dmg
  • Streaming live des sorties shell
  • Tool apply_diff + vue diff Monaco
  • Refactor server.py (>1200 lignes) en routers FastAPI (routes/auth.py, routes/chat.py, routes/admin.py, etc.)
  • Test paiement Stripe live de bout en bout (mode test puis mode live)

P2

  • Voice in/out (Whisper + TTS)
  • Bridge DeskBuddy (OLED SSD1306)
  • Ollama provider
  • CDN binaires
  • Multi-projets / workspaces