From 1b9284cf500c0c3e31e29c84db1a00791c483237 Mon Sep 17 00:00:00 2001
From: EDR Labs <60473889+Edgardo-Ramirez-Canales@users.noreply.github.com>
Date: Thu, 18 Jun 2026 22:05:12 -0600
Subject: [PATCH] =?UTF-8?q?features:=20generaci=C3=B3n=20autom=C3=A1tica?=
=?UTF-8?q?=20de=20informe=20de=20evidencia=20(PDF/HTML)=20(v=C3=ADa=20Git?=
=?UTF-8?q?Hub=20Trending=20Agent)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
agents/report_generator.py | 39 ++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 agents/report_generator.py
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