v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution

- 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>
This commit is contained in:
Dom
2026-01-29 11:23:51 +01:00
parent 21bfa3b337
commit a27b74cf22
1595 changed files with 412691 additions and 400 deletions

View File

@@ -0,0 +1,289 @@
# 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 → WorkflowGraph
- `backend/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)
```python
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` → Action `mouse_click`
- `type` → Action `text_input`
- `wait` → Action `wait`
- `navigate` → Action `navigate`
- `extract` → Action `extract_data`
- `variable` → Action `set_variable`
**Mapping automatique**:
```python
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**:
```python
# 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**:
```python
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**:
```python
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/<id>/convert
Convertit un workflow visuel en WorkflowGraph
```bash
curl -X POST http://localhost:5002/api/workflows/wf_abc123/convert
```
**Réponse**:
```json
{
"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
```python
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
```python
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 :
```python
# 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 !