feat: unification VWB ↔ Léa — import/export bidirectionnel
- Workflows appris par Léa visibles dans le VWB ("Appris par Léa")
- Bouton "Importer" pour éditer un workflow appris
- Bouton "Exporter pour Léa" pour rendre un workflow VWB exécutable
- Conversion bidirectionnelle core ↔ VWB via learned_workflow_bridge
- Liste unifiée dans le chat Léa (merged + dédupliquée)
- reload_workflows() sur le streaming server (pas de redémarrage)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -678,6 +678,33 @@ async def list_workflows(machine_id: Optional[str] = None):
|
||||
return result
|
||||
|
||||
|
||||
@app.post("/api/v1/traces/stream/reload-workflows")
|
||||
async def reload_workflows():
|
||||
"""Recharger les workflows depuis le disque.
|
||||
|
||||
Appelé par le VWB après un export-for-lea pour que le streaming server
|
||||
voie immédiatement les nouveaux workflows sans redémarrage.
|
||||
"""
|
||||
count = processor.reload_workflows()
|
||||
return {"success": True, "workflows_count": count}
|
||||
|
||||
|
||||
@app.get("/api/v1/traces/stream/workflow/{workflow_id}")
|
||||
async def get_workflow_detail(workflow_id: str):
|
||||
"""Retourne le détail complet d'un workflow (format core JSON).
|
||||
|
||||
Utilisé par le VWB pour importer un workflow appris qui n'est pas
|
||||
encore sur disque (seulement en mémoire dans le streaming server).
|
||||
"""
|
||||
with processor._data_lock:
|
||||
wf = processor._workflows.get(workflow_id)
|
||||
|
||||
if not wf:
|
||||
raise HTTPException(status_code=404, detail=f"Workflow '{workflow_id}' non trouvé")
|
||||
|
||||
return wf.to_dict()
|
||||
|
||||
|
||||
@app.get("/api/v1/traces/stream/session/{session_id}")
|
||||
async def get_session(session_id: str):
|
||||
"""État d'une session."""
|
||||
|
||||
Reference in New Issue
Block a user