diff --git a/agents/report_generator.py b/agents/report_generator.py new file mode 100644 index 0000000..f48297a --- /dev/null +++ b/agents/report_generator.py @@ -0,0 +1,39 @@ +import json, os, markdown, weasyprint + +def cargar_resultados(ruta_json: str) -> dict: + with open(ruta_json, 'r', encoding='utf-8') as f: + return json.load(f) + +def renderizar_markdown(md_text: str) -> str: + return markdown.markdown(md_text, extensions=['fenced_code', 'tables']) + +def generar_html(datos: dict) -> str: + secciones = [] + secciones.append(f"

{datos.get('problema','Problema')}

") + secciones.append(f"

Resumen de búsqueda

{renderizar_markdown(datos.get('busqueda',''))}") + secciones.append(f"

Candidatos evaluados

{renderizar_markdown(datos.get('candidatos',''))}") + secciones.append(f"

Recomendación y verificación

{renderizar_markdown(datos.get('recomendacion',''))}") + return "\n".join(secciones) + +def guardar_html(html: str, salida: str): + with open(salida, 'w', encoding='utf-8') as f: + f.write(html) + +def generar_pdf(html: str, salida_pdf: str): + weasyprint.HTML(string=html).write_pdf(salida_pdf) + +def main(ruta_json: str, salida_html: str = 'reporte.html', salida_pdf: str = 'reporte.pdf'): + datos = cargar_resultados(ruta_json) + html = generar_html(datos) + guardar_html(html, salida_html) + generar_pdf(html, salida_pdf) + print(f"Informe generado: {os.path.abspath(salida_html)} y {os.path.abspath(salida_pdf)}") + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(description='Genera informe de evidencia para github-solution-research') + parser.add_argument('json', help='Archivo JSON con los resultados de la investigación') + parser.add_argument('--html', default='reporte.html') + parser.add_argument('--pdf', default='reporte.pdf') + args = parser.parse_args() + main(args.json, args.html, args.pdf) \ No newline at end of file