# user_config.py """ Gestion du fichier de configuration utilisateur pour agent_v0. Format : JSON (agent_config.json) à la racine du projet. Exemple de config générée par défaut : { "user_id": "demo_user", "user_label": "Démo agent_v0", "customer": "Clinique Demo", "training_label": "Facturation_T2A_demo", "notes": "Session réelle avec clics + screenshots + key combos.", "mode": "enriched", "screenshot_mode": "crop", "screenshot_crop_width": 900, "screenshot_crop_height": 700, "capture_hover": true, "hover_min_idle_ms": 700, "capture_scroll": true, "network_save_path": "" } """ from __future__ import annotations import json from copy import deepcopy from pathlib import Path from typing import Any, Dict from config import BASE_DIR CONFIG_FILENAME = "agent_config.json" CONFIG_PATH = BASE_DIR / CONFIG_FILENAME DEFAULT_CONFIG: Dict[str, Any] = { "user_id": "demo_user", "user_label": "Démo agent_v0", "customer": "Clinique Demo", "training_label": "Facturation_T2A_demo", "notes": "Session réelle avec clics + screenshots + key combos.", # Mode logique de capture : "light" | "enriched" | "complete" "mode": "enriched", # Screenshot : "full" ou "crop" "screenshot_mode": "crop", "screenshot_crop_width": 900, "screenshot_crop_height": 700, # Infobulles (hover) "capture_hover": True, "hover_min_idle_ms": 700, # Molette / scroll "capture_scroll": True, # Chemin réseau où recopier les sessions (JSON + ZIP) # Exemple : "/mnt/rpa_sessions" "network_save_path": "", } def load_user_config(path: Path | None = None) -> Dict[str, Any]: """ Charge la configuration utilisateur depuis agent_config.json. - Si le fichier n'existe pas, on le crée avec DEFAULT_CONFIG. - Si le fichier existe, on fait un merge avec DEFAULT_CONFIG (les champs manquants prennent la valeur par défaut). """ cfg_path = path or CONFIG_PATH config = deepcopy(DEFAULT_CONFIG) if cfg_path.exists(): try: with cfg_path.open("r", encoding="utf-8") as f: data = json.load(f) if isinstance(data, dict): config.update(data) except Exception as e: # En cas de problème de parse, on garde les defaults print(f"[agent_v0] Erreur de lecture de {cfg_path}, utilisation des valeurs par défaut : {e}") else: # Créer le fichier de config par défaut try: with cfg_path.open("w", encoding="utf-8") as f: json.dump(config, f, ensure_ascii=False, indent=2) print(f"[agent_v0] Fichier de config créé : {cfg_path}") except Exception as e: print(f"[agent_v0] Impossible d'écrire {cfg_path} : {e}") return config