From 3417f095982bed9fe103ffdc68a9b13a35d0052f Mon Sep 17 00:00:00 2001 From: Dom Date: Mon, 30 Mar 2026 17:26:32 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20auto-stop=20enregistrement=20(1h)=20+?= =?UTF-8?q?=20packaging=20L=C3=A9a=20collaborateurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Auto-stop : notification 10 min avant, arrêt automatique après MAX_SESSION_DURATION_S (1h) - Lea.bat : kill des anciens process (python, pythonw, rpa-agent) au démarrage - LISEZMOI : simplifié pour les collaborateurs (pas de replay, juste collecte) - Chat server (5004) vérifié fonctionnel Co-Authored-By: Claude Opus 4.6 (1M context) --- agent_v0/agent_v1/main.py | 59 ++++++++++++++++++++++++++++++++- deploy/lea_package/LISEZMOI.txt | 47 ++++++++++++++------------ deploy/lea_package/Lea.bat | 8 +++++ 3 files changed, 91 insertions(+), 23 deletions(-) diff --git a/agent_v0/agent_v1/main.py b/agent_v0/agent_v1/main.py index f07377500..09e4aae50 100644 --- a/agent_v0/agent_v1/main.py +++ b/agent_v0/agent_v1/main.py @@ -16,7 +16,7 @@ import logging import threading from .config import ( SESSIONS_ROOT, AGENT_VERSION, SERVER_URL, MACHINE_ID, LOG_RETENTION_DAYS, - SCREEN_RESOLUTION, DPI_SCALE, OS_THEME, API_TOKEN, + SCREEN_RESOLUTION, DPI_SCALE, OS_THEME, API_TOKEN, MAX_SESSION_DURATION_S, ) from .core.captor import EventCaptorV1 from .core.executor import ActionExecutorV1 @@ -136,6 +136,58 @@ class AgentV1: time.sleep(30) self.storage.run_auto_cleanup() + def _auto_stop_loop(self): + """Auto-stop de l'enregistrement après MAX_SESSION_DURATION_S. + + L'utilisateur peut oublier d'arrêter. On notifie à 50 min, + puis on arrête automatiquement à 60 min (configurable). + """ + warn_before = 600 # Prévenir 10 min avant la fin + warned = False + + while self.running and self.session_id: + elapsed = time.time() - self._session_start_time + remaining = MAX_SESSION_DURATION_S - elapsed + + # Notification 10 min avant la fin + if not warned and remaining <= warn_before: + warned = True + mins = int(remaining / 60) + logger.info(f"Auto-stop dans {mins} min") + try: + from .ui.notifications import NotificationManager + NotificationManager().notify( + "Léa", + f"L'enregistrement s'arrêtera automatiquement dans {mins} minutes.", + ) + except Exception: + pass + + # Auto-stop + if remaining <= 0: + logger.info( + f"Auto-stop : session {self.session_id} après " + f"{int(elapsed)}s ({int(elapsed/60)} min)" + ) + try: + from .ui.notifications import NotificationManager + NotificationManager().notify( + "Léa", + f"Enregistrement terminé automatiquement après " + f"{int(elapsed/60)} minutes. Merci !", + ) + except Exception: + pass + + # Arrêter via l'état partagé (synchronise systray + chat) + if self._state is not None: + self._state.stop_recording() + else: + self.stop_session() + break + + time.sleep(30) # Vérifier toutes les 30s + def start_session(self, workflow_name): self.session_id = f"sess_{time.strftime('%Y%m%dT%H%M%S')}_{uuid.uuid4().hex[:6]}" self.session_dir = self.storage.get_session_dir(self.session_id) @@ -157,6 +209,11 @@ class AgentV1: # Heartbeat Contextuel (Toutes les 5s par defaut) threading.Thread(target=self._heartbeat_loop, daemon=True).start() + # Auto-stop : arrêter l'enregistrement après MAX_SESSION_DURATION_S + # L'utilisateur peut oublier d'arrêter — on le fait automatiquement + self._session_start_time = time.time() + threading.Thread(target=self._auto_stop_loop, daemon=True).start() + # Watchdog de Commandes (GHOST Replay — legacy fichier) threading.Thread(target=self._command_watchdog_loop, daemon=True).start() diff --git a/deploy/lea_package/LISEZMOI.txt b/deploy/lea_package/LISEZMOI.txt index 3489d6c01..4f90cb07b 100644 --- a/deploy/lea_package/LISEZMOI.txt +++ b/deploy/lea_package/LISEZMOI.txt @@ -3,7 +3,7 @@ ============================================================ Bienvenue ! Lea est une assistante qui apprend vos taches -repetitives sur l'ordinateur et peut les refaire a votre place. +repetitives sur l'ordinateur pour pouvoir vous aider. PREMIERE INSTALLATION @@ -29,13 +29,15 @@ des taches (petite icone ronde, a cote de l'horloge). Clic droit sur l'icone pour ouvrir le menu : - "Apprenez-moi une tache" : Lea observe ce que vous faites - et memorise les etapes. + et memorise les etapes. Travaillez normalement, Lea + apprend en vous regardant. - - "Mes taches" : Liste des taches que Lea a apprises. - Cliquez sur une tache pour que Lea la refasse. + - "C'est termine" : Arrete l'enregistrement quand vous + avez fini la tache. Si vous oubliez, Lea s'arrete + automatiquement apres 1 heure. - "Discuter avec Lea" : Ouvre une fenetre de discussion - pour poser des questions ou donner des instructions. + pour poser des questions. - "ARRET D'URGENCE" : Arrete immediatement tout ce que Lea est en train de faire. @@ -43,6 +45,22 @@ Clic droit sur l'icone pour ouvrir le menu : - "Quitter Lea" : Ferme le programme. +INFORMATIONS IMPORTANTES +------------------------ + +Quand Lea enregistre vos actions, elle capture votre ecran, +vos clics et vos frappes clavier. + + - Lea vous previent AVANT chaque enregistrement + - Les donnees sensibles (mots de passe, informations + medicales) sont automatiquement floutees + - L'enregistrement s'arrete automatiquement apres 1 heure + - Vous pouvez arreter a tout moment via le menu + +Lea est un systeme base sur l'intelligence artificielle +(Article 50, Reglement europeen sur l'IA). + + CONFIGURATION ------------- @@ -56,30 +74,15 @@ EN CAS DE PROBLEME ------------------- - "Python n'est pas installe" : Demandez a votre - service informatique d'installer Python 3.10 + service informatique d'installer Python 3.10+ depuis https://python.org - Lea ne demarre pas : Relancez "install.bat" puis relancez "Lea.bat" - Lea est deconnectee : Verifiez votre connexion - internet/reseau. Le serveur est peut-etre en - maintenance. + reseau. Le serveur est peut-etre en maintenance. - En cas de doute, contactez votre administrateur. - -INFORMATIONS ------------- - -Lea est un systeme base sur l'intelligence artificielle. - -Quand Lea enregistre vos actions, elle capture votre ecran, -vos clics et vos frappes clavier. Les donnees sensibles -(mots de passe, informations medicales) sont automatiquement -floutees avant envoi. - -Vous pouvez arreter l'enregistrement ou le replay a tout -moment via le menu ou le bouton "ARRET D'URGENCE". - ============================================================ diff --git a/deploy/lea_package/Lea.bat b/deploy/lea_package/Lea.bat index dd4e17306..9840bb97e 100644 --- a/deploy/lea_package/Lea.bat +++ b/deploy/lea_package/Lea.bat @@ -7,6 +7,14 @@ title Lea - Assistante IA :: --------------------------------------------------------------- cd /d "%~dp0" +:: --------------------------------------------------------------- +:: Fermer les anciennes instances de Lea +:: --------------------------------------------------------------- +taskkill /F /IM pythonw.exe >nul 2>&1 +taskkill /F /IM python.exe >nul 2>&1 +taskkill /F /IM rpa-agent.exe >nul 2>&1 +timeout /t 2 >nul + :: --------------------------------------------------------------- :: Verifier que l'installation a ete faite :: ---------------------------------------------------------------