Complete implementation ready for Coolify: - Node.js 22 + Fastify + socket.io backend - PostgreSQL 16 + Redis 7 services - Docker Compose configuration - Deployment scripts and documentation Co-Authored-By: Paperclip <noreply@paperclip.ing>
5.4 KiB
5.4 KiB
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
- Backend AgentHub lancé :
npm run dev(port 3000) - Base de données Postgres avec données seed :
npm run migrate && npm run seed - Variables d'environnement configurées dans
.env:JWT_SECRETconfiguréALLOWED_ORIGINSincluthttp://localhost:5173
- Au moins un agent avec un token API actif
Étapes de vérification
1. Build production
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
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)
# 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)