feat: auto-stop enregistrement (1h) + packaging Léa collaborateurs

- 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) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-30 17:26:32 +02:00
parent bbe506c63a
commit 3417f09598
3 changed files with 91 additions and 23 deletions

View File

@@ -16,7 +16,7 @@ import logging
import threading import threading
from .config import ( from .config import (
SESSIONS_ROOT, AGENT_VERSION, SERVER_URL, MACHINE_ID, LOG_RETENTION_DAYS, 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.captor import EventCaptorV1
from .core.executor import ActionExecutorV1 from .core.executor import ActionExecutorV1
@@ -136,6 +136,58 @@ class AgentV1:
time.sleep(30) time.sleep(30)
self.storage.run_auto_cleanup() 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): 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_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) self.session_dir = self.storage.get_session_dir(self.session_id)
@@ -157,6 +209,11 @@ class AgentV1:
# Heartbeat Contextuel (Toutes les 5s par defaut) # Heartbeat Contextuel (Toutes les 5s par defaut)
threading.Thread(target=self._heartbeat_loop, daemon=True).start() 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) # Watchdog de Commandes (GHOST Replay — legacy fichier)
threading.Thread(target=self._command_watchdog_loop, daemon=True).start() threading.Thread(target=self._command_watchdog_loop, daemon=True).start()

View File

@@ -3,7 +3,7 @@
============================================================ ============================================================
Bienvenue ! Lea est une assistante qui apprend vos taches 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 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 : Clic droit sur l'icone pour ouvrir le menu :
- "Apprenez-moi une tache" : Lea observe ce que vous faites - "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. - "C'est termine" : Arrete l'enregistrement quand vous
Cliquez sur une tache pour que Lea la refasse. avez fini la tache. Si vous oubliez, Lea s'arrete
automatiquement apres 1 heure.
- "Discuter avec Lea" : Ouvre une fenetre de discussion - "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 - "ARRET D'URGENCE" : Arrete immediatement tout ce que
Lea est en train de faire. Lea est en train de faire.
@@ -43,6 +45,22 @@ Clic droit sur l'icone pour ouvrir le menu :
- "Quitter Lea" : Ferme le programme. - "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 CONFIGURATION
------------- -------------
@@ -56,30 +74,15 @@ EN CAS DE PROBLEME
------------------- -------------------
- "Python n'est pas installe" : Demandez a votre - "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 depuis https://python.org
- Lea ne demarre pas : Relancez "install.bat" puis - Lea ne demarre pas : Relancez "install.bat" puis
relancez "Lea.bat" relancez "Lea.bat"
- Lea est deconnectee : Verifiez votre connexion - Lea est deconnectee : Verifiez votre connexion
internet/reseau. Le serveur est peut-etre en reseau. Le serveur est peut-etre en maintenance.
maintenance.
- En cas de doute, contactez votre administrateur. - 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".
============================================================ ============================================================

View File

@@ -7,6 +7,14 @@ title Lea - Assistante IA
:: --------------------------------------------------------------- :: ---------------------------------------------------------------
cd /d "%~dp0" 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 :: Verifier que l'installation a ete faite
:: --------------------------------------------------------------- :: ---------------------------------------------------------------