from typing import TypedDict, Optional, Any, Dict, List

class WorkflowState(TypedDict, total=False):
    user_input: str
    spec: dict
    existing_project: Optional[dict]
    existing_project_approved: Optional[bool]  # Choix utilisateur si projet similaire trouvé
    generated_code: Optional[Dict[str, str]]   # Arborescence et code
    qa_result: Optional[dict]                  # Information QA (résumé, feedback technique, si succès ou non)
    loop_count: int                            # Compteur pour la Loop 1 (Dev <-> QA)
    max_iterations: int
    user_feedback: Optional[str]               # Retours si l'utilisateur refuse le code final
    is_completed: bool                         # Statut de livraison finale
    status: str
    chat_history: List[Dict[str, str]]
    