ninja-code-guard / app /models /findings.py
NinjainPJs's picture
Fix all ruff lint issues — 0 errors, 92 tests passing
b9da50c
"""Core data models for agent findings and PR reviews."""
from __future__ import annotations
from typing import Literal
from uuid import UUID, uuid4
from pydantic import BaseModel, Field
class Finding(BaseModel):
"""A single finding produced by a domain agent."""
agent: Literal["security", "performance", "style"]
file_path: str
line_start: int
line_end: int
severity: Literal["critical", "high", "medium", "low"]
category: str
title: str
description: str
suggested_fix: str = ""
cwe_id: str | None = None
confidence: float = Field(ge=0.0, le=1.0)
class SynthesizedReview(BaseModel):
"""Final synthesized review output from the Synthesizer Agent."""
health_score: int = Field(ge=0, le=100)
executive_summary: str
recommendation: Literal["approve", "request_changes", "block"]
findings: list[Finding]
critical_count: int = 0
high_count: int = 0
medium_count: int = 0
low_count: int = 0
duration_ms: int = 0
class PRReviewRecord(BaseModel):
"""Database record for a completed PR review."""
id: UUID = Field(default_factory=uuid4)
repo_full_name: str
pr_number: int
commit_sha: str
health_score: int = Field(ge=0, le=100)
critical_count: int = 0
high_count: int = 0
medium_count: int = 0
low_count: int = 0
summary: str = ""
findings: list[Finding] = []
duration_ms: int = 0