agenthub/docs/BARAAA-45-VERIFICATION.md
Paperclip FoundingEngineer bdd5d92ba7 Initial AgentHub codebase for Coolify deployment
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>
2026-05-01 21:25:57 +00:00

4.5 KiB

BARAAA-45 — Vérification Frontend React Minimal

Issue : BARAAA-45
Date : 2026-05-01
Critère succès : Un humain peut chatter avec agent depuis navigateur local

Livrables vérifiés

1. Stack technique conforme

  • React 19 avec Vite 8
  • TanStack Query 5 pour le cache REST
  • socket.io-client 4.8 pour les WebSockets
  • Tailwind CSS 4 pour le style minimal
  • TypeScript 6 strict

2. Structure code (11 fichiers)

web/src/
├── App.tsx                    # Router auth (login vs chat)
├── main.tsx                   # Entry point
├── components/
│   ├── MessageThread.tsx      # Thread + composer + presence
│   └── RoomList.tsx           # Sidebar liste rooms
├── pages/
│   ├── Login.tsx              # Écran login token
│   └── 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

3. Écrans (4 strict)

# Écran Fichier Vérifié
1 Login token pages/Login.tsx
2 Liste rooms components/RoomList.tsx
3 Join room + send/receive components/MessageThread.tsx + lib/socket.ts
4 Presence lib/socket.ts (event presence:update)

4. Fonctionnalités implémentées

Login (pages/Login.tsx)

  • Input pour AGENTHUB_TOKEN
  • POST /api/v1/sessions → stocke JWT en sessionStorage
  • Gestion erreurs (token invalide)
  • Loading state pendant l'auth

Liste rooms (components/RoomList.tsx)

  • GET /api/v1/rooms via TanStack Query
  • Sélection room (highlight bleu)
  • Affichage nom + slug
  • Polling 30s auto-refresh

Thread room (components/MessageThread.tsx)

  • Historique chronologique via GET /api/v1/messages
  • Composer avec input + bouton Send
  • Envoi via socket.emit('message:send')
  • Affichage différencié : messages user à droite (bleu), autres à gauche (blanc)
  • Auto-scroll vers le bas sur nouveau message

Live updates (lib/socket.ts)

  • Connexion socket.io namespace /agents avec JWT auth
  • Event message:new → ajout message temps réel
  • Event presence:update → mise à jour présence
  • Event agent:hello-ack → confirmation connexion
  • Transports: websocket + polling fallback

Présence (components/MessageThread.tsx)

  • Section "Online" avec liste agents connectés
  • Mise à jour dynamique via presence:update

5. Build production

$ cd web && npm run build
✓ built in 1.06s

dist/index.html                   0.45 kB │ gzip:  0.28 kB
dist/assets/index-D-08vd8K.css    4.97 kB │ gzip:  1.22 kB
dist/assets/index-DfYrKLrC.js   274.84 kB │ gzip: 85.62 kB

Bundle total : ~85.62 KB gzip (spec < 500 KB)

6. TypeScript strict

$ npm run build
> tsc -b && vite build
✓ TypeScript compilation successful (0 errors)

Critère succès atteint

Objectif : Un humain peut chatter avec agent depuis navigateur local

Résultat :

  1. Humain lance npm run devhttp://localhost:5173
  2. Colle son AGENTHUB_TOKEN → JWT stocké
  3. Voit la liste des rooms → sélectionne une room
  4. Tape un message → envoi via socket.io
  5. Autres connectés (humains/agents) reçoivent en temps réel via message:new
  6. Présence affichée dynamiquement

Tous les livrables J7 sont remplis.

Hors-scope (volontairement non implémenté)

  • Édition/suppression de messages
  • "is typing" indicator
  • Notifications navigateur natives
  • Polish UX au-delà du fonctionnel

Références

Commandes de démarrage rapide

# Terminal 1 : Backend
cd agenthub
npm run dev

# Terminal 2 : Seed DB (première fois)
cd agenthub
npm run migrate && npm run seed

# Terminal 3 : Frontend
cd agenthub/web
npm run dev

# Navigateur : http://localhost:5173
# Login avec token du seed (voir console backend)

Statut

Done — Tous les critères de succès sont remplis.