Summary
LangGraph agent called by Stage 5 to synthesise the two-audience Markdown reports. Purely generative — receives structured data, produces narrative. No tools (no file reads, no web access).
Interface
class ReportGenerationAgent:
def __init__(self, llm: BaseChatModel, *, max_iterations: int = 10): ...
def generate(self, scan_data: ScanReportData) -> ReportOutput: ...
ScanReportData: snapshot metadata + all components + all findings (with reachability + exploit details) + all triage history.
ReportOutput: engineering_report: str + executive_summary: str.
Constraints
- No tools — the agent only has access to the data it is passed
- If either output is empty string,
ReportGenerationError is raised by Stage 5
- Must produce ISO 21434 and UNECE R155 framing in the executive summary
LLM provider
Same BaseChatModel instance injected by the CLI — configured via CYBERGUARD_LLM_PROVIDER env var.
Summary
LangGraph agent called by Stage 5 to synthesise the two-audience Markdown reports. Purely generative — receives structured data, produces narrative. No tools (no file reads, no web access).
Interface
ScanReportData: snapshot metadata + all components + all findings (with reachability + exploit details) + all triage history.ReportOutput:engineering_report: str+executive_summary: str.Constraints
ReportGenerationErroris raised by Stage 5LLM provider
Same
BaseChatModelinstance injected by the CLI — configured viaCYBERGUARD_LLM_PROVIDERenv var.