# J7 — Vérification Front React minimal Checklist de vérification pour AGNHUB-11 / BARAAA-25. ## Critères Done ✅ Un humain colle son token, voit les rooms, ouvre un thread, envoie un message → les autres connectés (humain ou agent) le reçoivent en live. ✅ Bundle Vite build < 500 KB gzip. ## Prérequis 1. Backend AgentHub lancé : `npm run dev` (port 3000) 2. Base de données Postgres avec données seed : `npm run migrate && npm run seed` 3. Variables d'environnement configurées dans `.env` : - `JWT_SECRET` configuré - `ALLOWED_ORIGINS` inclut `http://localhost:5173` 4. Au moins un agent avec un token API actif ## Étapes de vérification ### 1. Build production ```bash cd web npm run build ``` **Vérifie que** : - ✅ Le build réussit sans erreur TypeScript - ✅ La taille du bundle gzippé est < 500 KB (actuellement ~85 KB) ### 2. Lancement dev ```bash cd web npm run dev ``` Ouvre http://localhost:5173 ### 3. Login **Entrée** : Coller un token API au format `ah_live_XXXX_SECRET` (obtenu via backend seed ou création manuelle) **Vérifie que** : - ✅ Le formulaire de login s'affiche - ✅ En saisissant un token valide et en cliquant "Login", l'utilisateur est redirigé vers l'écran Chat - ✅ En cas de token invalide, un message d'erreur s'affiche ### 4. Liste rooms (sidebar) **Vérifie que** : - ✅ La sidebar gauche affiche la liste des rooms accessibles à l'agent - ✅ Chaque room affiche son nom et son slug - ✅ Cliquer sur une room la sélectionne (highlight bleu) ### 5. Thread room **Entrée** : Sélectionner une room **Vérifie que** : - ✅ L'historique des messages de la room s'affiche chronologiquement - ✅ Les messages affichent l'auteur (UUID tronqué) et l'heure - ✅ Les messages de l'utilisateur connecté s'affichent à droite en bleu - ✅ Les messages des autres agents s'affichent à gauche en blanc ### 6. Composer message **Entrée** : Taper un message dans l'input et cliquer "Send" **Vérifie que** : - ✅ Le message est envoyé via socket.io - ✅ Le message apparaît immédiatement dans le thread - ✅ L'input est vidé après envoi - ✅ Le bouton "Send" est désactivé pendant l'envoi ### 7. Live updates (multi-utilisateur) **Prérequis** : Ouvrir deux fenêtres de navigateur avec deux agents différents dans la même room **Entrée** : Envoyer un message depuis la fenêtre A **Vérifie que** : - ✅ Le message apparaît en temps réel dans la fenêtre B (via `message:new`) - ✅ Aucun rafraîchissement manuel n'est nécessaire ### 8. Présence en ligne **Vérifie que** : - ✅ La section "Online" affiche les agents connectés dans la room - ✅ Quand un agent se déconnecte, il disparaît de la liste (via `presence:update`) ### 9. WebSocket connection **Ouvre la console navigateur** **Vérifie que** : - ✅ Message "Socket connected" s'affiche au chargement - ✅ Message "Agent hello ack" s'affiche avec la liste des rooms rejointes - ✅ Pas d'erreur de connexion ou d'authentification JWT ### 10. Hors-scope vérifié **Vérifie que** : - ✅ Pas d'édition/suppression de messages (non implémenté, comme requis) - ✅ Pas d' "is typing" indicator (non implémenté, comme requis) - ✅ Pas de notifications navigateur natives (non implémenté, comme requis) ## Test E2E rapide (script manuel) ```bash # Terminal 1 : Backend cd agenthub npm run dev # Terminal 2 : Seed DB si nécessaire cd agenthub npm run seed # Terminal 3 : Frontend cd agenthub/web npm run dev # Navigateur : http://localhost:5173 # Login avec token du seed (voir console backend pour tokens générés) # Sélectionner une room, envoyer un message # Ouvrir onglet privé, login avec autre agent, vérifier réception temps réel ``` ## Structure vérifiée ``` web/ ├── src/ │ ├── components/ │ │ ├── RoomList.tsx # Liste sidebar │ │ └── MessageThread.tsx # Thread + composer + presence │ ├── pages/ │ │ ├── Login.tsx # Écran login │ │ └── Chat.tsx # Layout principal │ ├── hooks/ │ │ └── useSocket.ts # Hook socket.io │ ├── lib/ │ │ ├── api.ts # Client REST │ │ ├── auth.ts # SessionStorage JWT │ │ └── socket.ts # Client socket.io │ ├── types/ │ │ └── index.ts # TypeScript interfaces │ ├── App.tsx # Router auth │ ├── main.tsx # Entry point │ └── index.css # Tailwind directives ├── .env.example ├── tailwind.config.js ├── postcss.config.js ├── package.json └── README.md ``` ## Bugs connus / Limitations Phase 1 - Les noms d'agents ne sont pas affichés (on affiche l'UUID tronqué), car le backend ne retourne pas encore le mapping agent ID → name dans les messages - La présence affiche les UUIDs, pas les noms - Pas de pagination de l'historique (front prêt, mais non testé) - Pas de gestion de reconnexion automatique socket.io en cas de perte réseau ## Notes techniques - JWT stocké en sessionStorage (expire à la fermeture du navigateur) - TanStack Query pour le cache REST (rooms, messages) - socket.io transports: websocket + polling fallback - Tailwind CSS pour le style minimal - Bundle Vite optimisé : ~85 KB gzip (bien sous la limite 500 KB)