import { writeFile } from 'fs/promises'; import Handlebars from 'handlebars'; import type { AuditReport } from '../types/index.js'; const HTML_TEMPLATE = ` DeepSweep.ai Audit Report - {{audit_id}}

DeepSweep.ai Auditor Report

MCP Server Security Audit

Overall Risk

{{overall_risk}}

Risk Score

{{risk_score_0_100}}/100

Total Findings

{{findings_count}}

Critical

{{critical_findings}}

Audit Information

Server: {{mcp_server_url}}

Audit ID: {{audit_id}}

Timestamp: {{timestamp}}

Memory Poisoning: {{#if memory_poisoning_detected}}DETECTED{{else}}None{{/if}}

Tool Poisoning: {{#if tool_poisoning_detected}}DETECTED{{else}}None{{/if}}

Compliance Status

NIST AI RMF {{compliance.nist_ai_rmf}}
ISO 42001 {{compliance.iso_42001}}
SOC2 AI {{compliance.soc2_ai}}
EU AI Act {{compliance.eu_ai_act_high_risk}}
{{#if critical_findings_list}}

Critical Findings

{{#each critical_findings_list}}

{{title}}

Severity: CRITICAL | Category: {{category}}
{{description}}
Recommendation: {{recommendation}}
{{/each}}
{{/if}} {{#if recommendations}}

Recommendations

    {{#each recommendations}}
  • {{this}}
  • {{/each}}
{{/if}}
`; export async function generateHTMLReport( report: AuditReport, outputPath: string ): Promise { const template = Handlebars.compile(HTML_TEMPLATE); const data = { ...report, overall_risk_class: report.overall_risk.toLowerCase(), critical_findings_list: report.findings.filter((f) => f.severity === 'CRITICAL'), compliance: { nist_ai_rmf: report.compliance.nist_ai_rmf, nist_ai_rmf_class: report.compliance.nist_ai_rmf.toLowerCase(), iso_42001: report.compliance.iso_42001, iso_42001_class: report.compliance.iso_42001.toLowerCase(), soc2_ai: report.compliance.soc2_ai, soc2_ai_class: report.compliance.soc2_ai.toLowerCase(), eu_ai_act_high_risk: report.compliance.eu_ai_act_high_risk, eu_ai_act_high_risk_class: report.compliance.eu_ai_act_high_risk.toLowerCase(), }, }; const html = template(data); await writeFile(outputPath, html, 'utf-8'); }