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>
172 lines
5.4 KiB
Markdown
172 lines
5.4 KiB
Markdown
# 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)
|