Refactorisation du code, correction des quelques bugs, Clear de Readme principal, Ajout de l'entrée utilisateur pour la modification du nom de projet

This commit is contained in:
Chevallier
2026-07-17 17:12:25 +02:00
parent 9d464fb261
commit 75e035cc82
12 changed files with 248 additions and 411 deletions

View File

@@ -56,7 +56,7 @@ async def run_dev_agent(spec: dict, qa_feedback: list = None, repo_url: str = No
except Exception as e:
logger.error(f"[Dev Agent] ❌ Échec de la génération/validation : {type(e).__name__}: {str(e)}")
return _generate_fallback_code_output(spec)
return _generate_fallback_code_output(spec, repo_url=repo_url, files=files)
async def _ensure_gitea_repo(base_name: str, repo_url: str = None) -> str:
"""
@@ -189,18 +189,46 @@ async def _deploy_to_gitea(code_data: ProjectCodeOutput, project_title: str, rep
if os.path.exists(work_dir):
shutil.rmtree(work_dir)
def _generate_fallback_code_output(spec: dict) -> dict:
"""Génère un livrable minimal de secours en cas de crash du LLM."""
def _generate_fallback_code_output(spec: dict, repo_url: str = None, files: list = None) -> dict:
"""
Génère un livrable de secours. Récupère et reconstruit l'état du code
à partir des fichiers existants s'ils sont fournis, sinon génère un README d'erreur.
"""
logger.warning("[Dev Agent] Génération du package de secours (Fallback)")
title = spec.get("title", "automation_script")
fallback = ProjectCodeOutput(
spec_title=title,
tree=["main.py", "README.md", "requirements.txt"],
files=[
GeneratedFile(path="main.py", content="import logging\nlogging.basicConfig(level=logging.INFO)\n\ndef main():\n logging.error('Le Dev Agent a rencontré une erreur de génération.')\n\nif __name__ == '__main__':\n main()"),
GeneratedFile(path="README.md", content=f"# {title}\nGénération en mode fallback suite à une erreur technique."),
GeneratedFile(path="requirements.txt", content="# Aucune dépendance externe définie (Fallback)\n")
fallback_files = []
fallback_tree = []
if files:
for f in files:
path = ""
content = ""
if isinstance(f, dict):
path = f.get("path") or f.get("filename") or f.get("name") or ""
content = f.get("content") or f.get("code") or ""
elif hasattr(f, "path") and hasattr(f, "content"):
path = getattr(f, "path", "")
content = getattr(f, "content", "")
if path:
fallback_files.append(GeneratedFile(path=path, content=content))
fallback_tree.append(path)
if not fallback_files:
fallback_files = [
GeneratedFile(
path="README.md",
content=f"# {title}\nErreur interne : le code n'a pas pu être généré par l'agent Dev lors du premier essai."
)
]
fallback_tree = ["README.md"]
fallback = ProjectCodeOutput(
repo_url=repo_url,
spec_title=title,
tree=fallback_tree,
files=fallback_files
)
return fallback.model_dump()

View File

@@ -38,7 +38,7 @@ DERNIÈRE PRÉCISION / INPUT UTILISATEUR :
{user_input}
IMPORTANT : Tu dois impérativement combiner les contraintes énoncées précédemment (comme le langage de programmation choisi, l'OS, etc.) avec cette nouvelle information pour enrichir la spécification existante.
Réponds UNIQUEMENT avec du JSON valide. Aucun texte avant le JSON, aucun texte après le JSON."""
"""
))
try: