Suppression du .git embarqué dans agent_v0/ — le code est maintenant tracké normalement dans le repo principal. Inclut : agent_v1 (client), server_v1 (streaming), lea_ui (chat client) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Diagnostic pour le replay Agent V1 sur Windows.
|
|
|
|
Test en 3 etapes :
|
|
1. Verifie que pynput fonctionne (souris + clavier)
|
|
2. Verifie la connexion au serveur de replay
|
|
3. Execute un poll_and_execute de test
|
|
|
|
Usage : python test_replay_diag.py
|
|
(Depuis C:\rpa_vision : .venv\Scripts\python.exe test_replay_diag.py)
|
|
"""
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
# Charger .env si present
|
|
env_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')
|
|
if os.path.exists(env_file):
|
|
with open(env_file, encoding='utf-8') as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if line and not line.startswith('#') and '=' in line:
|
|
key, val = line.split('=', 1)
|
|
os.environ.setdefault(key.strip(), val.strip())
|
|
|
|
SERVER_URL = os.getenv("RPA_SERVER_URL", "http://192.168.1.40:5005/api/v1")
|
|
|
|
print("=" * 60)
|
|
print(" DIAGNOSTIC REPLAY AGENT V1")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
# ---- Test 1 : pynput ----
|
|
print("[TEST 1] Verification pynput...")
|
|
try:
|
|
from pynput.mouse import Controller as MouseController
|
|
from pynput.keyboard import Controller as KeyboardController
|
|
mouse = MouseController()
|
|
kb = KeyboardController()
|
|
|
|
pos = mouse.position
|
|
print(f" Position souris actuelle : {pos}")
|
|
if pos is None:
|
|
print(" PROBLEME : mouse.position = None !")
|
|
print(" -> pynput n'a pas acces a la session graphique.")
|
|
print(" -> Le script doit etre lance DEPUIS le bureau Windows,")
|
|
print(" pas via SSH.")
|
|
else:
|
|
print(f" OK : souris detectee a {pos}")
|
|
|
|
# Test deplacement souris (petit mouvement)
|
|
print(" Test deplacement souris dans 2s...")
|
|
time.sleep(2)
|
|
old_pos = mouse.position
|
|
if old_pos:
|
|
# Deplacement de 50px a droite puis retour
|
|
mouse.position = (old_pos[0] + 50, old_pos[1])
|
|
time.sleep(0.3)
|
|
new_pos = mouse.position
|
|
mouse.position = old_pos # Retour
|
|
print(f" Deplacement: {old_pos} -> {new_pos} -> retour")
|
|
if new_pos and new_pos[0] != old_pos[0]:
|
|
print(" OK : deplacement souris fonctionne !")
|
|
else:
|
|
print(" PROBLEME : la souris n'a pas bouge.")
|
|
else:
|
|
print(" SKIP : pas de position souris disponible.")
|
|
|
|
except Exception as e:
|
|
print(f" ERREUR pynput : {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
print()
|
|
|
|
# ---- Test 2 : connexion serveur ----
|
|
print(f"[TEST 2] Connexion au serveur : {SERVER_URL}")
|
|
try:
|
|
import requests
|
|
url = f"{SERVER_URL}/traces/stream/replay/next"
|
|
resp = requests.get(url, params={"session_id": "diag_test"}, timeout=5)
|
|
print(f" HTTP {resp.status_code} : {resp.text[:200]}")
|
|
if resp.ok:
|
|
data = resp.json()
|
|
if data.get("action") is None:
|
|
print(" OK : serveur accessible, pas d'action en attente.")
|
|
else:
|
|
print(f" OK : serveur accessible, ACTION RECUE : {data['action']}")
|
|
else:
|
|
print(f" PROBLEME : le serveur a repondu HTTP {resp.status_code}")
|
|
except requests.exceptions.ConnectionError as e:
|
|
print(f" ERREUR CONNEXION : {e}")
|
|
print(f" -> Verifiez que le serveur tourne sur {SERVER_URL}")
|
|
except Exception as e:
|
|
print(f" ERREUR : {e}")
|
|
|
|
print()
|
|
|
|
# ---- Test 3 : mss (capture ecran) ----
|
|
print("[TEST 3] Capture ecran (mss)...")
|
|
try:
|
|
import mss
|
|
sct = mss.mss()
|
|
monitor = sct.monitors[1]
|
|
print(f" Moniteur principal : {monitor['width']}x{monitor['height']}")
|
|
raw = sct.grab(monitor)
|
|
print(f" Capture OK : {raw.size}")
|
|
except Exception as e:
|
|
print(f" ERREUR mss : {e}")
|
|
|
|
print()
|
|
|
|
# ---- Test 4 : typing test (5s delay) ----
|
|
print("[TEST 4] Test de frappe clavier")
|
|
print(" -> Ouvrez le Bloc-Notes et placez le curseur dedans.")
|
|
print(" -> La frappe commencera dans 5 secondes...")
|
|
time.sleep(5)
|
|
|
|
try:
|
|
from pynput.keyboard import Controller as KeyboardController
|
|
kb = KeyboardController()
|
|
test_text = "Hello RPA!"
|
|
print(f" Frappe de '{test_text}'...")
|
|
kb.type(test_text)
|
|
print(f" Frappe terminee. Verifiez si le texte apparait dans le Bloc-Notes.")
|
|
except Exception as e:
|
|
print(f" ERREUR frappe : {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
print()
|
|
print("=" * 60)
|
|
print(" DIAGNOSTIC TERMINE")
|
|
print("=" * 60)
|
|
input("Appuyez sur Entree pour fermer...")
|