Files
mesh/docs/AGENT.md
Gilles Soulier 1d177e96a6 first
2026-01-05 13:20:54 +01:00

4.6 KiB
Raw Permalink Blame History

📄 agent.md — Mesh Agent (Rust pragmatique)

1. Description

Mesh Agent est un agent desktop multi-OS (Linux / Windows / macOS) conçu pour compléter Mesh (app web) avec des capacités locales avancées.

Objectifs :

  • Flux lourds P2P (faible charge serveur)
  • Binaires multi-OS simples à déployer
  • Terminal/SSH partagé robuste
  • Partage fichiers/dossiers performant
  • Notifications directes Gotify

Lagent communique :

  • avec le Mesh Server (REST + WebSocket) pour auth/permissions/signalisation,
  • avec les autres clients/agents en P2P pour les flux data,
  • avec Gotify pour les notifications.

2. Architecture (control plane vs data plane)

  • Control plane : Mesh Server
    • Auth
    • Rooms & ACL
    • Tokens de capacités (TTL court)
    • Signalisation (WS)
    • Événements + notifications Gotify
  • Data plane : P2P
    • Audio/Vidéo/Écran : WebRTC (côté client web)
    • Fichiers/Dossiers/Terminal : P2P via QUIC (recommandé V1)
      • fallback possible : WebRTC DataChannel (V2) ou HTTP temporaire (exception)

Le serveur ne transporte pas de média ni de transferts lourds.


3. Fonctions principales

3.1 Partage fichiers & dossiers (P2P)

  • Envoi fichier : chunks + reprise + checksum
  • Envoi dossier :
    • mode simple : zip à la volée
    • mode sync (optionnel) : watcher + manifest + diff
  • Débit contrôlé + backpressure

3.2 Terminal / SSH share (preview + contrôle)

  • Lagent lance une session locale via PTY (bash/pwsh) et peut lancer ssh user@host.
  • Diffuse la sortie terminal en P2P.
  • Modes :
    • preview (lecture seule) par défaut
    • take control (un seul contrôleur à la fois)

3.3 Notifications

  • Envoi direct vers Gotify (agent → Gotify)
  • Notifications OS locales (optionnel V1)

3.4 Intégration OS

  • Tray icon (optionnel)
  • Auto-start (optionnel)
  • Identité machine : device_id

4. Stack technique (Rust)

Runtime / réseau

  • Rust stable
  • tokio (async)
  • reqwest (HTTP)
  • tokio-tungstenite (WebSocket)
  • quinn (QUIC P2P) — recommandé pour data plane (fichiers/terminal)

Terminal

  • Unix : portable-pty (ou equivalent) pour PTY
  • Windows : ConPTY (crate dédiée / wrapper)

FS / sync

  • notify (watcher cross-platform)
  • hashing (blake3 recommandé)

Config / logs

  • serde + toml/yaml
  • tracing + tracing-subscriber

Packaging

  • binaire unique par OS
  • install : MSI (Windows), deb/rpm (Linux), dmg/pkg (macOS) — V1/V2

5. Structure recommandée

agent/
  Cargo.toml
  src/
    main.rs
    config/
      mod.rs
    mesh/
      rest.rs
      ws.rs
      types.rs
    p2p/
      mod.rs
      quic/
        endpoint.rs
        protocol.rs
      fallback_http/
        mod.rs
    share/
      file_send.rs
      folder_zip.rs
      folder_sync/
        manifest.rs
        diff.rs
        watcher.rs
    terminal/
      mod.rs
      pty_unix.rs
      conpty_windows.rs
      stream.rs
    notifications/
      gotify.rs
      router.rs
    os/
      autostart.rs
      tray.rs
  tests/

6. Protocole & permissions

  • Toutes les actions P2P sont autorisées par capability tokens (TTL court), émis par le serveur :
    • share:file, share:folder, terminal:view, terminal:control
  • Le P2P (QUIC) utilise un handshake applicatif :
    • échange dun token de session (issu du serveur)
    • validation côté pair avant daccepter un flux

7. Sécurité (résumé)

  • Les secrets SSH ne sortent jamais de la machine partageuse.
  • Terminal share : preview-only par défaut.
  • Chiffrement transport : QUIC (TLS 1.3), WebSocket/TLS.
  • Logs sans contenu sensible.

8. TODO

MVP (priorité)

  • Config + identité device_id
  • Connexion WS au serveur (auth)
  • Réception events (room, terminal, share)
  • Notifications Gotify
  • Terminal preview (PTY) + stream P2P (QUIC)

V1

  • Envoi fichier P2P (QUIC)
  • Envoi dossier (zip) P2P
  • Take control terminal (arbitrage via serveur)
  • Diagnostics (mode P2P, erreurs, stats)

V2

  • Sync dossier (manifest/diff)
  • Tray + autostart multi-OS
  • Fallback HTTP serveur (temporaire) si P2P impossible
  • WebRTC DataChannel agent (si besoin compat)

9. Améliorations futures

  • .meshignore
  • Diff binaire + dédup
  • Chiffrement applicatif E2E optionnel
  • Tunnel SSH (TCP-like) au-dessus de QUIC (avancé)

10. Changelog

0.1.0  Rust agent skeleton (WS + Gotify)
0.2.0  Terminal share preview (QUIC)
0.3.0  File transfer (QUIC)
0.4.0  Folder zip + take control
0.5.0  Folder sync (beta)