feat(vwb): expose competence yaml catalog

This commit is contained in:
Dom
2026-05-29 11:28:25 +02:00
parent e8a0fb0e42
commit c1a144c673
4 changed files with 302 additions and 3 deletions

View File

@@ -84,6 +84,14 @@ except ImportError:
cv2 = None
np = None
try:
from core.competences.catalog import load_competence_catalog_actions
COMPETENCE_CATALOG_AVAILABLE = True
except ImportError as e:
print(f"⚠️ Catalogue compétences Léa non disponible: {e}")
COMPETENCE_CATALOG_AVAILABLE = False
load_competence_catalog_actions = None
# ============================================================================
# OmniParser (Microsoft) - Détection d'éléments UI avancée
@@ -1068,6 +1076,18 @@ catalog_bp = Blueprint('catalog', __name__, url_prefix='/api/vwb/catalog')
_screen_capturer_instance = None
def _load_lea_competence_actions() -> List[Dict[str, Any]]:
"""Load YAML-backed Lea competences for the VWB catalogue."""
if not COMPETENCE_CATALOG_AVAILABLE or load_competence_catalog_actions is None:
return []
try:
return load_competence_catalog_actions()
except Exception as e:
print(f"⚠️ Erreur chargement catalogue compétences Léa: {e}")
return []
def get_screen_capturer():
"""
Obtient l'instance du ScreenCapturer (initialisation paresseuse).
@@ -1553,6 +1573,9 @@ def list_actions():
}
]
# Ajouter les compétences YAML Léa comme actions testables.
available_actions.extend(_load_lea_competence_actions())
# Filtrer par catégorie
if category_filter:
available_actions = [
@@ -1701,7 +1724,18 @@ Cette action permet d'attendre qu'un élément apparaisse ou disparaisse de l'é
"""
}
action['documentation'] = documentation.get(action_id, "Documentation non disponible")
if action.get("source") == "competence_yaml":
action['documentation'] = """
# Compétence Léa
Cette entrée vient de `data/competences/*.yaml`. Elle représente une compétence apprise
ou candidate, avec méthode, marqueur de succès, message d'échec et gaps runtime.
Le premier usage attendu est le replay supervisé : Léa tente la compétence, l'humain
valide ou corrige, puis les résultats alimentent l'historique d'apprentissage.
"""
else:
action['documentation'] = documentation.get(action_id, "Documentation non disponible")
return jsonify({
"success": True,
@@ -2727,6 +2761,8 @@ def list_categories():
}
"""
try:
competence_action_count = len(_load_lea_competence_actions())
# Définir les catégories disponibles avec métadonnées
available_categories = [
{
@@ -2757,6 +2793,17 @@ def list_categories():
"isEnabled": True
}
]
if competence_action_count:
available_categories.append({
"id": "lea_competence",
"name": "Compétences Léa",
"description": "Compétences YAML candidates ou supervisées à tester",
"icon": "🧠",
"actionCount": competence_action_count,
"color": "#673ab7",
"isEnabled": True
})
return jsonify({
"success": True,
@@ -2793,9 +2840,12 @@ def catalog_health():
# Vérifier les services
screen_capturer = get_screen_capturer()
competence_action_count = len(_load_lea_competence_actions())
services_status = {
"screen_capturer": screen_capturer is not None,
"actions": 7, # Nombre d'actions disponibles
"actions": 7 + competence_action_count,
"lea_competences": competence_action_count,
"screen_capturer_method": getattr(screen_capturer, 'method', 'unavailable') if screen_capturer else 'unavailable'
}
@@ -2834,4 +2884,4 @@ def register_catalog_routes(app):
print(" - GET /api/vwb/catalog/actions/<action_id>")
print(" - POST /api/vwb/catalog/execute")
print(" - POST /api/vwb/catalog/validate")
print(" - GET /api/vwb/catalog/health")
print(" - GET /api/vwb/catalog/health")