Files
rpa_vision_v3/docs/handoffs/2026-05-16_handoff_ydotool_clipboard.md
Dom 5ea4960e65
Some checks failed
tests / Lint (ruff + black) (push) Successful in 1m50s
tests / Tests unitaires (sans GPU) (push) Failing after 1m50s
tests / Tests sécurité (critique) (push) Has been skipped
backup: snapshot post-démo GHT 2026-05-19
Backup état complet après enregistrement vidéo démo de bout en bout.
À utiliser comme point de référence pour la consolidation post-démo.

Changements majeurs de la session 18-19 mai :
- AIVA-URGENCE : page autonome avec preset URL + auto-focus chain
- Workflow Demo_urgence_3_db : merge linux_db + steps AIVA + pause humaine NoMachine
- Bypass LLM (static_result / static_text) dans replay_engine
  pour démos déterministes sans appel Ollama
- Fix api_stream:3013 — replay_paused au premier polling /next
- dag_execute : lift duration_ms vers top-level pour wait runtime
- NPM bypass auth /aiva-urgence/ via location ^~ (proxy_host/10.conf hors git)
- scripts/cancel-replays.sh — workaround Stop VWB qui ne purge pas la queue

Anchors visuels (468) forcés dans le commit pour garantir restorabilité.
DB workflows actuelle + ~12 .bak DB de la journée incluses.

Sujets identifiés pour consolidation post-démo (TODO) :
1. Bug VWB recapture anchor ne régénère pas le PNG
2. Léa client accumule état mémoire (restart périodique requis)
3. Stop VWB ne purge pas la queue serveur (lien manquant vers /replay/cancel)
4. Bug coord client mss tronqué 2560x60 → mapping Y cassé
5. delay_before/delay_after ignorés au runtime (fix partiel duration_ms)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 14:55:06 +02:00

7.2 KiB

Handoff session 2026-05-16 matinée — Contournement Ctrl+V NoMachine via ydotool

Auteur : Claude (session 10:00 → 15:10 CEST) Suite de : 2026-05-16_handoff_demo3_workflow.md (handoff du 16 mai 02:04, session 15→16 mai) Objectif : démo vidéo "demo 95" jeudi 21 mai 2026 (J-5)


1. Problème résolu

Bloqueur n°1 du handoff précédent (« clics ne traversent pas NoMachine ») : partiellement résolu.

  • Clics Léa via NoMachine : OK (traversent normalement, propagation pynput → SendInput Windows → NoMachine → VM)
  • Key combos avec Ctrl (Ctrl+V, Ctrl+Enter) : bloqués par NoMachine en mode "passive grab" par défaut

Cause root identifiée (agent de recherche web) : NoMachine Player Windows en passive grab intercepte/avale la touche Ctrl quand "Grab the keyboard input" n'est pas explicitement activé. Source : KB NoMachine AR01P00959, TR08R09811.

