From 77bfa0b8c5dc8f798e6ddea644df62bb15f65093 Mon Sep 17 00:00:00 2001 From: jeanotx32 Date: Wed, 12 Aug 2026 01:46:14 +0200 Subject: [PATCH] REVAMP : Firefox handling --- README.md | 130 ++++- deploy/install-agent.sh | 13 +- packages/agent/src/bidi.ts | 180 ++++++ packages/agent/src/browser.ts | 2 +- packages/agent/src/doctor.ts | 40 +- packages/agent/src/firefox.ts | 526 ++++++++++++++++++ packages/agent/src/fullscreen.ts | 31 ++ packages/agent/src/hotkey.ts | 27 +- packages/agent/src/index.ts | 104 +++- packages/agent/src/watcher.ts | 31 +- packages/agent/src/x11.ts | 31 ++ packages/shared/src/index.ts | 81 ++- packages/web/src/components/AgentCard.tsx | 12 + packages/web/src/components/AgentSettings.tsx | 123 +++- 14 files changed, 1223 insertions(+), 108 deletions(-) create mode 100644 packages/agent/src/bidi.ts create mode 100644 packages/agent/src/firefox.ts create mode 100644 packages/agent/src/fullscreen.ts diff --git a/README.md b/README.md index fd6b39c..57b5ff9 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,9 @@ IP publique nécessaire, et obs-websocket reste sur `127.0.0.1`. - Node.js **22+** sur le serveur et sur chaque VM (le serveur utilise `node:sqlite`). - OBS **28+** sur chaque VM, avec *Outils → Paramètres du serveur WebSocket* activé. Note le port (4455 par défaut) et le mot de passe. -- Pour le rappel du plein écran sous Ubuntu : `xdotool` et une session X11 - (voir [Prérequis pour le rappel du plein écran](#prérequis-pour-le-rappel-du-plein-écran)). +- Pour le rappel du plein écran sous Ubuntu : Firefox, en mode de pilotage « WebDriver BiDi » + (voir [Deux façons de piloter le navigateur](#deux-façons-de-piloter-le-navigateur)). + Le mode historique exige en plus `xdotool` et une session X11. ## Démarrage rapide (développement) @@ -157,9 +158,75 @@ moment coûte plus cher que quelques secondes d'écran d'attente enregistrées : Un passage `hors-ligne` (`idle`) ne provoque ni pause ni reprise : seul le retour effectif du flux public relance l'enregistrement. -### Prérequis pour le rappel du plein écran +### Deux façons de piloter le navigateur -L'envoi de touche se fait au niveau du système, pas via OBS. +Le rappel du plein écran dépend entièrement de ce choix, qui se règle par agent dans +« Pilotage du navigateur ». + +| | **WebDriver BiDi** (recommandé) | **Lancement simple** (historique) | +| --- | --- | --- | +| Ouverture d'une page | commande dans l'instance pilotée | un processus lancé par page | +| Plein écran | commande WebDriver adressée à Firefox | touche envoyée au serveur d'affichage | +| Effet vérifié ? | oui — `document.fullscreenElement` est relu | non | +| Session Wayland | **fonctionne** | impossible (voir plus bas) | +| Dépendances | Firefox | xdotool + session X11 | + +#### WebDriver BiDi + +Firefox expose ce protocole dès qu'on le lance avec `--remote-debugging-port` : ni +geckodriver, ni Selenium, une simple WebSocket JSON sur la boucle locale. L'agent +implémente le strict nécessaire (`bidi.ts`, `firefox.ts`). + +Le renversement est là : **l'agent possède le navigateur** au lieu de lui envoyer des URL +en espérant. Il parle à Firefox, pas au serveur d'affichage — d'où le fonctionnement +identique sous Wayland, où xdotool ne voit rien. + +Séquence du rappel de plein écran, dans cet ordre volontaire : + +1. `browsingContext.activate` — sans quoi la touche partirait vers un onglet d'arrière-plan ; +2. `input.performActions` — la touche configurée (`f` par défaut), délivrée à la page comme + un vrai évènement (`isTrusted: true`), donc traitée par le lecteur du site ; +3. relecture de `document.fullscreenElement` ; +4. si la page n'a pas bougé : `requestFullscreen()` sur l'élément `