File size: 1,874 Bytes
a3ecd30 1c77a4c a3ecd30 1c77a4c a3ecd30 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | from app.schemas import AuditReport, Severity
def format_report_markdown(report: AuditReport) -> str:
lines = [
"# SwarmAudit Report",
"",
f"Repository: `{report.repo_url}`",
f"Files scanned: `{report.scanned_file_count}`",
f"Files skipped: `{report.skipped_file_count}`",
f"Findings shown: `{report.displayed_findings_count}` of `{report.total_findings_count}`",
"",
"## Severity Summary",
"",
]
for severity in [Severity.critical, Severity.high, Severity.medium, Severity.low]:
lines.append(f"- **{severity.value}**: {report.severity_summary.get(severity, 0)}")
if report.agent_finding_counts:
lines.extend(["", "## Agent Summary", ""])
for agent_name, count in report.agent_finding_counts.items():
lines.append(f"- **{agent_name}**: {count}")
if report.warnings:
lines.extend(["", "## Warnings", ""])
lines.extend(f"- {warning}" for warning in report.warnings)
lines.extend(["", "## Findings", ""])
if not report.findings:
lines.append("No findings detected by the current MVP agents.")
return "\n".join(lines)
for finding in report.findings:
lines.extend(
[
f"### [{finding.severity.value}] {finding.title}",
"",
f"- File: `{finding.file_path}:{finding.line_start}-{finding.line_end}`",
f"- Agent: `{finding.agent_source}`",
"",
finding.description,
"",
f"**Why it matters:** {finding.why_it_matters}",
"",
"**Suggested fix:**",
"",
"```text",
finding.suggested_fix,
"```",
"",
]
)
return "\n".join(lines)
|