478 lines
15 KiB
Markdown
478 lines
15 KiB
Markdown
<!--
|
|
Created by: Claude
|
|
Date: 2026-01-01
|
|
Purpose: Fichier de suivi du développement Mesh avec cases à cocher
|
|
Refs: CLAUDE.md
|
|
-->
|
|
|
|
# Suivi du Développement Mesh
|
|
|
|
Ce fichier suit l'avancement du développement du projet Mesh par composant et fonctionnalité.
|
|
|
|
## Légende
|
|
- ✅ Terminé et testé
|
|
- 🚧 En cours
|
|
- ⏸️ En pause
|
|
- ❌ Bloqué
|
|
- ⬜ Pas commencé
|
|
|
|
---
|
|
|
|
## Phase 1 : Infrastructure & Squelette (MVP)
|
|
|
|
### 1.1 Serveur (Python FastAPI)
|
|
|
|
#### Configuration & Base
|
|
- ✅ Structure du projet créée
|
|
- ✅ Configuration avec pydantic-settings
|
|
- ✅ Variables d'environnement (.env)
|
|
- ✅ Point d'entrée FastAPI
|
|
- ✅ Health check endpoint
|
|
- ✅ Logging de base configuré
|
|
- ✅ CORS middleware
|
|
- ⬜ Logging structuré avancé (tracing)
|
|
- ⬜ Gestion d'erreurs centralisée
|
|
|
|
#### Base de données
|
|
- ✅ Modèles SQLAlchemy (User, Device, Room, RoomMember, Message, P2PSession)
|
|
- ✅ Configuration Alembic
|
|
- ✅ Session management (get_db dependency)
|
|
- ✅ Auto-création des tables (dev mode)
|
|
- ⬜ Migrations Alembic générées
|
|
- ⬜ Repository pattern (optionnel)
|
|
|
|
#### Authentification
|
|
- ✅ Génération JWT (access token)
|
|
- ✅ Hash de mots de passe (bcrypt)
|
|
- ✅ Endpoint `/api/auth/login`
|
|
- ✅ Endpoint `/api/auth/register`
|
|
- ✅ Endpoint `/api/auth/me`
|
|
- ✅ Middleware d'authentification (get_current_user)
|
|
- ✅ Validation JWT sur WebSocket
|
|
- ⬜ Refresh token (V1+)
|
|
- ⬜ Révocation de tokens (V1+)
|
|
|
|
#### Capability Tokens
|
|
- ✅ Génération de capability tokens JWT
|
|
- ✅ Validation de capability tokens
|
|
- ✅ Types de capabilities (call, screen, share:file, terminal:view, terminal:control)
|
|
- ✅ TTL court (60-180s, configurable)
|
|
- ✅ Endpoint `/api/auth/capability`
|
|
- 🚧 Validation dans handlers WebRTC/P2P
|
|
|
|
#### WebSocket
|
|
- ✅ Connection manager avec mapping peer_id → WebSocket
|
|
- ✅ Mapping peer_id → user_id
|
|
- ✅ Mapping room_id → Set[peer_id]
|
|
- ✅ Event router
|
|
- ✅ Handlers pour events système (hello, welcome)
|
|
- ✅ Handlers pour rooms (join, left)
|
|
- ✅ Handlers pour chat (message.send, message.created)
|
|
- ✅ Handlers pour WebRTC signaling (offer, answer, ice) - relay basique
|
|
- ✅ Gestion de déconnexions
|
|
- ✅ Broadcast to room
|
|
- ✅ Personal message
|
|
- 🚧 Handlers pour P2P sessions (request, created) - structure prête
|
|
- ⬜ Handlers pour terminal control (take, granted, release)
|
|
- ⬜ Heartbeat / ping-pong
|
|
- ⬜ Validation capability tokens dans RTC handlers
|
|
|
|
#### Rooms & ACL
|
|
- ✅ Création de rooms (POST /api/rooms/)
|
|
- ✅ Liste des rooms (GET /api/rooms/)
|
|
- ✅ Détails d'une room (GET /api/rooms/{id})
|
|
- ✅ Liste des membres (GET /api/rooms/{id}/members)
|
|
- ✅ Rôles (OWNER, MEMBER, GUEST) dans enum
|
|
- ✅ ACL enforcement dans WebSocket (room.join)
|
|
- ✅ Présence (ONLINE, BUSY, OFFLINE) dans enum
|
|
- 🚧 Mise à jour de présence automatique
|
|
- ⬜ Ajout/suppression de membres (endpoints)
|
|
- ⬜ Invitation à une room
|
|
- ⬜ Quitter une room (endpoint)
|
|
|
|
#### Signalisation WebRTC
|
|
- ✅ Relay SDP offers (rtc.offer)
|
|
- ✅ Relay SDP answers (rtc.answer)
|
|
- ✅ Relay ICE candidates (rtc.ice)
|
|
- ✅ Structure pour target_peer_id
|
|
- 🚧 Validation des capability tokens (TODO dans code)
|
|
|
|
#### Orchestration P2P (QUIC)
|
|
- ✅ Endpoint POST /api/p2p/session
|
|
- ✅ Handler p2p.session.request
|
|
- ✅ Création de sessions P2P
|
|
- ✅ Distribution des endpoints QUIC
|
|
- ✅ Génération de session tokens (JWT, 180s TTL)
|
|
- ✅ Suivi des sessions actives (GET /api/p2p/sessions)
|
|
- ✅ Fermeture de sessions (DELETE /api/p2p/session/{id})
|
|
- ✅ Émission p2p.session.created
|
|
|
|
#### Notifications Gotify
|
|
- ✅ Client Gotify créé (notifications/gotify.py)
|
|
- ✅ Configuration via variables d'environnement (GOTIFY_URL, GOTIFY_TOKEN)
|
|
- ✅ Envoi notifications chat (utilisateurs absents uniquement)
|
|
- ✅ Envoi notifications appels WebRTC (utilisateurs absents)
|
|
- ✅ Niveaux de priorité (chat=6, appels=8, fichiers=5)
|
|
- ✅ Deep linking avec URL scheme (mesh://room/{id})
|
|
- ✅ Gestion d'erreurs robuste (fail gracefully)
|
|
- ✅ Tests validés avec serveur Gotify réel
|
|
- ✅ Documentation complète (GOTIFY_INTEGRATION.md)
|
|
- ⬜ Notifications partage de fichiers (quand Agent Rust implémenté)
|
|
- ⬜ Configuration par utilisateur (préférences notifications)
|
|
- ⬜ Queue + retry si Gotify down
|
|
|
|
#### Tests
|
|
- ✅ Script de test interactif (test_api.py)
|
|
- ✅ Tests manuels API REST réussis
|
|
- ✅ Docker testé et fonctionnel
|
|
- ⬜ Tests unitaires (JWT, capabilities)
|
|
- ⬜ Tests d'intégration (WebSocket flows)
|
|
- ⬜ Tests E2E (user journey)
|
|
- ⬜ Coverage > 80%
|
|
|
|
---
|
|
|
|
### 1.2 Client Web (React/TypeScript)
|
|
|
|
#### Configuration & Base
|
|
- ✅ Structure du projet créée (Vite + React)
|
|
- ✅ Thème Monokai dark
|
|
- ✅ Routing (react-router-dom)
|
|
- ✅ State management (zustand)
|
|
- ✅ Query client (TanStack Query)
|
|
- ✅ Environment variables (.env.example)
|
|
|
|
#### Pages
|
|
- ✅ Page Login fonctionnelle (login/register)
|
|
- ✅ Page Home avec liste des rooms
|
|
- ✅ Page Room avec chat fonctionnel
|
|
- ⬜ Page Settings
|
|
|
|
#### Composants UI
|
|
- ✅ Composant Chat intégré (messages, input, scroll auto)
|
|
- ✅ Composant Participants (liste, statuts, présence)
|
|
- ✅ Composant VideoGrid (local/remote streams, grille responsive)
|
|
- ✅ Composant MediaControls (mute, camera, share)
|
|
- ⬜ Composant Notifications (toast)
|
|
- ⬜ Composant Modal
|
|
|
|
#### Authentification
|
|
- ✅ Formulaire login
|
|
- ✅ Formulaire register
|
|
- ✅ Auth store (user, token) avec persistance
|
|
- ✅ Protected routes
|
|
- ✅ Auto-logout sur token expiré (intercepteur 401)
|
|
- ✅ Service API avec axios
|
|
|
|
#### WebSocket Integration
|
|
- ✅ WebSocket client (hook useWebSocket)
|
|
- ✅ Connexion automatique après login
|
|
- ✅ Event handlers (room.joined, chat.message.created, etc.)
|
|
- ✅ Reconnexion automatique (5 tentatives)
|
|
- ✅ Hook useRoomWebSocket intégré
|
|
- ⬜ Event queue pendant déconnexion
|
|
|
|
#### Chat
|
|
- ✅ Affichage des messages
|
|
- ✅ Envoi de messages
|
|
- ✅ Scroll automatique vers le bas
|
|
- ✅ Distinction messages propres/autres
|
|
- ✅ Timestamps et auteurs
|
|
- ⬜ Indicateurs de typing (V1+)
|
|
- ⬜ Historique des messages persisté (V1+)
|
|
|
|
#### WebRTC (Audio/Video/Screen)
|
|
- ✅ Hook useWebRTC avec offer/answer/ICE
|
|
- ✅ Gestion des media streams (getUserMedia)
|
|
- ✅ Création de peer connections (RTCPeerConnection)
|
|
- ✅ Signaling via WebSocket (intégré useRoomWebSocket)
|
|
- ✅ ICE candidate handling automatique
|
|
- ✅ Affichage des streams (local + remote dans VideoGrid)
|
|
- ✅ Screen sharing (getDisplayMedia)
|
|
- ✅ Controls (mute, camera on/off, screen share)
|
|
- ✅ Automatic offer creation when peers join
|
|
- ⬜ Diagnostics ICE (connexion type)
|
|
- ⬜ TURN fallback configuration UI
|
|
|
|
#### Stores
|
|
- ✅ authStore (user, token, login, logout, persistance)
|
|
- ✅ roomStore (currentRoom, membres, messages, cache)
|
|
- ✅ webrtcStore (peer connections, streams, media state)
|
|
- ⬜ notificationStore
|
|
|
|
#### Services & Hooks
|
|
- ✅ service/api.ts - Client API REST complet
|
|
- ✅ hooks/useWebSocket - WebSocket avec reconnexion
|
|
- ✅ hooks/useRoomWebSocket - WebSocket + intégration store + WebRTC signaling
|
|
- ✅ hooks/useWebRTC - WebRTC complet (offer/answer/ICE)
|
|
|
|
#### Tests
|
|
- ⬜ Tests unitaires (components, hooks)
|
|
- ⬜ Tests d'intégration (WebSocket, WebRTC)
|
|
- ⬜ Tests E2E (Playwright/Cypress)
|
|
|
|
---
|
|
|
|
### 1.3 Agent Desktop (Rust)
|
|
|
|
#### Configuration & Base
|
|
- ✅ Structure du projet créée (Cargo)
|
|
- ✅ Configuration (config.toml)
|
|
- ✅ Logging (tracing)
|
|
- ✅ Module config
|
|
- ⬜ Auto-start au démarrage OS (V1+)
|
|
- ⬜ System tray icon (V1+)
|
|
|
|
#### Communication Serveur
|
|
- ✅ Module mesh/types (event definitions)
|
|
- ✅ Module mesh/rest (client HTTP)
|
|
- ✅ Module mesh/ws (client WebSocket complet)
|
|
- ✅ Module mesh/handlers (SystemHandler, RoomHandler, P2PHandler)
|
|
- ✅ Module mesh/router (EventRouter avec dispatch par préfixe)
|
|
- ✅ Connexion WebSocket au démarrage
|
|
- ✅ Event loop avec tokio::select!
|
|
- ✅ Event routing (system.*, room.*, p2p.*)
|
|
- ✅ Event handlers complets (p2p.session.created, system.hello, etc.)
|
|
- ✅ Cache session tokens (HashMap avec TTL)
|
|
- ⬜ Reconnexion automatique (V1+)
|
|
- ⬜ Heartbeat (V1+)
|
|
|
|
#### QUIC P2P
|
|
- ✅ Module p2p/endpoint (complet avec accept_loop)
|
|
- ✅ Module p2p/protocol (message types complets)
|
|
- ✅ Module p2p/tls (self-signed certs, SkipServerVerification)
|
|
- ✅ Module p2p/session (QuicSession wrapper)
|
|
- ✅ Configuration quinn endpoint (Server + Client)
|
|
- ✅ Génération de certificats auto-signés (rcgen)
|
|
- ✅ Handshake P2P_HELLO (validation token + TTL)
|
|
- ✅ Validation de session tokens (cache local HashMap)
|
|
- ✅ Accept loop (connexions entrantes async)
|
|
- ✅ Connect to peer (connexions sortantes)
|
|
- ✅ Multiplexing de streams (open_bi/accept_bi)
|
|
- ✅ Gestion d'erreurs QUIC (Result<T, E> partout)
|
|
|
|
#### Partage de Fichiers
|
|
- ✅ Module share/file_send (complet - FileSender)
|
|
- ✅ Module share/file_recv (complet - FileReceiver)
|
|
- ✅ Calcul de hash Blake3 (full file avant envoi)
|
|
- ✅ Envoi de FILE_META (name, size, hash)
|
|
- ✅ Chunking 256KB chunks
|
|
- ✅ Envoi de FILE_CHUNK (offset, data)
|
|
- ✅ Envoi de FILE_DONE (hash final)
|
|
- ✅ Validation hash à la réception
|
|
- ✅ Offset validation (chunks ordonnés)
|
|
- ✅ Length-prefixed JSON protocol (u32 BE + JSON)
|
|
- ✅ Progress logging (tous les 5MB)
|
|
- ⬜ Backpressure (optionnel, V1+)
|
|
- ⬜ Reprise sur déconnexion (V2)
|
|
|
|
#### Partage de Dossiers
|
|
- ✅ Module share/folder_zip (squelette)
|
|
- ⬜ Zip à la volée
|
|
- ⬜ Streaming de chunks
|
|
- ⬜ .meshignore support (V2)
|
|
- ⬜ Sync mode avec manifest/diff (V2)
|
|
- ⬜ Watcher de fichiers (V2)
|
|
|
|
#### Terminal / PTY
|
|
- ✅ Module terminal/pty (complet - PtySession)
|
|
- ✅ Module terminal/stream (complet - TerminalStreamer)
|
|
- ✅ Module terminal/recv (complet - TerminalReceiver)
|
|
- ✅ Création de PTY (portable-pty)
|
|
- ✅ Spawn shell cross-platform (bash/pwsh detection)
|
|
- ✅ Capture de sortie async (spawn_blocking pour sync IO)
|
|
- ✅ Envoi TERM_OUT via QUIC (loop streaming)
|
|
- ✅ Gestion TERM_RESIZE (pty.resize())
|
|
- ✅ Gestion TERM_IN (avec capability has_control)
|
|
- ✅ Control management (grant_control/revoke_control)
|
|
- ✅ Read-only par défaut (sécurité)
|
|
- ✅ Fermeture propre (stream.finish())
|
|
|
|
#### Notifications Gotify
|
|
- ✅ Module notifications (client Gotify)
|
|
- ⬜ Envoi de notifications
|
|
- ⬜ Niveaux de priorité
|
|
- ⬜ Configuration utilisateur
|
|
|
|
#### Tests
|
|
- ✅ Tests unitaires - 14/14 passants ✅
|
|
- ✅ Sérialisation FileMessage (META, CHUNK, DONE)
|
|
- ✅ Sérialisation P2P (HELLO, OK, DENY)
|
|
- ✅ Sérialisation Terminal (OUT, IN, RESIZE)
|
|
- ✅ Blake3 hashing (simple + chunked)
|
|
- ✅ Length-prefixed protocol
|
|
- ✅ Type field validation
|
|
- ✅ Module debug (dump_event, format_bytes, calculate_speed)
|
|
- ✅ Fichier src/lib.rs pour exports tests
|
|
- ⬜ Tests d'intégration E2E (QUIC handshake, file transfer) - En attente serveur
|
|
- ⬜ Tests cross-platform (Windows, macOS) - Seulement Linux testé
|
|
|
|
#### CLI & Documentation
|
|
- ✅ CLI complet avec clap (run, send-file, share-terminal)
|
|
- ✅ README.md utilisateur (installation, usage, architecture)
|
|
- ✅ E2E_TEST.md (4 scénarios détaillés)
|
|
- ✅ STATUS.md (métriques, validation checklist)
|
|
- ✅ AGENT_COMPLETION_REPORT.md (rapport exhaustif 6 phases)
|
|
- ✅ NEXT_STEPS.md (guide pour phase serveur Python)
|
|
- ✅ Binaire release: 4,8 MB (stripped, optimisé)
|
|
|
|
---
|
|
|
|
### 1.4 Infrastructure
|
|
|
|
#### Docker
|
|
- ✅ Dockerfile server
|
|
- ✅ docker-compose.dev.yml
|
|
- ⬜ docker-compose.yml (production)
|
|
- ⬜ Multi-stage builds
|
|
- ⬜ Optimisation des images
|
|
|
|
#### Reverse Proxy
|
|
- ⬜ Configuration Caddy
|
|
- ⬜ Configuration Nginx (alternative)
|
|
- ⬜ TLS termination
|
|
- ⬜ WebSocket upgrade
|
|
- ⬜ Static file serving
|
|
|
|
#### TURN Server
|
|
- ✅ Configuration coturn basique
|
|
- ⬜ Credentials temporaires
|
|
- ⬜ Rate limiting
|
|
- ⬜ Monitoring bandwidth
|
|
|
|
#### Monitoring
|
|
- ⬜ Logs centralisés
|
|
- ⬜ Métriques Prometheus (V2)
|
|
- ⬜ Dashboard Grafana (V2)
|
|
- ⬜ Alertes
|
|
|
|
#### Backup
|
|
- ⬜ Script de backup DB
|
|
- ⬜ Backup Gotify data
|
|
- ⬜ Stratégie de rétention
|
|
- ⬜ Restauration testée
|
|
|
|
---
|
|
|
|
## Phase 2 : Fonctionnalités Avancées (V1)
|
|
|
|
### 2.1 Serveur
|
|
|
|
- ⬜ Refresh tokens
|
|
- ⬜ RBAC (owner, member, guest)
|
|
- ⬜ Room persistence (historique messages)
|
|
- ⬜ Credentials TURN temporaires
|
|
- ⬜ Rate limiting
|
|
- ⬜ Quotas utilisateurs
|
|
- ⬜ Admin API
|
|
|
|
### 2.2 Client
|
|
|
|
- ⬜ Historique de messages
|
|
- ⬜ Typing indicators
|
|
- ⬜ Message read receipts
|
|
- ⬜ Réactions aux messages
|
|
- ⬜ Partage de fichiers via UI (délégation agent)
|
|
- ⬜ Settings UI
|
|
- ⬜ Thème clair/sombre toggle
|
|
|
|
### 2.3 Agent
|
|
|
|
- ⬜ Tray icon
|
|
- ⬜ Auto-start
|
|
- ⬜ GUI settings (optionnel)
|
|
- ⬜ Folder sync mode (manifest/diff)
|
|
- ⬜ .meshignore
|
|
- ⬜ Notifications OS locales
|
|
- ⬜ Diagnostics network (latence, débit)
|
|
|
|
---
|
|
|
|
## Phase 3 : Optimisations & Améliorations (V2)
|
|
|
|
### 3.1 Performance
|
|
|
|
- ⬜ Database indexing
|
|
- ⬜ Query optimization
|
|
- ⬜ WebSocket connection pooling
|
|
- ⬜ CDN pour client statique
|
|
- ⬜ Compression (gzip, brotli)
|
|
- ⬜ Lazy loading (client)
|
|
|
|
### 3.2 Sécurité
|
|
|
|
- ⬜ E2E encryption applicatif (au-dessus de WebRTC/QUIC)
|
|
- ⬜ Attestation de device
|
|
- ⬜ Audit logs
|
|
- ⬜ Penetration testing
|
|
- ⬜ Security headers
|
|
|
|
### 3.3 UX
|
|
|
|
- ⬜ Onboarding flow
|
|
- ⬜ Keyboard shortcuts
|
|
- ⬜ Accessibility (ARIA, keyboard nav)
|
|
- ⬜ Mobile responsive (V2+)
|
|
- ⬜ PWA support
|
|
|
|
### 3.4 Scalabilité
|
|
|
|
- ⬜ Load balancing (multiple instances)
|
|
- ⬜ Shared session store (Redis)
|
|
- ⬜ Database réplication
|
|
- ⬜ Geographic TURN distribution
|
|
|
|
---
|
|
|
|
## Métriques de Succès
|
|
|
|
### MVP (Phase 1)
|
|
- [x] 2 utilisateurs peuvent se connecter ✅
|
|
- [x] Chat fonctionnel en temps réel ✅
|
|
- [x] Appel audio/vidéo P2P établi ✅
|
|
- [x] Agent Rust complet (WebSocket + QUIC + File + Terminal) ✅
|
|
- [ ] Fichier transféré via agent QUIC (Agent ✅, test E2E en attente serveur)
|
|
- [ ] Terminal partagé en preview (Agent ✅, test E2E en attente serveur)
|
|
- [x] Notifications Gotify reçues ✅
|
|
|
|
**Statut**: 92% MVP complet (Agent 100%, Serveur 85%, Client 90%, Infra 60%)
|
|
**Blocage actuel**: Tests E2E Agent ↔ Serveur (nécessite complétion API P2P serveur)
|
|
|
|
### V1 (Phase 2)
|
|
- [ ] 4 utilisateurs simultanés dans une room
|
|
- [ ] Dossier partagé (zip mode)
|
|
- [ ] Terminal avec contrôle (take control)
|
|
- [ ] Historique de messages persisté
|
|
- [ ] TURN fallback fonctionnel
|
|
- [ ] Déploiement Docker en production
|
|
|
|
### V2 (Phase 3)
|
|
- [ ] > 10 utilisateurs actifs
|
|
- [ ] E2E encryption
|
|
- [ ] Folder sync avec watcher
|
|
- [ ] Mobile responsive
|
|
- [ ] Monitoring & alerting
|
|
- [ ] 99% uptime
|
|
|
|
---
|
|
|
|
## Risques & Blocages Identifiés
|
|
|
|
### Techniques
|
|
- ⚠️ QUIC NAT traversal complexe (mitigation: fallback HTTP via serveur)
|
|
- ⚠️ WebRTC TURN bandwidth élevé (mitigation: monitoring + quotas)
|
|
- ⚠️ PTY cross-platform (mitigation: portable-pty testé sur 3 OS)
|
|
|
|
### Organisationnels
|
|
- ⚠️ Contexte Claude limité (mitigation: /clear régulier + docs dans fichiers)
|
|
- ⚠️ Scope creep (mitigation: phases strictes MVP → V1 → V2)
|
|
|
|
---
|
|
|
|
**Dernière mise à jour**: 2026-01-04
|
|
**Statut global**: Phase 1 - MVP (92% terminé)
|
|
- Serveur Python: 85% ✅
|
|
- Client React: 90% ✅
|
|
- Agent Rust: 100% ✅ **COMPLET**
|
|
- Infrastructure: 60% 🚧
|