feat: chat unifié, GestureCatalog, Copilot, Léa UI, extraction données, vérification replay
Refonte majeure du système Agent Chat et ajout de nombreux modules : - Chat unifié : suppression du dual Workflows/Agent Libre, tout passe par /api/chat avec résolution en 3 niveaux (workflow → geste → "montre-moi") - GestureCatalog : 38 raccourcis clavier universels Windows avec matching sémantique, substitution automatique dans les replays, et endpoint /api/gestures - Mode Copilot : exécution pas-à-pas des workflows avec validation humaine via WebSocket (approve/skip/abort) avant chaque action - Léa UI (agent_v0/lea_ui/) : interface PyQt5 pour Windows avec overlay transparent pour feedback visuel pendant le replay - Data Extraction (core/extraction/) : moteur d'extraction visuelle de données (OCR + VLM → SQLite), avec schémas YAML et export CSV/Excel - ReplayVerifier (agent_v0/server_v1/) : vérification post-action par comparaison de screenshots, avec logique de retry (max 3) - IntentParser durci : meilleur fallback regex, type GREETING, patterns améliorés - Dashboard : nouvelles pages gestures, streaming, extractions - Tests : 63 tests GestureCatalog, 47 tests extraction, corrections tests existants - Dépréciation : /api/agent/plan et /api/agent/execute retournent HTTP 410, suppression du code hardcodé _plan_to_replay_actions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -54,32 +54,34 @@ except ImportError as e:
|
||||
VWBActionStatus = None
|
||||
|
||||
|
||||
@unittest.skipUnless(IMPORTS_OK and BaseVWBAction is not None, "Imports VWB non disponibles")
|
||||
class MockVWBAction(BaseVWBAction):
|
||||
"""Action mock pour les tests."""
|
||||
|
||||
def __init__(self, action_id: str, parameters: Optional[Dict[str, Any]] = None, **kwargs):
|
||||
super().__init__(action_id, parameters or {})
|
||||
self.executed = False
|
||||
|
||||
def _execute_impl(self, step_id: str, workflow_id: Optional[str] = None,
|
||||
user_id: Optional[str] = None) -> VWBActionResult:
|
||||
"""Implémentation mock de l'exécution."""
|
||||
self.executed = True
|
||||
|
||||
result = VWBActionResult(
|
||||
action_id=self.action_id,
|
||||
step_id=step_id,
|
||||
status=VWBActionStatus.SUCCESS,
|
||||
workflow_id=workflow_id,
|
||||
user_id=user_id
|
||||
)
|
||||
result.output_data = {"mock": True, "executed": True}
|
||||
return result
|
||||
|
||||
def validate_parameters(self) -> list:
|
||||
"""Validation mock."""
|
||||
return []
|
||||
if IMPORTS_OK and BaseVWBAction is not None:
|
||||
class MockVWBAction(BaseVWBAction):
|
||||
"""Action mock pour les tests."""
|
||||
|
||||
def __init__(self, action_id: str, parameters: Optional[Dict[str, Any]] = None, **kwargs):
|
||||
super().__init__(action_id, parameters or {})
|
||||
self.executed = False
|
||||
|
||||
def _execute_impl(self, step_id: str, workflow_id: Optional[str] = None,
|
||||
user_id: Optional[str] = None) -> VWBActionResult:
|
||||
"""Implémentation mock de l'exécution."""
|
||||
self.executed = True
|
||||
|
||||
result = VWBActionResult(
|
||||
action_id=self.action_id,
|
||||
step_id=step_id,
|
||||
status=VWBActionStatus.SUCCESS,
|
||||
workflow_id=workflow_id,
|
||||
user_id=user_id
|
||||
)
|
||||
result.output_data = {"mock": True, "executed": True}
|
||||
return result
|
||||
|
||||
def validate_parameters(self) -> list:
|
||||
"""Validation mock."""
|
||||
return []
|
||||
else:
|
||||
MockVWBAction = None
|
||||
|
||||
|
||||
@unittest.skipUnless(IMPORTS_OK, "Imports VWB non disponibles")
|
||||
|
||||
Reference in New Issue
Block a user