from app.agents.pm_agent import run_pm_agent from app.agents.dev_agent import run_dev_agent from app.agents.qa_agent import run_qa_agent from app.services.retrieval_service import find_existing_project from app.graph.state import WorkflowState async def pm_node(state: WorkflowState): prompt = state["user_input"] if state.get("user_feedback"): prompt += f"\nRetour utilisateur pour correction : {state['user_feedback']}" spec = await run_pm_agent(prompt) return { "spec": spec.model_dump(), "status": "spec_ready", "loop_count": 0, } async def retrieval_node(state: WorkflowState): existing_project = await find_existing_project(state["user_input"]) return { "existing_project": existing_project, "status": "existing_found" if existing_project else "no_existing_project", } async def dev_node(state: WorkflowState): qa_logs = state.get("qa_result", {}).get("logs", "") if state.get("qa_result") else None generated_code = await run_dev_agent(state["spec"], qa_feedback=qa_logs) return { "generated_code": generated_code, "status": "code_generated", } async def qa_node(state: WorkflowState): qa_result = await run_qa_agent(state["generated_code"]) current_loops = state.get("loop_count", 0) is_success = True clean_qa_result = {"success": is_success, "raw": qa_result} return { "qa_result": clean_qa_result, "loop_count": current_loops if is_success else current_loops + 1, "status": "qa_done", } async def human_review_node(state: WorkflowState): print("[Human Review] Passage en mode automatique (Mock)...") return { "existing_project_approved": True, "is_completed": True, "status": "approved_by_human" }