[M2] CanvasRenderer : afficher les Canvas agent via webkit2gtk sandboxé #21

Closed
opened 2026-04-06 01:34:55 +00:00 by charles · 0 comments
Owner

Contexte

Quand un agent envoie un Canvas (HTML interactif), l'afficher dans un WebView intégré au lieu d'un simple lien. Le sandbox doit être strict pour éviter toute exfiltration.

Critères d'acceptation

  • CanvasRenderer wrappant un webkit2gtk::WebView avec settings restrictifs
  • Pas de réseau (connect-src: none), pas de stockage, pas de JS externe
  • CSP strict injecté via UserContentManager : default-src 'self'; script-src 'unsafe-inline'
  • allow_file_access_from_file_urls = false, allow_universal_access_from_file_urls = false
  • render_canvas(html, max_size) : wrap HTML minimal + CSP + limite la taille du WebView (640×480 max)
  • Protocole postMessage : CanvasToHost (Resize, Action) et HostToCanvas (ThemeChanged, Data)
  • Le Canvas est affiché inline dans la timeline, pas dans une fenêtre séparée
  • canvas_enabled = true dans config active/désactive la feature

Notes techniques

  • Dépend de : #11 (AgentDetector) — uniquement pour les messages d'agents connus
  • webkit2gtk ajouté comme dépendance Flatpak (déjà disponible dans le runtime GNOME)
  • Taille max configurable : max_canvas_size = "640x480" dans [rich_render]
  • Partager l'implémentation avec M3 #27 (fx-canvas)
## Contexte Quand un agent envoie un Canvas (HTML interactif), l'afficher dans un WebView intégré au lieu d'un simple lien. Le sandbox doit être strict pour éviter toute exfiltration. ## Critères d'acceptation - [ ] `CanvasRenderer` wrappant un `webkit2gtk::WebView` avec settings restrictifs - [ ] Pas de réseau (`connect-src: none`), pas de stockage, pas de JS externe - [ ] CSP strict injecté via `UserContentManager` : `default-src 'self'; script-src 'unsafe-inline'` - [ ] `allow_file_access_from_file_urls = false`, `allow_universal_access_from_file_urls = false` - [ ] `render_canvas(html, max_size)` : wrap HTML minimal + CSP + limite la taille du WebView (640×480 max) - [ ] Protocole `postMessage` : `CanvasToHost` (Resize, Action) et `HostToCanvas` (ThemeChanged, Data) - [ ] Le Canvas est affiché inline dans la timeline, pas dans une fenêtre séparée - [ ] `canvas_enabled = true` dans config active/désactive la feature ## Notes techniques - Dépend de : #11 (AgentDetector) — uniquement pour les messages d'agents connus - `webkit2gtk` ajouté comme dépendance Flatpak (déjà disponible dans le runtime GNOME) - Taille max configurable : `max_canvas_size = "640x480"` dans `[rich_render]` - Partager l'implémentation avec M3 #27 (fx-canvas)
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/my-fractal#21
No description provided.