- nginx: client_max_body_size 10m (limite par défaut 1 Mo bloquait les images)
- icons.go: import _ golang.org/x/image/webp et image/gif pour décoder WEBP/GIF
- index.html: retire SVG de l'accept (serveur le rejette) et corrige le hint
- popups.js: try/catch autour de uploadIcon → message d'erreur visible dans le hint
pendant 4s si l'upload échoue ; reset du file input pour re-sélectionner le même
fichier ; rafraîchit l'img de la tuile avec cache-busting après succès
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Assemble tous les packages (config, db, handlers, transport, websocket, prometheus)
- Boucle de rétention et détection offline toutes les minutes
- Routage REST /api/agents/, /api/config, /metrics, /ws
- Dockerfile multi-stage CGO_ENABLED=0 (alpine:3.19)
- docker-compose.yml avec service server + dashboard Nginx
- nginx.conf avec proxy WebSocket et fallback SPA
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>