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>
92 lines
4.1 KiB
Bash
Executable File
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)\""
|