Solution 1 testée (chercher l'option dans le menu NoMachine 9.5.7) : option introuvable dans l'UI.

Solution 2 retenue : bypasser entièrement NoMachine pour le paste/execute en injectant les touches directement dans la VM via ydotool (compatible Wayland natif Ubuntu 26.04).


2. Architecture finale

[Léa Windows] --pynput-->  [clics Windows] --NoMachine--> [VM Ubuntu DBeaver]
                          (clics OK)                       (focus zone éditeur SQL)

[hôte Linux] --SSH--> [VM Ubuntu]
   prepare_clipboard.sh           wl-copy + xsel (gardien boucle)  → clipboards Wayland + X11 remplis
   paste_and_execute.sh           ydotool key 29:1 47:1 47:0 29:0  → Ctrl+V dans VM (bypasse NoMachine)
                                  ydotool key 29:1 28:1 28:0 29:0  → Ctrl+Enter dans VM

3. Livrables créés

Scripts (~/ai/rpa_vision_v3/scripts/)

Fichier Rôle
payload_insert_morel.sql Payload INSERT SQL (1632 bytes, source de vérité) extrait du backup DB
prepare_clipboard_linuxdb.sh Pousse payload sur VM, lance gardien boucle qui re-pousse clipboard Wayland + X11 toutes les 0.5s (sinon écrasé par sélection terminal/etc.)
paste_and_execute_linuxdb.sh Vérifie ydotoold + gardien, déclenche Ctrl+V puis Ctrl+Enter via ydotool dans la VM

Modifications workflows.db (3 backups successifs)

workflows.db.backup_2026-05-16_102755_avant_clipboard_relay  (avant 1er UPDATE)
workflows.db.backup_2026-05-16_111541_avant_rawkeys          (tentative raw_keys, abandonnée)
workflows.db.backup_2026-05-16_150853_avant_suppr_steps_8_9  (avant suppression key_combos)

État final workflow linux_db (wf_0786343fb2b7_1778879244) : 7 steps, tous des clics

0  double_click_anchor   LINUX_demo
1  click_anchor
2  click_anchor
3  wait_for_anchor
4  click_anchor
5  click_anchor
6  click_anchor

Les ex-steps 7 (Ctrl+V) et 8 (Ctrl+Enter) ont été supprimés car remplacés par paste_and_execute_linuxdb.sh lancé à la main.

DB demo_95 (VM)

Nettoyée : 3 rows propres (DURAND, MARTIN, PETIT), AUTOINCREMENT reset à 3. Prochain INSERT MOREL aura id=4.


4. Dépendances installées dans la VM (Ubuntu 26.04 Wayland)

wl-clipboard         (wl-copy/wl-paste — clipboard Wayland)
openssh-server       (SSH depuis Linux hôte)
xsel                 (xsel — clipboard X11/XWayland)
x11-xserver-utils    (xhost — autoriser connexions X11 locales)
ydotool              (1.0.4-3 — injection clavier uinput, Wayland-compatible)

Démarrage ydotoold daemon (pas de service systemd fourni par le paquet Ubuntu) :

echo 'loli' | sudo -S sh -c 'nohup setsid ydotoold --socket-path=/tmp/.ydotool_socket --socket-perm=0666 >/var/log/ydotoold.log 2>&1 </dev/null &'

(Inclus dans paste_and_execute_linuxdb.sh qui le relance si absent.)


5. À refaire après chaque reboot VM

  1. xhost (autorise SSH non-interactif à utiliser xsel sur XWayland) :
    sshpass -p loli ssh dom@192.168.122.132 \
      "XAUTH=\$(ls /run/user/1000/.mutter-Xwaylandauth.* 2>/dev/null | head -1); \
       DISPLAY=:0 XAUTHORITY=\$XAUTH xhost +local:"
    
  2. prepare_clipboard_linuxdb.sh (relance gardien clipboard + daemon ydotoold via paste_and_execute si nécessaire)

6. Procédure démo finale

# AVANT la démo (1 fois, à froid après reboot) :
~/ai/rpa_vision_v3/scripts/prepare_clipboard_linuxdb.sh

# Pour chaque take de la démo :
# 1. Lancer workflow linux_db dans VWB (bouton bleu "→ Windows")
# 2. Attendre que Léa termine les 7 steps (clics visibles dans la VM via NoMachine)
# 3. Dans un terminal Linux hôte :
~/ai/rpa_vision_v3/scripts/paste_and_execute_linuxdb.sh
# → INSERT collé + exécuté instantanément dans DBeaver (visible à l'écran)

Vérif post-démo (compter rows) :

sshpass -p loli ssh dom@192.168.122.132 \
  'python3 -c "import sqlite3; c=sqlite3.connect(\"/home/dom/demo_95\"); print(list(c.execute(\"SELECT id,nom_patient,date_creation FROM requalifications_t2a ORDER BY id DESC LIMIT 2\")))"'

Reset pour nouveau take :

sshpass -p loli ssh dom@192.168.122.132 \
  'python3 -c "
import sqlite3
c = sqlite3.connect(\"/home/dom/demo_95\")
c.execute(\"DELETE FROM requalifications_t2a WHERE id > 3\")
c.execute(\"UPDATE sqlite_sequence SET seq = 3 WHERE name = '\''requalifications_t2a'\''\")
c.commit()"'

7. Dette technique créée par cette session

  1. Couplage hôte ↔ VM dur : password loli en clair dans les scripts (SSH_PASS, SUDO_PASS). À remplacer par clé SSH + sudoers NOPASSWD pour ydotoold. Hors scope J-5.
  2. Gardien clipboard boucle 0.5s : consomme CPU négligeable mais pas propre. À remplacer post-démo par un mécanisme dbus signal ou systemd path unit qui re-pousse seulement sur événement "clipboard cleared".
  3. paste_and_execute lancé à la main : pas intégré au workflow VWB. Pour intégration auto post-démo, deux options :
    • A : ajouter à Léa un nouveau action_type shell_remote (modif executor.py côté Windows + déploiement SCP)
    • B : modifier replay_engine.py côté serveur pour exécuter localement (Linux hôte) certains step types au lieu de dispatcher à Léa
  4. xhost +local: : large. À remplacer par xhost SI:localuser:dom post-démo.
  5. AUTOINCREMENT id=9 déjà consommé par les tests : reset à 3 pour la démo, mais à vérifier après chaque take.

8. État infra runtime

  • Serveur rpa-streaming : actif (PID 308418 mentionné dans handoff précédent)
  • ydotoold daemon : actif côté VM, socket /tmp/.ydotool_socket (0666)
  • Gardien clipboard : actif côté VM (PID dans /tmp/clipboard_guard.pid)
  • 3 clipboards remplis :
    • Wayland VM (1633 bytes via wl-copy)
    • X11 VM (1632 bytes via xsel)
    • Windows (1632 bytes via Set-Clipboard — peut nécessiter re-push manuel si vidé)

9. Sessions du jour (16 mai)

  • 06:52 → 07:55 : session reprise courte (fermée par Dom par erreur), test workflow → blocage Ctrl+V
  • 10:00 → 15:10 : session diagnostic+fix complet
    • Diagnostic clipboard Wayland ≠ X11 (XWayland ne synchronise pas)
    • Fix : gardien double-write wl-copy + xsel + xhost +local:
    • Diagnostic NoMachine passive grab mange Ctrl
    • Fix : bypass via ydotool en SSH dans la VM
    • Workflow linux_db simplifié (suppression key_combos)