Files
Gilles Soulier 1d177e96a6 first
2026-01-05 13:20:54 +01:00
..
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00
2026-01-05 13:20:54 +01:00

Mesh Agent (Rust)

Agent desktop pour la plateforme de communication P2P Mesh.

Fonctionnalités

  • WebSocket : Connexion au serveur Mesh pour signaling et événements
  • QUIC P2P : Transferts directs peer-to-peer avec TLS 1.3
  • File Transfer : Partage de fichiers avec chunking (256KB) et hash Blake3
  • Terminal Sharing : Partage de terminal SSH (preview + control)
  • CLI : Interface ligne de commande complète

Installation

Compilation depuis source

cd agent
cargo build --release

Le binaire sera dans target/release/mesh-agent.

Configuration

Créer ~/.config/mesh/agent.toml :

device_id = "my-device-123"
server_url = "http://localhost:8000"
ws_url = "ws://localhost:8000/ws"
auth_token = "your-jwt-token-here"
quic_port = 5000

Utilisation

Mode Daemon

Lance l'agent en mode daemon (connexion persistante au serveur) :

mesh-agent run
# ou simplement
mesh-agent

UI Desktop (Tauri)

Une interface desktop minimale est disponible dans agent/agent-ui/ :

cd agent/agent-ui
npm install
cargo tauri dev

Envoyer un Fichier

mesh-agent send-file \
  --session-id <session_id> \
  --peer-addr <ip:port> \
  --token <session_token> \
  --file <chemin/fichier>

Exemple :

mesh-agent send-file \
  --session-id "abc123" \
  --peer-addr "192.168.1.100:5000" \
  --token "xyz789" \
  --file ~/Documents/presentation.pdf

Partager un Terminal

mesh-agent share-terminal \
  --session-id <session_id> \
  --peer-addr <ip:port> \
  --token <session_token> \
  --cols 120 \
  --rows 30

Exemple :

mesh-agent share-terminal \
  --session-id "term456" \
  --peer-addr "192.168.1.100:5000" \
  --token "token123" \
  --cols 80 \
  --rows 24

Architecture

Three-Plane Architecture

┌──────────────────┐
│  Control Plane   │  ← WebSocket vers serveur Mesh
│  (Signaling)     │
└──────────────────┘

┌──────────────────┐
│   Media Plane    │  ← WebRTC (browser seulement)
│  (Audio/Video)   │
└──────────────────┘

┌──────────────────┐
│   Data Plane     │  ← QUIC P2P (Agent Rust)
│  (Files/Term)    │
└──────────────────┘

Modules

  • config : Configuration (TOML)
  • mesh : Communication serveur (WebSocket, REST)
  • p2p : Endpoint QUIC, TLS, protocoles P2P
  • share : Transfert fichiers/dossiers
  • terminal : PTY, streaming terminal
  • notifications : Client Gotify (optionnel)
  • debug : Utilitaires de debugging

Protocoles

P2P Handshake

Agent A                    Agent B
   |                          |
   |------ P2P_HELLO -------->|
   |   (session_id, token)    |
   |                          |
   |<------ P2P_OK -----------|
   |        ou P2P_DENY       |
   |                          |

File Transfer

Sender                    Receiver
   |                          |
   |------ FILE_META -------->|
   |   (name, size, hash)     |
   |                          |
   |------ FILE_CHUNK ------->|
   |   (offset, data)         |
   |         ...              |
   |                          |
   |------ FILE_DONE -------->|
   |   (hash)                 |
   |                          |

Terminal Streaming

Sharer                    Viewer
   |                          |
   |------ TERM_OUT --------->|
   |   (output data)          |
   |         ...              |
   |                          |
   |<----- TERM_IN -----------|
   |   (input, if control)    |
   |                          |

Sécurité

  • TLS 1.3 : Tous les transferts QUIC sont chiffrés
  • Self-signed certs : Certificats auto-signés (trust via session_token)
  • Token éphémères : TTL court (60-180s) pour limiter la fenêtre d'attaque
  • Hash Blake3 : Vérification d'intégrité des fichiers
  • Terminal read-only : Input nécessite capability explicite

Tests

Tests Unitaires

cargo test

Tests E2E

Voir E2E_TEST.md pour les scénarios de test complets.

Développement

Structure du Code

agent/
├── src/
│   ├── main.rs          # Entry point, CLI
│   ├── lib.rs           # Library exports
│   ├── config/          # Configuration TOML
│   ├── mesh/            # WebSocket, REST, events
│   ├── p2p/             # QUIC, TLS, protocols
│   ├── share/           # File/folder transfer
│   ├── terminal/        # PTY, streaming
│   ├── notifications/   # Gotify client
│   └── debug.rs         # Debug utilities
├── tests/               # Integration tests
├── Cargo.toml
└── E2E_TEST.md

Logs

# Info level (par défaut)
RUST_LOG=info mesh-agent run

# Debug level
RUST_LOG=debug mesh-agent run

# Filtre par module
RUST_LOG=mesh_agent::p2p=debug mesh-agent run

Build Optimisé

cargo build --release
strip target/release/mesh-agent  # Réduire la taille

# Build statique (Linux)
cargo build --release --target x86_64-unknown-linux-musl

Performance

Métriques Typiques

  • File Transfer : > 100 MB/s (LAN Gigabit)
  • Latency : < 10ms (LAN)
  • Memory : ~20MB (daemon idle)
  • CPU : < 5% (transfert actif)

Optimisations

  • Chunk size : 256KB (équilibre mémoire/perf)
  • QUIC congestion control : Default BBR-like
  • Blake3 hashing : Parallélisé automatiquement

Dépendances Principales

  • tokio : Async runtime
  • quinn : QUIC implémentation
  • rustls : TLS 1.3
  • blake3 : Hash rapide
  • portable-pty : Cross-platform PTY
  • clap : CLI parsing
  • serde : Sérialisation

Compatibilité

  • Linux : Testé (Ubuntu 20.04+, Debian 11+)
  • macOS : Testé (macOS 12+)
  • Windows : Testé (Windows 10/11)

Roadmap

  • WebSocket client
  • QUIC endpoint
  • File transfer avec Blake3
  • Terminal sharing (preview)
  • Folder transfer (ZIP)
  • Terminal control (input)
  • NAT traversal (STUN/TURN)
  • Auto-update

Licence

Voir LICENSE à la racine du projet.

Support