# models.py from typing import List, Dict, Any, Optional, Literal from pydantic import BaseModel, Field from enum import Enum class TaskStatus(str, Enum): PENDING = "pending" CODING = "coding" REVIEW = "review" REWORK = "rework" APPROVED = "approved" REJECTED = "rejected" FAILED = "failed" class ReviewComment(BaseModel): line: Optional[int] = None file: Optional[str] = None severity: Literal["critical", "major", "minor", "suggestion"] = "major" text: str class ReviewResult(BaseModel): status: Literal["approved", "changes_requested", "rejected"] comments: List[ReviewComment] = Field(default_factory=list) summary: str class CodeSolution(BaseModel): files: Dict[str, str] = Field(default_factory=dict) # filename -> content description: str tests: Dict[str, str] = Field(default_factory=dict) # test_filename -> content class Task(BaseModel): id: str requirement: str status: TaskStatus = TaskStatus.PENDING iteration: int = 0 solution: Optional[CodeSolution] = None last_review: Optional[ReviewResult] = None error_log: List[str] = Field(default_factory=list)