Files
rpa_vision_v3/scripts/prepare_clipboard_linuxdb.sh
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

92 lines
4.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Précharge le clipboard de la VM Ubuntu avec le INSERT SQL du workflow linux_db.
# Contourne la lenteur du char-by-char NoMachine (bug paste:true).
#
# Source de vérité : scripts/payload_insert_morel.sql (extrait depuis workflows.db
# backup du 2026-05-16_102755, avant transformation du step ord 8 en Ctrl+V).
#
# Wayland ne permet pas de "verrouiller" la sélection clipboard : wl-copy meurt
# dès qu'un autre client (terminal, navigateur, DBeaver) prend le clipboard.
# Solution : un GARDIEN qui re-pousse le payload toutes les 0.5s en boucle.
# Le PID du gardien est sauvegardé dans /tmp/clipboard_guard.pid sur la VM
# pour permettre un kill propre sans pkill -f (qui se tuerait lui-même).
#
# À lancer AVANT chaque run du workflow linux_db.
# Le step ord 8 du workflow est désormais un Ctrl+V (et non plus le type_text).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PAYLOAD_FILE="$SCRIPT_DIR/payload_insert_morel.sql"
VM_HOST="dom@192.168.122.132"
SSH_PASS="loli"
VM_PAYLOAD="/tmp/clipboard_payload.sql"
VM_PIDFILE="/tmp/clipboard_guard.pid"
# 1. Vérifier le payload local
if [ ! -s "$PAYLOAD_FILE" ]; then
echo "ERREUR: payload introuvable ou vide : $PAYLOAD_FILE" >&2
exit 1
fi
BYTES=$(wc -c < "$PAYLOAD_FILE")
echo "[1/3] Payload local : ${BYTES} bytes ($PAYLOAD_FILE)"
# 2. Pousser dans la VM via SSH (cat redirect)
SSHPASS="$SSH_PASS" sshpass -e ssh -o StrictHostKeyChecking=no "$VM_HOST" \
"cat > $VM_PAYLOAD" < "$PAYLOAD_FILE"
REMOTE_BYTES=$(SSHPASS="$SSH_PASS" sshpass -e ssh -o StrictHostKeyChecking=no "$VM_HOST" \
"wc -c < $VM_PAYLOAD")
echo "[2/3] Fichier déployé : ${REMOTE_BYTES} bytes sur VM ($VM_PAYLOAD)"
if [ "$REMOTE_BYTES" != "$BYTES" ]; then
echo "ERREUR: taille fichier VM (${REMOTE_BYTES}) != local (${BYTES})" >&2
exit 1
fi
# 3. Lancer le gardien clipboard : boucle qui re-pousse le payload toutes les 0.5s.
# Kill de l'ancien via /tmp/clipboard_guard.pid (PID file, PAS pkill -f
# qui se tuerait lui-même car le pattern apparaît dans notre cmdline SSH).
SSHPASS="$SSH_PASS" sshpass -e ssh -o StrictHostKeyChecking=no "$VM_HOST" \
"export WAYLAND_DISPLAY=wayland-0 XDG_RUNTIME_DIR=/run/user/1000
# Kill ancien gardien si PID file existe et pointe vers un processus vivant
if [ -f $VM_PIDFILE ]; then
OLD_PID=\$(cat $VM_PIDFILE)
if [ -n \"\$OLD_PID\" ] && kill -0 \"\$OLD_PID\" 2>/dev/null; then
kill \"\$OLD_PID\" 2>/dev/null
sleep 0.3
fi
fi
# Lancer la boucle gardien : écrit sur LES DEUX clipboards.
# - wl-copy : clipboard Wayland (apps natives Wayland)
# - xsel : clipboard X11/XWayland (DBeaver/Java/GTK qui passe par XWayland)
# Sans le double-write, DBeaver lit un clipboard X11 vide même si Wayland plein.
# XAUTHORITY = cookie temporaire de mutter/XWayland (régénéré à chaque session)
XAUTH=\$(ls /run/user/1000/.mutter-Xwaylandauth.* 2>/dev/null | head -1)
if [ -z \"\$XAUTH\" ]; then
echo 'WARN: mutter-Xwaylandauth introuvable, X11 paste ne marchera pas' >&2
XAUTH=/home/dom/.Xauthority
fi
nohup setsid bash -c \"export DISPLAY=:0 XAUTHORITY=\$XAUTH; while true; do wl-copy < $VM_PAYLOAD; xsel --clipboard --input < $VM_PAYLOAD 2>/dev/null; sleep 0.5; done\" >/dev/null 2>&1 </dev/null &
GUARD_PID=\$!
echo \"\$GUARD_PID\" > $VM_PIDFILE
sleep 0.7
# Vérifier que le gardien tourne et que le clipboard est rempli
if ! kill -0 \"\$GUARD_PID\" 2>/dev/null; then
echo 'ERREUR: gardien mort juste après lancement' >&2
exit 1
fi
CHECK=\$(wl-paste | wc -c)
echo \"[3/3] gardien actif PID=\$GUARD_PID, clipboard=\$CHECK bytes\"
# Tolérance ±1 byte (wl-paste ajoute parfois un newline final)
DELTA=\$(( \$CHECK - $BYTES ))
if [ \$DELTA -lt -1 ] || [ \$DELTA -gt 1 ]; then
echo \"ERREUR: clipboard (\$CHECK) != payload ($BYTES) delta=\$DELTA\" >&2
exit 1
fi"
echo ""
echo "OK clipboard VM verrouillé en boucle. Tu peux lancer le replay linux_db."
echo "(le step ord 8 fera Ctrl+V, l'INSERT sera collé instantanément dans DBeaver)"
echo ""
echo "APRÈS LA DÉMO, tuer le gardien :"
echo " SSHPASS=$SSH_PASS sshpass -e ssh ${VM_HOST} \"kill \\\$(cat $VM_PIDFILE)\""