#!/usr/bin/env python3 """ Démonstration du système de nommage intelligent des workflows Ce script montre comment utiliser les nouvelles fonctionnalités de nommage intelligent et de capture enrichie de l'Agent V0. """ import sys import os import time import tempfile from datetime import datetime # Add agent_v0 to path sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'agent_v0')) from agent_v0.enhanced_raw_session import EnhancedRawSession from agent_v0.workflow_namer import WorkflowNamer from agent_v0.ui_dialogs import show_workflow_name_dialog def demo_basic_naming(): """Démonstration du nommage de base""" print("=== Démonstration du Nommage de Base ===") namer = WorkflowNamer() # Créer une session de test session = EnhancedRawSession.create_enhanced( user_id="demo_user", user_label="Utilisateur Démo", workflow_name="Session_Demo" ) # Simuler des interactions avec un CRM print("Simulation d'interactions CRM...") # Clic sur un bouton "Nouveau Client" session.add_enhanced_mouse_click_event( button="left", pos=[150, 100], window_title="CRM Pro - Gestion Clients", app_name="CRM_Pro", screenshot_id="shot_001", element_type="button", element_text="Nouveau Client", confidence=0.95 ) # Saisie du nom du client session.add_enhanced_key_event( keys=["Jean", "space", "Dupont"], window_title="CRM Pro - Nouveau Client", app_name="CRM_Pro", screenshot_id="shot_002", text_content="Jean Dupont", input_method="typing", confidence=0.9 ) # Saisie de l'email session.add_enhanced_key_event( keys=["jean.dupont@email.com"], window_title="CRM Pro - Nouveau Client", app_name="CRM_Pro", screenshot_id="shot_003", text_content="jean.dupont@email.com", input_method="typing", confidence=0.9 ) # Clic sur "Sauvegarder" session.add_enhanced_mouse_click_event( button="left", pos=[200, 400], window_title="CRM Pro - Nouveau Client", app_name="CRM_Pro", screenshot_id="shot_004", element_type="button", element_text="Sauvegarder", confidence=0.95 ) # Générer un nom intelligent print("Génération du nom intelligent...") intelligent_name = session.generate_intelligent_name() print(f"Nom généré : {intelligent_name}") # Analyser la session analysis = session.analyze_session() print(f"Type de workflow : {analysis.workflow_type}") print(f"Application principale : {analysis.primary_application}") print(f"Score de complexité : {analysis.complexity_score:.2f}") # Évaluer la qualité quality_score = session.get_workflow_quality_score() suggestions = session.get_workflow_suggestions() print(f"Score de qualité : {quality_score:.1%}") print("Suggestions d'amélioration :") for suggestion in suggestions: print(f" • {suggestion}") return session def demo_different_workflow_types(): """Démonstration de différents types de workflows""" print("\n=== Démonstration des Types de Workflows ===") workflows = [] # 1. Workflow de connexion print("\n1. Workflow de Connexion") login_session = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="Demo_Login" ) login_session.add_enhanced_mouse_click_event( button="left", pos=[100, 200], window_title="Gmail - Sign In", app_name="Chrome", screenshot_id="login_001", element_type="input", element_text="Email", confidence=0.9 ) login_session.add_enhanced_key_event( keys=["user@example.com"], window_title="Gmail - Sign In", app_name="Chrome", screenshot_id="login_002", text_content="user@example.com", input_method="typing" ) login_session.add_enhanced_mouse_click_event( button="left", pos=[100, 250], window_title="Gmail - Sign In", app_name="Chrome", screenshot_id="login_003", element_type="input", element_text="Password", confidence=0.9 ) login_name = login_session.generate_intelligent_name() print(f"Nom généré : {login_name}") workflows.append(("Connexion", login_session)) # 2. Workflow de navigation print("\n2. Workflow de Navigation") nav_session = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="Demo_Navigation" ) # Plusieurs clics de navigation for i, section in enumerate(["Dashboard", "Reports", "Settings", "Profile"]): nav_session.add_enhanced_mouse_click_event( button="left", pos=[50 + i*100, 50], window_title=f"App - {section}", app_name="WebApp", screenshot_id=f"nav_{i:03d}", element_type="link", element_text=section, confidence=0.8 ) nav_name = nav_session.generate_intelligent_name() print(f"Nom généré : {nav_name}") workflows.append(("Navigation", nav_session)) # 3. Workflow de recherche print("\n3. Workflow de Recherche") search_session = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="Demo_Search" ) search_session.add_enhanced_mouse_click_event( button="left", pos=[300, 50], window_title="Google", app_name="Chrome", screenshot_id="search_001", element_type="input", element_text="Search", confidence=0.9 ) search_session.add_enhanced_key_event( keys=["Python", "space", "tutorial"], window_title="Google", app_name="Chrome", screenshot_id="search_002", text_content="Python tutorial", input_method="typing" ) search_name = search_session.generate_intelligent_name() print(f"Nom généré : {search_name}") workflows.append(("Recherche", search_session)) return workflows def demo_quality_assessment(): """Démonstration de l'évaluation de qualité""" print("\n=== Démonstration de l'Évaluation de Qualité ===") # Workflow de haute qualité print("\n1. Workflow de Haute Qualité") high_quality = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="High_Quality_Demo" ) # Nombreuses interactions variées for i in range(5): high_quality.add_enhanced_mouse_click_event( button="left", pos=[100 + i*50, 100 + i*30], window_title="Complex App - Form", app_name="ComplexApp", screenshot_id=f"hq_{i:03d}", element_type="input", element_text=f"Field {i+1}", confidence=0.9 ) high_quality.add_enhanced_key_event( keys=[f"Value_{i+1}"], window_title="Complex App - Form", app_name="ComplexApp", screenshot_id=f"hq_key_{i:03d}", text_content=f"Value_{i+1}", input_method="typing" ) hq_score = high_quality.get_workflow_quality_score() hq_suggestions = high_quality.get_workflow_suggestions() print(f"Score de qualité : {hq_score:.1%}") print("Suggestions :") for suggestion in hq_suggestions: print(f" • {suggestion}") # Workflow de basse qualité print("\n2. Workflow de Basse Qualité") low_quality = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="Low_Quality_Demo" ) # Une seule interaction simple low_quality.add_enhanced_mouse_click_event( button="left", pos=[100, 100], window_title="Simple App", app_name="SimpleApp", screenshot_id="lq_001", element_type="button", element_text="Click", confidence=0.5 ) lq_score = low_quality.get_workflow_quality_score() lq_suggestions = low_quality.get_workflow_suggestions() print(f"Score de qualité : {lq_score:.1%}") print("Suggestions :") for suggestion in lq_suggestions: print(f" • {suggestion}") def demo_serialization(): """Démonstration de la sérialisation enrichie""" print("\n=== Démonstration de la Sérialisation ===") session = EnhancedRawSession.create_enhanced( user_id="demo_user", workflow_name="Serialization_Demo" ) # Ajouter quelques événements session.add_enhanced_mouse_click_event( button="left", pos=[100, 200], window_title="Test App", app_name="TestApp", screenshot_id="ser_001", element_type="button", element_text="Test Button", confidence=0.9 ) # Fermer avec analyse session.close_with_analysis() # Sauvegarder dans un dossier temporaire with tempfile.TemporaryDirectory() as temp_dir: json_path = session.save_enhanced_json(temp_dir) print(f"Session sauvegardée : {json_path}") # Lire et afficher le contenu import json with open(json_path, 'r', encoding='utf-8') as f: data = json.load(f) print(f"Clés principales : {list(data.keys())}") if 'workflow_metadata' in data: metadata = data['workflow_metadata'] print(f"Nom du workflow : {metadata.get('workflow_name')}") print(f"Type : {metadata.get('workflow_type')}") print(f"Application : {metadata.get('primary_application')}") print(f"Score de complexité : {metadata.get('complexity_score', 0):.2f}") print(f"Nombre d'événements : {len(data.get('events', []))}") print(f"Nombre d'événements enrichis : {len(data.get('enhanced_events', []))}") print(f"Score de qualité : {data.get('quality_score', 0):.1%}") def demo_ui_integration(): """Démonstration de l'intégration UI (si Qt disponible)""" print("\n=== Démonstration de l'Intégration UI ===") try: from PyQt5.QtWidgets import QApplication # Vérifier si Qt est disponible app = QApplication.instance() if app is None: app = QApplication(sys.argv) app.setQuitOnLastWindowClosed(False) print("Qt5 disponible - démonstration des dialogues") # Simuler des noms existants existing_names = [ "Saisie_Client_CRM", "Navigation_Dashboard_Admin", "Recherche_Produits_Catalogue" ] print("Noms existants :") for name in existing_names: print(f" • {name}") print("\nPour tester le dialogue interactif, décommentez le code suivant :") print("# result = show_workflow_name_dialog('Nouveau_Workflow_Demo', existing_names)") print("# print(f'Nom sélectionné : {result}')") # Démonstration non-interactive # result = show_workflow_name_dialog("Nouveau_Workflow_Demo", existing_names) # print(f"Nom sélectionné : {result}") except ImportError: print("Qt5 non disponible - utilisation des fallbacks") print("Les dialogues utiliseront des interfaces texte simplifiées") def main(): """Fonction principale de démonstration""" print("Démonstration du Système de Nommage Intelligent des Workflows") print("=" * 70) try: # Démonstrations principales session = demo_basic_naming() workflows = demo_different_workflow_types() demo_quality_assessment() demo_serialization() demo_ui_integration() # Résumé final print("\n" + "=" * 70) print("Résumé de la Démonstration") print("=" * 70) print(f"✓ Session de base créée : {session.session_id}") print(f"✓ {len(workflows)} types de workflows démontrés") print("✓ Évaluation de qualité testée") print("✓ Sérialisation enrichie validée") print("✓ Intégration UI vérifiée") print("\nFonctionnalités démontrées :") print(" • Génération automatique de noms intelligents") print(" • Détection de types de workflows") print(" • Analyse de qualité avec suggestions") print(" • Sérialisation enrichie avec métadonnées") print(" • Compatibilité avec l'interface utilisateur") print("\nPour utiliser le système :") print(" 1. Remplacez TrayApp par EnhancedTrayApp") print(" 2. Les dialogues de nommage s'ouvriront automatiquement") print(" 3. Les workflows seront organisés avec des noms descriptifs") print(" 4. Consultez le guide : agent_v0/WORKFLOW_NAMING_GUIDE.md") return 0 except Exception as e: print(f"Erreur lors de la démonstration : {e}") import traceback traceback.print_exc() return 1 if __name__ == "__main__": sys.exit(main())