feat: replay E2E fonctionnel — 25/25 actions, 0 retries, SomEngine via serveur

Validé sur PC Windows (DESKTOP-58D5CAC, 2560x1600) :
- 8 clics résolus visuellement (1 anchor_template, 1 som_text_match, 6 som_vlm)
- Score moyen 0.75, temps moyen 1.6s
- Texte tapé correctement (bonjour, test word, date, email)
- 0 retries, 2 actions non vérifiées (OK)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dom
2026-03-31 14:04:41 +02:00
parent 5e0b53cfd1
commit a7de6a488b
79542 changed files with 6091757 additions and 1 deletions

View File

@@ -0,0 +1,791 @@
# Design Document - Intégration ActionExecutor/WorkflowPipeline
## Vue d'Ensemble
Ce document spécifie le design pour l'intégration complète entre ActionExecutor et WorkflowPipeline dans RPA Vision V3. Cette intégration établit le pipeline d'exécution automatique des workflows, connectant la résolution d'état avec l'exécution d'actions physiques tout en préservant la robustesse et les performances du système.
## Architecture
L'architecture d'intégration suit un modèle de **pipeline d'exécution unifié** qui orchestre tous les composants nécessaires :
```
┌─────────────────────────────────────────────────────────────────┐
│ Architecture d'Intégration ActionExecutor │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ WorkflowPipeline│ │ ExecutionEngine │ │ActionExecutor│ │
│ │ Enhanced │ │ Orchestrator │ │ Enhanced │ │
│ │ │ │ │ │ │ │
│ │ • State Match │◄──►│ • Context Mgmt │◄──►│ • Target │ │
│ │ • Action Plan │ │ • Error Recovery│ │ Resolution│ │
│ │ • Flow Control │ │ • Metrics │ │ • Physical │ │
│ │ • Learning │ │ • Audit Trail │ │ Execution │ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ ExecutionContext│ │ PerformanceOpt │ │ LearningInt │ │
│ │ Manager │ │ Engine │ │ egration │ │
│ │ │ │ │ │ │ │
│ │ • State Tracking│ │ • Cache Mgmt │ │ • Pattern │ │
│ │ • Variable Mgmt │ │ • Resource Opt │ │ Learning │ │
│ │ • History │ │ • Priority Mgmt │ │ • Model │ │
│ │ • Validation │ │ • Adaptive Exec │ │ Update │ │
│ └─────────────────┘ └─────────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
## Composants et Interfaces
### 1. ExecutionEngine - Orchestrateur Central
Le cœur de l'intégration qui coordonne tous les composants :
```python
class ExecutionEngine:
def __init__(self, workflow_pipeline: WorkflowPipeline,
action_executor: ActionExecutor,
target_resolver: TargetResolver,
context_manager: ExecutionContextManager,
performance_optimizer: PerformanceOptimizer,
learning_integration: LearningIntegration):
self.workflow_pipeline = workflow_pipeline
self.action_executor = action_executor
self.target_resolver = target_resolver
self.context_manager = context_manager
self.performance_optimizer = performance_optimizer
self.learning_integration = learning_integration
def execute_workflow_step(self, workflow_id: str,
current_state: ScreenState) -> StepExecutionResult:
"""
Exécute une étape complète de workflow avec intégration totale
Pipeline d'exécution:
1. Préparer le contexte d'exécution
2. Matcher l'état actuel avec le workflow
3. Planifier la prochaine action
4. Résoudre la cible si nécessaire
5. Exécuter l'action physique
6. Capturer les résultats et métriques
7. Mettre à jour le contexte et l'apprentissage
8. Gérer les erreurs et récupérations
"""
execution_id = str(uuid.uuid4())
try:
# 1. Préparer le contexte
context = self.context_manager.prepare_execution_context(
workflow_id, current_state, execution_id
)
# 2. Matcher l'état
match_result = self.workflow_pipeline.match_current_state(
current_state, context
)
if not match_result:
return StepExecutionResult.no_match(execution_id, context)
# 3. Planifier l'action
action_plan = self.workflow_pipeline.get_next_action(
workflow_id, match_result.node_id, context
)
if not action_plan:
return StepExecutionResult.workflow_complete(execution_id, context)
# 4. Optimiser l'exécution
optimized_plan = self.performance_optimizer.optimize_execution(
action_plan, current_state, context
)
# 5. Exécuter avec intégration complète
execution_result = self._execute_action_integrated(
optimized_plan, current_state, context
)
# 6. Post-traitement
final_result = self._post_process_execution(
execution_result, context, match_result
)
return final_result
except Exception as e:
return self._handle_execution_error(e, context, execution_id)
def _execute_action_integrated(self, action_plan: ActionPlan,
current_state: ScreenState,
context: ExecutionContext) -> ActionExecutionResult:
"""Exécution intégrée avec résolution de cible et métriques"""
start_time = time.time()
# Résolution de cible si nécessaire
if action_plan.requires_target_resolution:
target_result = self.target_resolver.resolve_target(
action_plan.target_spec, current_state.ui_elements
)
if not target_result:
raise TargetResolutionError(
f"Cannot resolve target for action {action_plan.action_type}"
)
context.resolved_target = target_result
# Exécution physique
action_result = self.action_executor.execute_action(
action_plan.action, current_state, context
)
# Capture des métriques
execution_time = time.time() - start_time
context.add_metric('execution_time', execution_time)
context.add_metric('target_resolution_time',
getattr(context.resolved_target, 'resolution_time', 0))
return ActionExecutionResult(
success=action_result.success,
action_plan=action_plan,
action_result=action_result,
context=context,
execution_time=execution_time
)
```
### 2. ExecutionContextManager - Gestion du Contexte
Gère le contexte riche d'exécution avec état, variables et historique :
```python
class ExecutionContextManager:
def __init__(self):
self.context_cache = {}
self.variable_manager = VariableManager()
self.history_tracker = ExecutionHistoryTracker()
def prepare_execution_context(self, workflow_id: str,
current_state: ScreenState,
execution_id: str) -> ExecutionContext:
"""
Prépare un contexte d'exécution complet
Composants du contexte:
- État actuel de l'écran
- Variables du workflow
- Historique des actions
- Métriques de performance
- Métadonnées d'audit
"""
# Récupérer ou créer le contexte du workflow
workflow_context = self.context_cache.get(workflow_id)
if not workflow_context:
workflow_context = self._create_workflow_context(workflow_id)
self.context_cache[workflow_id] = workflow_context
# Créer le contexte d'exécution
execution_context = ExecutionContext(
execution_id=execution_id,
workflow_id=workflow_id,
current_state=current_state,
variables=self.variable_manager.get_variables(workflow_id),
history=self.history_tracker.get_recent_history(workflow_id, limit=10),
workflow_context=workflow_context,
created_at=datetime.now(),
metrics={}
)
# Validation du contexte
self._validate_context_integrity(execution_context)
return execution_context
def update_context_after_execution(self, context: ExecutionContext,
execution_result: ActionExecutionResult) -> None:
"""Met à jour le contexte après exécution"""
# Mettre à jour les variables si modifiées
if execution_result.variable_changes:
self.variable_manager.update_variables(
context.workflow_id, execution_result.variable_changes
)
context.variables.update(execution_result.variable_changes)
# Ajouter à l'historique
self.history_tracker.add_execution(
context.workflow_id, execution_result
)
# Mettre à jour les métriques
context.metrics.update(execution_result.metrics)
# Validation post-exécution
self._validate_context_integrity(context)
def _validate_context_integrity(self, context: ExecutionContext) -> None:
"""Valide l'intégrité du contexte et corrige les incohérences"""
# Vérifier la cohérence des variables
if not self.variable_manager.validate_variables(context.variables):
logger.warning(f"Variable inconsistency detected in {context.execution_id}")
context.variables = self.variable_manager.repair_variables(
context.workflow_id, context.variables
)
# Vérifier la cohérence de l'état
if not self._validate_state_consistency(context.current_state):
logger.warning(f"State inconsistency detected in {context.execution_id}")
context.add_flag('state_inconsistency_detected')
# Vérifier l'historique
if not self.history_tracker.validate_history_sequence(context.history):
logger.warning(f"History inconsistency detected in {context.execution_id}")
context.history = self.history_tracker.repair_history(
context.workflow_id
)
@dataclass
class ExecutionContext:
"""Contexte riche d'exécution"""
execution_id: str
workflow_id: str
current_state: ScreenState
variables: Dict[str, Any]
history: List[ActionExecutionResult]
workflow_context: Dict[str, Any]
created_at: datetime
metrics: Dict[str, float]
resolved_target: Optional[ResolvedTarget] = None
flags: Set[str] = field(default_factory=set)
def add_metric(self, name: str, value: float) -> None:
self.metrics[name] = value
def add_flag(self, flag: str) -> None:
self.flags.add(flag)
def has_flag(self, flag: str) -> bool:
return flag in self.flags
```
### 3. RobustnessEngine - Gestion d'Erreurs et Récupération
Système robuste de gestion d'erreurs avec stratégies de récupération :
```python
class RobustnessEngine:
def __init__(self):
self.recovery_strategies = {
TargetNotFoundError: [
SpatialFallbackStrategy(),
SemanticVariantStrategy(),
UIRefreshStrategy()
],
ActionExecutionError: [
RetryWithDelayStrategy(),
AlternativeActionStrategy(),
ContextResetStrategy()
],
InterfaceChangedError: [
DynamicAdaptationStrategy(),
RelearningStrategy(),
FallbackModeStrategy()
]
}
def handle_execution_error(self, error: Exception,
context: ExecutionContext,
action_plan: ActionPlan) -> RecoveryResult:
"""
Gère les erreurs d'exécution avec récupération intelligente
Processus de récupération:
1. Classifier l'erreur
2. Sélectionner les stratégies appropriées
3. Appliquer les stratégies en séquence
4. Évaluer le succès de la récupération
5. Logger pour l'apprentissage
"""
error_type = type(error)
strategies = self.recovery_strategies.get(error_type, [])
recovery_attempts = []
for strategy in strategies:
try:
recovery_result = strategy.attempt_recovery(
error, context, action_plan
)
recovery_attempts.append(recovery_result)
if recovery_result.success:
self._log_successful_recovery(
error, strategy, recovery_result, context
)
return RecoveryResult.success(
strategy=strategy,
result=recovery_result,
attempts=recovery_attempts
)
except Exception as recovery_error:
recovery_attempts.append(RecoveryAttempt.failed(
strategy=strategy,
error=recovery_error
))
# Toutes les récupérations ont échoué
return RecoveryResult.escalate(
original_error=error,
recovery_attempts=recovery_attempts,
context=context
)
def adapt_to_interface_change(self, old_state: ScreenState,
new_state: ScreenState,
context: ExecutionContext) -> AdaptationResult:
"""Adaptation dynamique aux changements d'interface"""
# Analyser les changements
changes = self._analyze_interface_changes(old_state, new_state)
# Adapter le contexte
adapted_context = self._adapt_context_to_changes(context, changes)
# Mettre à jour les stratégies de résolution
updated_strategies = self._update_resolution_strategies(changes)
return AdaptationResult(
adapted_context=adapted_context,
updated_strategies=updated_strategies,
change_summary=changes
)
class SpatialFallbackStrategy(RecoveryStrategy):
def attempt_recovery(self, error: TargetNotFoundError,
context: ExecutionContext,
action_plan: ActionPlan) -> RecoveryAttempt:
"""Récupération par fallback spatial"""
# Essayer des critères spatiaux alternatifs
alternative_specs = self._generate_spatial_alternatives(
action_plan.target_spec
)
for alt_spec in alternative_specs:
target_result = context.target_resolver.resolve_target(
alt_spec, context.current_state.ui_elements
)
if target_result:
return RecoveryAttempt.success(
strategy="spatial_fallback",
recovered_target=target_result,
alternative_spec=alt_spec
)
return RecoveryAttempt.failed(
strategy="spatial_fallback",
reason="No spatial alternatives found"
)
```
### 4. PerformanceOptimizer - Optimisation des Performances
Optimisation intelligente des performances avec cache et priorisation :
```python
class PerformanceOptimizer:
def __init__(self):
self.interface_analysis_cache = LRUCache(maxsize=100)
self.action_execution_cache = LRUCache(maxsize=50)
self.roi_priority_manager = ROIPriorityManager()
def optimize_execution(self, action_plan: ActionPlan,
current_state: ScreenState,
context: ExecutionContext) -> OptimizedActionPlan:
"""
Optimise l'exécution d'une action
Optimisations:
- Réutilisation des analyses d'interface
- Cache des résolutions similaires
- Priorisation des zones d'intérêt
- Adaptation aux ressources disponibles
"""
# Vérifier le cache pour des actions similaires
cache_key = self._compute_action_cache_key(action_plan, current_state)
cached_result = self.action_execution_cache.get(cache_key)
if cached_result and self._is_cache_valid(cached_result, current_state):
return OptimizedActionPlan.from_cache(cached_result, action_plan)
# Optimiser l'analyse d'interface
optimized_analysis = self._optimize_interface_analysis(
current_state, action_plan.target_spec
)
# Prioriser les zones d'intérêt
prioritized_regions = self.roi_priority_manager.prioritize_regions(
current_state, action_plan
)
# Adapter aux ressources disponibles
resource_adapted_plan = self._adapt_to_resources(
action_plan, context.get_available_resources()
)
optimized_plan = OptimizedActionPlan(
original_plan=action_plan,
optimized_analysis=optimized_analysis,
prioritized_regions=prioritized_regions,
resource_adaptations=resource_adapted_plan,
cache_key=cache_key
)
# Mettre en cache pour les futures utilisations
self.action_execution_cache.put(cache_key, optimized_plan)
return optimized_plan
def _optimize_interface_analysis(self, current_state: ScreenState,
target_spec: TargetSpec) -> OptimizedAnalysis:
"""Optimise l'analyse d'interface avec réutilisation"""
state_signature = self._compute_state_signature(current_state)
# Vérifier le cache d'analyse
cached_analysis = self.interface_analysis_cache.get(state_signature)
if cached_analysis:
return cached_analysis.adapt_for_target(target_spec)
# Nouvelle analyse optimisée
analysis = InterfaceAnalyzer.analyze_optimized(
current_state, target_spec
)
self.interface_analysis_cache.put(state_signature, analysis)
return analysis
def _adapt_to_resources(self, action_plan: ActionPlan,
available_resources: ResourceInfo) -> ResourceAdaptedPlan:
"""Adapte le plan aux ressources disponibles"""
if available_resources.memory_pressure > 0.8:
# Réduire la complexité de l'analyse
return action_plan.with_reduced_complexity()
if available_resources.cpu_usage > 0.9:
# Utiliser des stratégies moins intensives
return action_plan.with_lightweight_strategies()
if available_resources.gpu_available:
# Utiliser l'accélération GPU si disponible
return action_plan.with_gpu_acceleration()
return action_plan # Pas d'adaptation nécessaire
```
## Modèles de Données
### StepExecutionResult Complet
```python
@dataclass
class StepExecutionResult:
"""Résultat complet d'exécution d'étape"""
execution_id: str
workflow_id: str
success: bool
step_type: str
# Résultats d'exécution
action_executed: Optional[ActionPlan] = None
target_resolved: Optional[ResolvedTarget] = None
action_result: Optional[ActionResult] = None
# Contexte et état
execution_context: Optional[ExecutionContext] = None
state_before: Optional[ScreenState] = None
state_after: Optional[ScreenState] = None
# Gestion d'erreurs
error: Optional[Exception] = None
recovery_applied: Optional[RecoveryResult] = None
# Métriques et performance
performance_metrics: Dict[str, float] = field(default_factory=dict)
execution_time: float = 0.0
# Apprentissage et audit
learning_data: Dict[str, Any] = field(default_factory=dict)
audit_trail: List[AuditEntry] = field(default_factory=list)
# Métadonnées
created_at: datetime = field(default_factory=datetime.now)
correlation_id: str = field(default_factory=lambda: str(uuid.uuid4()))
@classmethod
def success(cls, execution_id: str, workflow_id: str,
action_result: ActionExecutionResult,
context: ExecutionContext) -> 'StepExecutionResult':
return cls(
execution_id=execution_id,
workflow_id=workflow_id,
success=True,
step_type="action_execution",
action_executed=action_result.action_plan,
target_resolved=context.resolved_target,
action_result=action_result.action_result,
execution_context=context,
performance_metrics=action_result.metrics,
execution_time=action_result.execution_time
)
@classmethod
def no_match(cls, execution_id: str, context: ExecutionContext) -> 'StepExecutionResult':
return cls(
execution_id=execution_id,
workflow_id=context.workflow_id,
success=False,
step_type="state_matching",
execution_context=context,
audit_trail=[AuditEntry.no_match(context.current_state)]
)
```
## Propriétés de Correction
*Une propriété est une caractéristique ou un comportement qui doit être vrai dans toutes les exécutions valides d'un système - essentiellement, une déclaration formelle sur ce que le système doit faire. Les propriétés servent de pont entre les spécifications lisibles par l'homme et les garanties de correction vérifiables par machine.*
### Propriété 1: Intégration WorkflowPipeline-ActionExecutor
*Pour toute* action identifiée par WorkflowPipeline, ActionExecutor doit être utilisé pour l'exécution
**Valide: Exigences 1.1, 1.2**
### Propriété 2: Ordre de résolution de cible
*Pour toute* action nécessitant une résolution de cible, TargetResolver doit être appelé avant ActionExecutor
**Valide: Exigences 1.2**
### Propriété 3: Capture complète des résultats
*Pour toute* exécution d'action complétée, le résultat doit contenir toutes les métadonnées requises
**Valide: Exigences 1.3**
### Propriété 4: Gestion des échecs d'action
*Pour tout* échec d'action, les stratégies de récupération appropriées doivent être appliquées
**Valide: Exigences 1.4, 3.1**
### Propriété 5: Progression automatique du workflow
*Pour tout* workflow en cours, les étapes doivent s'enchaîner automatiquement après succès
**Valide: Exigences 1.5**
### Propriété 6: Contexte d'écran disponible
*Pour toute* action exécutée, l'état actuel de l'écran doit être disponible dans le contexte
**Valide: Exigences 2.1**
### Propriété 7: Accès aux variables du workflow
*Pour toute* action nécessitant des variables, elles doivent être accessibles dans le contexte
**Valide: Exigences 2.2**
### Propriété 8: Historique des actions maintenu
*Pour toute* exécution d'action, l'historique des actions précédentes doit être disponible
**Valide: Exigences 2.3**
### Propriété 9: Mise à jour du contexte
*Pour toute* action modifiant l'état, le contexte doit être mis à jour pour les actions suivantes
**Valide: Exigences 2.4**
### Propriété 10: Détection d'incohérences du contexte
*Pour tout* contexte corrompu détecté, des corrections doivent être appliquées automatiquement
**Valide: Exigences 2.5**
### Propriété 11: Récupération automatique des échecs temporaires
*Pour tout* échec temporaire d'action, une tentative de récupération automatique doit être effectuée
**Valide: Exigences 3.1**
### Propriété 12: Stratégies alternatives de résolution
*Pour tout* échec de résolution de cible, des stratégies alternatives doivent être tentées
**Valide: Exigences 3.2**
### Propriété 13: Adaptation dynamique aux changements d'interface
*Pour tout* changement d'interface détecté, le système doit s'adapter dynamiquement
**Valide: Exigences 3.3**
### Propriété 14: Escalade avec contexte complet
*Pour tout* échec de récupération, l'escalade doit inclure le contexte complet
**Valide: Exigences 3.4**
### Propriété 15: Logging des récupérations réussies
*Pour toute* récupération réussie, elle doit être loggée pour l'apprentissage
**Valide: Exigences 3.5**
### Propriété 16: Mesure du temps de résolution
*Pour toute* action exécutée, le temps de résolution de cible doit être mesuré
**Valide: Exigences 4.1**
### Propriété 17: Mesure du temps d'exécution
*Pour toute* action exécutée, le temps d'exécution physique doit être mesuré
**Valide: Exigences 4.2**
### Propriété 18: Calcul des métriques de succès
*Pour toute* étape de workflow complétée, les métriques de succès doivent être calculées
**Valide: Exigences 4.3**
### Propriété 19: Enregistrement des métriques d'échec
*Pour toute* erreur survenant, les métriques d'échec et de récupération doivent être enregistrées
**Valide: Exigences 4.4**
### Propriété 20: Rapport de performance complet
*Pour tout* workflow terminé, un rapport de performance complet doit être fourni
**Valide: Exigences 4.5**
### Propriété 21: Enregistrement des paramètres de succès
*Pour toute* action exécutée avec succès, les paramètres de succès doivent être enregistrés pour l'apprentissage
**Valide: Exigences 5.1**
### Propriété 22: Renforcement des patterns de matching
*Pour toute* résolution de cible réussie, les patterns de matching doivent être renforcés
**Valide: Exigences 5.2**
### Propriété 23: Apprentissage à partir des récupérations
*Pour toute* action échouant puis réussissant après récupération, la récupération doit être apprise
**Valide: Exigences 5.3**
### Propriété 24: Adaptation des modèles aux évolutions d'interface
*Pour toute* évolution d'interface détectée, les modèles de reconnaissance doivent être adaptés
**Valide: Exigences 5.4**
### Propriété 25: Optimisation basée sur les patterns récurrents
*Pour tout* pattern récurrent détecté, les stratégies de résolution doivent être optimisées
**Valide: Exigences 5.5**
### Propriété 26: Création d'enregistrements d'audit
*Pour toute* étape de workflow commençant, un enregistrement d'audit détaillé doit être créé
**Valide: Exigences 6.1**
### Propriété 27: Enregistrement complet des actions
*Pour toute* action exécutée, tous les paramètres et résultats doivent être enregistrés
**Valide: Exigences 6.2**
### Propriété 28: Documentation du raisonnement
*Pour toute* décision prise par le système, le raisonnement doit être documenté
**Valide: Exigences 6.3**
### Propriété 29: Capture du contexte d'erreur
*Pour toute* erreur survenant, le contexte complet doit être capturé
**Valide: Exigences 6.4**
### Propriété 30: Trace complète pour audit
*Pour toute* exécution terminée, une trace complète doit être fournie pour l'audit
**Valide: Exigences 6.5**
### Propriété 31: Intégration de nouveaux types d'actions
*Pour tout* nouveau type d'action défini, il doit pouvoir être intégré sans modification du pipeline
**Valide: Exigences 7.1**
### Propriété 32: Support des stratégies personnalisées
*Pour toute* stratégie de résolution personnalisée, elle doit être supportée via des plugins
**Valide: Exigences 7.2**
### Propriété 33: Définition de post-conditions personnalisées
*Pour toute* post-condition spécifique requise, elle doit pouvoir être définie
**Valide: Exigences 7.3**
### Propriété 34: Ajout de métriques personnalisées
*Pour toute* métrique personnalisée nécessaire, elle doit pouvoir être ajoutée
**Valide: Exigences 7.4**
### Propriété 35: Réutilisation des analyses d'interface
*Pour toute* résolution de cible multiple nécessaire, les analyses d'interface doivent être réutilisées
**Valide: Exigences 8.2**
### Propriété 36: Optimisation par cache des actions similaires
*Pour toute* action similaire exécutée, l'optimisation par cache doit être utilisée
**Valide: Exigences 8.3**
### Propriété 37: Priorisation des zones d'intérêt
*Pour toute* interface complexe, les zones d'intérêt doivent être priorisées
**Valide: Exigences 8.4**
### Propriété 38: Adaptation aux ressources limitées
*Pour toute* situation de ressources limitées, la stratégie d'exécution doit être adaptée
**Valide: Exigences 8.5**
## Gestion d'Erreurs
### Stratégies de Récupération Spécialisées
1. **SpatialFallbackStrategy** : Utilise des critères spatiaux alternatifs
2. **SemanticVariantStrategy** : Essaie des variantes sémantiques
3. **UIRefreshStrategy** : Rafraîchit l'analyse de l'interface
4. **DynamicAdaptationStrategy** : S'adapte aux changements d'interface
5. **RelearningStrategy** : Réapprend les patterns de l'interface
### Escalade Intelligente
```python
class IntelligentEscalation:
def escalate_with_context(self, error: Exception,
recovery_attempts: List[RecoveryAttempt],
context: ExecutionContext) -> EscalationResult:
"""
Escalade intelligente avec contexte complet
Informations d'escalade:
1. Erreur originale avec stack trace
2. Toutes les tentatives de récupération
3. Contexte d'exécution complet
4. État de l'interface au moment de l'erreur
5. Recommandations pour la résolution manuelle
"""
```
## Stratégie de Test
### Tests Unitaires
- Test d'intégration ExecutionEngine avec tous les composants
- Test de gestion du contexte d'exécution
- Test des stratégies de récupération d'erreurs
- Test des optimisations de performance
- Test de l'apprentissage intégré
- Test de la traçabilité et audit
### Tests de Propriétés
Utilisation du framework Hypothesis avec 100+ itérations par propriété pour toutes les 38 propriétés définies.
### Tests d'Intégration
- Exécution de workflows complets de bout en bout
- Test de performance avec interfaces complexes
- Test de robustesse avec erreurs simulées
- Test d'apprentissage avec évolution d'interface
- Test de charge avec exécution parallèle
### Validation de Non-Régression
**Principe Critique :** L'intégration doit préserver toutes les fonctionnalités existantes de WorkflowPipeline et ActionExecutor tout en ajoutant les nouvelles capacités.
```python
class IntegrationRegressionValidator:
def validate_no_regression(self, before_integration: SystemState,
after_integration: SystemState) -> ValidationResult:
"""
Valide qu'aucune régression n'a été introduite par l'intégration
Vérifications:
1. Toutes les fonctionnalités WorkflowPipeline préservées
2. Toutes les fonctionnalités ActionExecutor préservées
3. Performances maintenues ou améliorées
4. Contrats d'API inchangés
5. Tests existants continuent de passer
"""
```

View File

@@ -0,0 +1,117 @@
# Document d'Exigences - Intégration ActionExecutor/WorkflowPipeline
**Auteur :** Dom, Alice Kiro
**Date :** 20 décembre 2024
## Introduction
Ce document spécifie les exigences pour l'intégration complète entre ActionExecutor et WorkflowPipeline dans RPA Vision V3. Cette intégration est critique pour permettre l'exécution automatique des workflows de bout en bout, en connectant la résolution d'état avec l'exécution d'actions.
## Glossaire
- **ActionExecutor** : Composant responsable de l'exécution physique des actions (clic, saisie, etc.)
- **WorkflowPipeline** : Pipeline principal de traitement et d'exécution des workflows
- **TargetResolver** : Système de résolution des éléments cibles dans l'interface utilisateur
- **ExecutionContext** : Contexte d'exécution contenant l'état actuel et les métadonnées
- **ActionResult** : Résultat détaillé de l'exécution d'une action
- **WorkflowState** : État actuel du workflow en cours d'exécution
- **StepExecution** : Exécution d'une étape individuelle du workflow
- **ExecutionPipeline** : Pipeline complet d'exécution d'une étape de workflow
## Exigences
### Exigence 1
**Histoire Utilisateur :** En tant que système RPA, je veux que WorkflowPipeline exécute automatiquement les actions via ActionExecutor, afin que les workflows puissent fonctionner de manière autonome.
#### Critères d'Acceptation
1. QUAND WorkflowPipeline identifie une action à exécuter, LE Système d'Intégration DOIT utiliser ActionExecutor pour l'exécuter
2. QUAND une action nécessite une résolution de cible, LE Système d'Intégration DOIT utiliser TargetResolver avant l'exécution
3. QUAND l'exécution d'une action est complétée, LE Système d'Intégration DOIT capturer le résultat détaillé
4. QUAND une action échoue, LE Système d'Intégration DOIT gérer l'échec avec les stratégies appropriées
5. QUAND le workflow continue, LE Système d'Intégration DOIT passer automatiquement à l'étape suivante
### Exigence 2
**Histoire Utilisateur :** En tant que développeur de workflow, je veux un contexte d'exécution riche, afin que chaque action ait accès à toutes les informations nécessaires.
#### Critères d'Acceptation
1. QUAND une action est exécutée, LE Système de Contexte DOIT fournir l'état actuel de l'écran
2. QUAND une action nécessite des variables, LE Système de Contexte DOIT fournir les valeurs des variables du workflow
3. QUAND une action est exécutée, LE Système de Contexte DOIT inclure l'historique des actions précédentes
4. QUAND une action modifie l'état, LE Système de Contexte DOIT mettre à jour le contexte pour les actions suivantes
5. QUAND le contexte est corrompu, LE Système de Contexte DOIT détecter et corriger les incohérences
### Exigence 3
**Histoire Utilisateur :** En tant qu'opérateur système, je veux une exécution robuste avec gestion d'erreurs, afin que les workflows puissent récupérer des échecs temporaires.
#### Critères d'Acceptation
1. QUAND une action échoue temporairement, LE Système de Robustesse DOIT tenter une récupération automatique
2. QUAND la résolution de cible échoue, LE Système de Robustesse DOIT essayer des stratégies alternatives
3. QUAND l'interface change pendant l'exécution, LE Système de Robustesse DOIT s'adapter dynamiquement
4. QUAND les tentatives de récupération échouent, LE Système de Robustesse DOIT escalader avec un contexte complet
5. QUAND une récupération réussit, LE Système de Robustesse DOIT logger la récupération pour l'apprentissage
### Exigence 4
**Histoire Utilisateur :** En tant qu'analyste de performance, je veux des métriques détaillées d'exécution, afin de pouvoir optimiser les workflows et diagnostiquer les problèmes.
#### Critères d'Acceptation
1. QUAND une action est exécutée, LE Système de Métriques DOIT mesurer le temps de résolution de cible
2. QUAND une action est exécutée, LE Système de Métriques DOIT mesurer le temps d'exécution physique
3. QUAND une étape de workflow est complétée, LE Système de Métriques DOIT calculer les métriques de succès
4. QUAND des erreurs surviennent, LE Système de Métriques DOIT enregistrer les métriques d'échec et de récupération
5. QUAND le workflow se termine, LE Système de Métriques DOIT fournir un rapport de performance complet
### Exigence 5
**Histoire Utilisateur :** En tant que système d'apprentissage, je veux capturer les données d'exécution, afin d'améliorer continuellement la précision des workflows.
#### Critères d'Acceptation
1. QUAND une action est exécutée avec succès, LE Système d'Apprentissage DOIT enregistrer les paramètres de succès
2. QUAND une résolution de cible réussit, LE Système d'Apprentissage DOIT renforcer les patterns de matching
3. QUAND une action échoue puis réussit après récupération, LE Système d'Apprentissage DOIT apprendre de la récupération
4. QUAND l'interface évolue, LE Système d'Apprentissage DOIT adapter les modèles de reconnaissance
5. QUAND des patterns récurrents sont détectés, LE Système d'Apprentissage DOIT optimiser les stratégies de résolution
### Exigence 6
**Histoire Utilisateur :** En tant qu'administrateur système, je veux une traçabilité complète de l'exécution, afin de pouvoir auditer et déboguer les workflows complexes.
#### Critères d'Acceptation
1. QUAND une étape de workflow commence, LE Système de Traçabilité DOIT créer un enregistrement d'audit détaillé
2. QUAND une action est exécutée, LE Système de Traçabilité DOIT enregistrer tous les paramètres et résultats
3. QUAND des décisions sont prises par le système, LE Système de Traçabilité DOIT documenter le raisonnement
4. QUAND des erreurs surviennent, LE Système de Traçabilité DOIT capturer le contexte complet de l'erreur
5. QUAND l'exécution se termine, LE Système de Traçabilité DOIT fournir une trace complète pour l'audit
### Exigence 7
**Histoire Utilisateur :** En tant que développeur système, je veux une architecture modulaire et extensible, afin que de nouveaux types d'actions puissent être facilement ajoutés.
#### Critères d'Acceptation
1. QUAND un nouveau type d'action est défini, LE Système d'Extensibilité DOIT permettre son intégration sans modification du pipeline
2. QUAND des stratégies de résolution personnalisées sont nécessaires, LE Système d'Extensibilité DOIT les supporter via des plugins
3. QUAND des post-conditions spécifiques sont requises, LE Système d'Extensibilité DOIT permettre leur définition
4. QUAND des métriques personnalisées sont nécessaires, LE Système d'Extensibilité DOIT permettre leur ajout
5. QUAND l'architecture évolue, LE Système d'Extensibilité DOIT maintenir la compatibilité avec les actions existantes
### Exigence 8
**Histoire Utilisateur :** En tant qu'utilisateur du système, je veux une exécution performante, afin que les workflows s'exécutent rapidement même sur des interfaces complexes.
#### Critères d'Acceptation
1. QUAND une étape de workflow est exécutée, LE Système de Performance DOIT compléter en moins de 2 secondes pour des actions simples
2. QUAND des résolutions de cible multiples sont nécessaires, LE Système de Performance DOIT réutiliser les analyses d'interface
3. QUAND des actions similaires sont exécutées, LE Système de Performance DOIT optimiser via la mise en cache
4. QUAND l'interface est complexe, LE Système de Performance DOIT prioriser les zones d'intérêt
5. QUAND les ressources sont limitées, LE Système de Performance DOIT adapter la stratégie d'exécution

View File

@@ -0,0 +1,283 @@
# Plan d'Implémentation - Intégration ActionExecutor/WorkflowPipeline
**Auteur :** Dom, Alice Kiro
**Date :** 20 décembre 2024
- [ ] 1. Créer ExecutionEngine - Orchestrateur Central
- [ ] 1.1 Implémenter la classe ExecutionEngine
- Coordonner WorkflowPipeline, ActionExecutor, TargetResolver
- Gérer le pipeline d'exécution complet
- Intégrer la gestion d'erreurs et les métriques
- _Exigences: 1.1, 1.2, 1.3_
- [ ] 1.2 Implémenter execute_workflow_step()
- Pipeline complet : contexte → match → action → exécution → résultat
- Gestion des cas : no_match, workflow_complete, erreurs
- _Exigences: 1.1, 1.5_
- [ ] 1.3 Implémenter _execute_action_integrated()
- Résolution de cible intégrée si nécessaire
- Exécution physique avec contexte
- Capture des métriques de performance
- _Exigences: 1.2, 4.1, 4.2_
- [ ]* 1.4 Écrire des tests de propriété pour l'intégration de base
- **Propriété 1: Intégration WorkflowPipeline-ActionExecutor**
- **Propriété 2: Ordre de résolution de cible**
- **Valide: Exigences 1.1, 1.2**
- [ ] 2. Implémenter ExecutionContextManager
- [ ] 2.1 Créer la classe ExecutionContextManager
- Gestion du cache de contexte par workflow
- Intégration avec VariableManager et HistoryTracker
- _Exigences: 2.1, 2.2, 2.3_
- [ ] 2.2 Implémenter prepare_execution_context()
- Créer contexte riche avec état, variables, historique
- Validation de l'intégrité du contexte
- _Exigences: 2.1, 2.2, 2.3_
- [ ] 2.3 Implémenter update_context_after_execution()
- Mise à jour des variables modifiées
- Ajout à l'historique d'exécution
- Mise à jour des métriques
- _Exigences: 2.4_
- [ ] 2.4 Implémenter _validate_context_integrity()
- Détection et correction des incohérences
- Réparation automatique des variables et historique
- _Exigences: 2.5_
- [ ] 2.5 Créer ExecutionContext dataclass
- Tous les champs nécessaires avec métadonnées
- Méthodes utilitaires pour métriques et flags
- _Exigences: 2.1, 2.2, 2.3_
- [ ]* 2.6 Écrire des tests de propriété pour la gestion du contexte
- **Propriété 6: Contexte d'écran disponible**
- **Propriété 7: Accès aux variables du workflow**
- **Propriété 8: Historique des actions maintenu**
- **Propriété 9: Mise à jour du contexte**
- **Propriété 10: Détection d'incohérences du contexte**
- **Valide: Exigences 2.1, 2.2, 2.3, 2.4, 2.5**
- [ ] 3. Implémenter RobustnessEngine
- [ ] 3.1 Créer les stratégies de récupération spécialisées
- SpatialFallbackStrategy pour TargetNotFoundError
- SemanticVariantStrategy pour UIElementChangedError
- UIRefreshStrategy, DynamicAdaptationStrategy, RelearningStrategy
- _Exigences: 3.1, 3.2, 3.3_
- [ ] 3.2 Implémenter RobustnessEngine
- Mapping des erreurs aux stratégies
- Séquence de récupération avec logging
- _Exigences: 3.1, 3.4, 3.5_
- [ ] 3.3 Implémenter handle_execution_error()
- Classification des erreurs
- Application séquentielle des stratégies
- Escalade après échec de toutes les stratégies
- _Exigences: 3.1, 3.4_
- [ ] 3.4 Implémenter adapt_to_interface_change()
- Analyse des changements d'interface
- Adaptation du contexte et des stratégies
- _Exigences: 3.3_
- [ ]* 3.5 Écrire des tests de propriété pour la robustesse
- **Propriété 11: Récupération automatique des échecs temporaires**
- **Propriété 12: Stratégies alternatives de résolution**
- **Propriété 13: Adaptation dynamique aux changements d'interface**
- **Propriété 14: Escalade avec contexte complet**
- **Propriété 15: Logging des récupérations réussies**
- **Valide: Exigences 3.1, 3.2, 3.3, 3.4, 3.5**
- [ ] 4. Implémenter PerformanceOptimizer
- [ ] 4.1 Créer PerformanceOptimizer avec caches
- LRUCache pour analyses d'interface et exécutions d'actions
- ROIPriorityManager pour priorisation des zones
- _Exigences: 8.2, 8.3, 8.4_
- [ ] 4.2 Implémenter optimize_execution()
- Vérification du cache pour actions similaires
- Optimisation de l'analyse d'interface
- Priorisation des régions d'intérêt
- Adaptation aux ressources disponibles
- _Exigences: 8.2, 8.3, 8.4, 8.5_
- [ ] 4.3 Implémenter _optimize_interface_analysis()
- Cache d'analyse par signature d'état
- Réutilisation intelligente des analyses
- _Exigences: 8.2_
- [ ] 4.4 Implémenter _adapt_to_resources()
- Adaptation selon la pression mémoire/CPU
- Utilisation de l'accélération GPU si disponible
- _Exigences: 8.5_
- [ ]* 4.5 Écrire des tests de propriété pour les performances
- **Propriété 35: Réutilisation des analyses d'interface**
- **Propriété 36: Optimisation par cache des actions similaires**
- **Propriété 37: Priorisation des zones d'intérêt**
- **Propriété 38: Adaptation aux ressources limitées**
- **Valide: Exigences 8.2, 8.3, 8.4, 8.5**
- [ ] 5. Implémenter le système de métriques intégré
- [ ] 5.1 Étendre ExecutionEngine avec capture de métriques
- Mesure des temps de résolution et d'exécution
- Calcul des métriques de succès/échec
- _Exigences: 4.1, 4.2, 4.3, 4.4_
- [ ] 5.2 Créer MetricsCollector
- Collection automatique des métriques de performance
- Agrégation des métriques par workflow et action
- _Exigences: 4.3, 4.4_
- [ ] 5.3 Implémenter la génération de rapports
- Rapport de performance complet par workflow
- Métriques détaillées par étape
- _Exigences: 4.5_
- [ ]* 5.4 Écrire des tests de propriété pour les métriques
- **Propriété 16: Mesure du temps de résolution**
- **Propriété 17: Mesure du temps d'exécution**
- **Propriété 18: Calcul des métriques de succès**
- **Propriété 19: Enregistrement des métriques d'échec**
- **Propriété 20: Rapport de performance complet**
- **Valide: Exigences 4.1, 4.2, 4.3, 4.4, 4.5**
- [ ] 6. Implémenter l'intégration d'apprentissage
- [ ] 6.1 Créer LearningIntegration
- Enregistrement des paramètres de succès
- Renforcement des patterns de matching
- Apprentissage à partir des récupérations
- _Exigences: 5.1, 5.2, 5.3_
- [ ] 6.2 Implémenter l'adaptation des modèles
- Détection des évolutions d'interface
- Adaptation automatique des modèles de reconnaissance
- _Exigences: 5.4_
- [ ] 6.3 Implémenter l'optimisation basée sur les patterns
- Détection des patterns récurrents
- Optimisation des stratégies de résolution
- _Exigences: 5.5_
- [ ]* 6.4 Écrire des tests de propriété pour l'apprentissage
- **Propriété 21: Enregistrement des paramètres de succès**
- **Propriété 22: Renforcement des patterns de matching**
- **Propriété 23: Apprentissage à partir des récupérations**
- **Propriété 24: Adaptation des modèles aux évolutions d'interface**
- **Propriété 25: Optimisation basée sur les patterns récurrents**
- **Valide: Exigences 5.1, 5.2, 5.3, 5.4, 5.5**
- [ ] 7. Implémenter le système de traçabilité et audit
- [ ] 7.1 Créer AuditTrailManager
- Création d'enregistrements d'audit détaillés
- Enregistrement complet des actions et paramètres
- _Exigences: 6.1, 6.2_
- [ ] 7.2 Implémenter la documentation du raisonnement
- Capture des décisions prises par le système
- Explication du raisonnement pour chaque choix
- _Exigences: 6.3_
- [ ] 7.3 Implémenter la capture du contexte d'erreur
- Contexte complet pour toutes les erreurs
- Stack traces avec métadonnées d'exécution
- _Exigences: 6.4_
- [ ] 7.4 Implémenter la génération de traces complètes
- Trace complète pour audit de bout en bout
- Corrélation entre toutes les étapes d'exécution
- _Exigences: 6.5_
- [ ]* 7.5 Écrire des tests de propriété pour la traçabilité
- **Propriété 26: Création d'enregistrements d'audit**
- **Propriété 27: Enregistrement complet des actions**
- **Propriété 28: Documentation du raisonnement**
- **Propriété 29: Capture du contexte d'erreur**
- **Propriété 30: Trace complète pour audit**
- **Valide: Exigences 6.1, 6.2, 6.3, 6.4, 6.5**
- [ ] 8. Implémenter le système d'extensibilité
- [ ] 8.1 Créer l'architecture de plugins
- Interface pour nouveaux types d'actions
- Système de plugins pour stratégies personnalisées
- _Exigences: 7.1, 7.2_
- [ ] 8.2 Implémenter le support des post-conditions personnalisées
- Framework pour définir des post-conditions spécifiques
- Validation automatique des post-conditions
- _Exigences: 7.3_
- [ ] 8.3 Implémenter le support des métriques personnalisées
- Framework pour ajouter de nouvelles métriques
- Intégration avec le système de métriques existant
- _Exigences: 7.4_
- [ ]* 8.4 Écrire des tests de propriété pour l'extensibilité
- **Propriété 31: Intégration de nouveaux types d'actions**
- **Propriété 32: Support des stratégies personnalisées**
- **Propriété 33: Définition de post-conditions personnalisées**
- **Propriété 34: Ajout de métriques personnalisées**
- **Valide: Exigences 7.1, 7.2, 7.3, 7.4**
- [ ] 9. Créer les modèles de données complets
- [ ] 9.1 Implémenter StepExecutionResult
- Résultat complet avec tous les champs nécessaires
- Méthodes de classe pour différents types de résultats
- _Exigences: 1.3, 4.5, 6.5_
- [ ] 9.2 Implémenter ActionExecutionResult
- Résultat détaillé d'exécution d'action
- Métriques et contexte intégrés
- _Exigences: 1.3, 4.2_
- [ ] 9.3 Implémenter RecoveryResult et RecoveryAttempt
- Modèles pour la gestion des récupérations
- Historique complet des tentatives
- _Exigences: 3.4, 3.5_
- [ ] 9.4 Implémenter OptimizedActionPlan
- Plan d'action optimisé avec cache et adaptations
- Métadonnées d'optimisation
- _Exigences: 8.2, 8.3, 8.5_
- [ ]* 9.5 Écrire des tests de propriété pour les modèles de données
- **Propriété 3: Capture complète des résultats**
- **Valide: Exigences 1.3**
- [ ] 10. Intégration et tests de bout en bout
- [ ] 10.1 Intégrer ExecutionEngine dans WorkflowPipeline
- Remplacer la logique d'exécution existante
- Assurer la compatibilité ascendante
- _Exigences: 1.1, 1.5_
- [ ] 10.2 Intégrer avec ActionExecutor existant
- Étendre ActionExecutor pour supporter le contexte riche
- Préserver toutes les fonctionnalités existantes
- _Exigences: 1.2, 1.4_
- [ ] 10.3 Tests d'intégration de bout en bout
- Workflows complets avec tous les composants intégrés
- Scénarios de récupération d'erreurs
- Tests de performance avec optimisations
- _Toutes les exigences_
- [ ]* 10.4 Écrire des tests de propriété pour l'intégration complète
- **Propriété 4: Gestion des échecs d'action**
- **Propriété 5: Progression automatique du workflow**
- **Valide: Exigences 1.4, 1.5**
- [ ] 11. Validation de non-régression
- [ ] 11.1 Valider que toutes les fonctionnalités WorkflowPipeline sont préservées
- Exécuter tous les tests existants de WorkflowPipeline
- Vérifier que les contrats d'API sont inchangés
- _Toutes les exigences_
- [ ] 11.2 Valider que toutes les fonctionnalités ActionExecutor sont préservées
- Exécuter tous les tests existants d'ActionExecutor
- Vérifier la compatibilité avec les actions existantes
- _Toutes les exigences_
- [ ] 11.3 Tests de performance comparatifs
- Benchmarks avant/après intégration
- Vérifier que les performances sont maintenues ou améliorées
- _Exigences: 8.1, 8.2, 8.3, 8.4, 8.5_
- [ ] 11.4 Tests de charge et stress
- Exécution parallèle de multiples workflows
- Gestion des ressources sous charge
- _Exigences: 8.5_
- [ ] 12. Point de contrôle final - S'assurer que tous les tests passent
- S'assurer que tous les tests passent, demander à l'utilisateur si des questions se posent.
## NOTES IMPORTANTES
### Préservation de la Qualité
- **L'intégration doit préserver toutes les fonctionnalités existantes**
- **Aucune régression dans WorkflowPipeline ou ActionExecutor**
- **Performances maintenues ou améliorées**
### Architecture Modulaire
- **Chaque composant doit être testable indépendamment**
- **Interfaces claires entre tous les composants**
- **Extensibilité pour futures améliorations**
### Robustesse
- **Gestion d'erreurs complète à tous les niveaux**
- **Récupération automatique des échecs temporaires**
- **Adaptation dynamique aux changements d'interface**
### Performance
- **Optimisations intelligentes avec cache**
- **Réutilisation des analyses coûteuses**
- **Adaptation aux ressources disponibles**
### Observabilité
- **Métriques complètes de performance**
- **Traçabilité complète pour audit**
- **Apprentissage intégré pour amélioration continue**