- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.3 KiB
Tâche 16 Terminée : Convertisseur Visual → WorkflowGraph
✅ Résumé
Le convertisseur de workflows visuels en WorkflowGraph exécutables est maintenant implémenté et testé.
📦 Fichiers Créés
Backend - Services
backend/services/converter.py- Convertisseur Visual → WorkflowGraphbackend/services/__init__.py- Mise à jour avec exports du convertisseur
Tests
backend/test_converter.py- Tests unitaires du convertisseur (5 tests)
API
backend/api/workflows.py- Ajout endpoint/api/workflows/<id>/convert
🎯 Fonctionnalités Implémentées
1. Classe VisualToGraphConverter (Exigences 6.1, 18.1)
converter = VisualToGraphConverter()
workflow_graph = converter.convert(visual_workflow)
Fonctionnalités:
- Validation de la structure avant conversion
- Conversion des nodes visuels en WorkflowNodes
- Conversion des edges visuels en WorkflowEdges
- Détermination automatique des nodes d'entrée/sortie
- Gestion des erreurs avec messages clairs
- Collecte des avertissements
✅ Testé: Conversion de workflows simples et complexes
2. Conversion des Nodes de Base
Types supportés:
click→ Actionmouse_clicktype→ Actiontext_inputwait→ Actionwaitnavigate→ Actionnavigateextract→ Actionextract_datavariable→ Actionset_variable
Mapping automatique:
NODE_TYPE_TO_ACTION = {
'click': 'mouse_click',
'type': 'text_input',
'wait': 'wait',
'navigate': 'navigate',
'extract': 'extract_data',
'variable': 'set_variable'
}
✅ Testé: Tous les types de nodes de base
3. Conversion des Edges avec Actions
Création d'actions:
- Extraction des paramètres du node source
- Création du TargetSpec (by_role, by_text, by_position)
- Création des paramètres d'action
- Support des références de variables
${var}
Exemple:
# Node visuel "type"
parameters = {'target': {'role': 'textfield'}, 'text': '${username}'}
# Converti en Action
action = Action(
type='text_input',
target=TargetSpec(by_role='textfield'),
parameters={'text': '${username}'}
)
✅ Testé: Conversion avec paramètres et variables
4. Validation de Structure
Vérifications:
- Workflow non vide
- Validation des nodes (via
workflow.validate()) - Vérification de l'existence des nodes source/target des edges
- Détection automatique des nodes d'entrée/sortie
Gestion d'erreurs:
try:
workflow_graph = converter.convert(visual_workflow)
except ConversionError as e:
print(f"Erreur: {e}")
errors = converter.get_errors()
warnings = converter.get_warnings()
✅ Testé: Validation et gestion d'erreurs
5. Détermination Entry/Exit Nodes
Algorithme:
- Entry nodes = nodes sans edges entrants
- End nodes = nodes sans edges sortants
- Fallback sur premier/dernier node si nécessaire
- Marquage automatique des nodes (
is_entry,is_end)
✅ Testé: Détection automatique
6. Préservation des Métadonnées
Métadonnées préservées:
- Type visuel du node
- Position et taille
- Paramètres originaux
- Couleur
- Tags et catégorie du workflow
- Créateur et timestamps
Exemple:
node.metadata = {
'visual_type': 'click',
'visual_position': {'x': 100, 'y': 100},
'visual_size': {'width': 200, 'height': 80},
'parameters': {'target': 'button'},
'color': '#4CAF50'
}
✅ Testé: Préservation complète
🔌 Intégration API
Endpoint de Conversion
POST /api/workflows//convert
Convertit un workflow visuel en WorkflowGraph
curl -X POST http://localhost:5002/api/workflows/wf_abc123/convert
Réponse:
{
"workflow_graph": {
"workflow_id": "wf_abc123",
"name": "Mon Workflow",
"nodes": [...],
"edges": [...],
"entry_nodes": ["node_1"],
"end_nodes": ["node_5"]
},
"warnings": [],
"message": "Conversion successful"
}
✅ Implémenté: Endpoint API fonctionnel
📊 Résultats des Tests
Tests Unitaires (test_converter.py)
✅ Test 1: Conversion d'un workflow vide (erreur attendue)
✅ Test 2: Conversion d'un workflow simple (2 nodes, 1 edge)
✅ Test 3: Conversion d'un workflow complexe (4 nodes, 3 edges)
✅ Test 4: Conversion avec variables
✅ Test 5: Fonction utilitaire convert_visual_to_graph
TOUS LES TESTS RÉUSSIS! (5/5)
Couverture des Exigences
| Exigence | Description | Status |
|---|---|---|
| 6.1 | Conversion Visual → WorkflowGraph | ✅ |
| 18.1 | Intégration avec système existant | ✅ |
🚀 Utilisation
Conversion Programmatique
from services.converter import convert_visual_to_graph
from services.serialization import WorkflowDatabase
# Charger un workflow visuel
db = WorkflowDatabase()
visual_workflow = db.load("wf_abc123")
# Convertir
workflow_graph = convert_visual_to_graph(visual_workflow)
# Sauvegarder le WorkflowGraph
workflow_graph.save_to_file(Path("workflows/converted.json"))
Conversion via API
import requests
# Convertir un workflow
response = requests.post(
"http://localhost:5002/api/workflows/wf_abc123/convert"
)
if response.status_code == 200:
result = response.json()
workflow_graph = result['workflow_graph']
warnings = result['warnings']
print(f"Conversion réussie avec {len(warnings)} avertissements")
📝 Notes Techniques
Mapping des Types
Le convertisseur mappe automatiquement les types de nodes visuels vers les types d'actions WorkflowGraph :
| Type Visuel | Type Action | Paramètres |
|---|---|---|
| click | mouse_click | target |
| type | text_input | target, text |
| wait | wait | duration_ms |
| navigate | navigate | url |
| extract | extract_data | variable_name, method |
| variable | set_variable | variable_name, value |
Substitution de Variables
Les références de variables ${var} sont préservées dans les paramètres d'action. La substitution réelle se fait lors de l'exécution.
TargetSpec
Le convertisseur crée des TargetSpec intelligents basés sur les paramètres :
# String simple
'button' → TargetSpec(by_text='button')
# Dict complet
{
'role': 'button',
'text': 'Login',
'position': [100, 200]
} → TargetSpec(
by_role='button',
by_text='Login',
by_position=(100, 200)
)
Templates d'Écran
Chaque WorkflowNode reçoit un ScreenTemplate basique. Dans une implémentation complète, ces templates seraient enrichis avec :
- Embeddings visuels réels
- Contraintes de fenêtre
- Contraintes de texte
- Contraintes UI
🎯 Prochaines Étapes
La tâche 16 est terminée. Les prochaines tâches sont :
- Tâche 17: Implémenter les nodes de logique (Condition et Loop)
- Tâche 18: Intégrer avec ExecutionLoop pour l'exécution réelle
- Tâche 19: Checkpoint - Vérifier que les tests passent
✨ Conclusion
Le convertisseur Visual → WorkflowGraph est maintenant complet et robuste :
- ✅ Conversion de tous les types de nodes de base
- ✅ Conversion des edges avec actions
- ✅ Validation de structure
- ✅ Gestion d'erreurs claire
- ✅ Préservation des métadonnées
- ✅ Intégration API
- ✅ Tests complets (5/5)
Le système est prêt pour l'implémentation des nodes de logique (Condition/Loop) et l'intégration avec ExecutionLoop !