"""Task schemas.""" from pydantic import BaseModel, Field from typing import Optional, Any from datetime import datetime class TaskCreate(BaseModel): title: str = Field(..., min_length=1, max_length=500) description: str = "" priority: str = "medium" task_type: str = "single_call" input_data: str = "" # JSON string: {prompt, context, parameters} requires_review: bool = True assignee_id: Optional[int] = None worker_id: Optional[int] = None due_date: Optional[datetime] = None depends_on: str = "[]" class TaskUpdate(BaseModel): title: Optional[str] = None description: Optional[str] = None status: Optional[str] = None priority: Optional[str] = None assignee_id: Optional[int] = None worker_id: Optional[int] = None input_data: Optional[str] = None requires_review: Optional[bool] = None due_date: Optional[datetime] = None depends_on: Optional[str] = None class TaskAssign(BaseModel): assignee_id: Optional[int] = None worker_id: Optional[int] = None class TaskExecute(BaseModel): """Trigger task execution.""" override_input: Optional[str] = None # override task input_data max_retries: int = 3 class TaskResponse(BaseModel): id: int project_id: int title: str description: str status: str priority: str assignee_id: Optional[int] = None worker_id: Optional[int] = None task_type: str input_data: str output_data: Optional[str] = None requires_review: bool review_status: Optional[str] = None due_date: Optional[datetime] = None started_at: Optional[datetime] = None completed_at: Optional[datetime] = None tenant_id: int created_at: datetime updated_at: datetime model_config = {"from_attributes": True} class TaskExecutionResult(BaseModel): """Result of executing a task via AI Worker.""" task_id: int status: str # success, error, needs_review output: str = "" token_usage: int = 0 cost_cents: int = 0 duration_ms: int = 0 error: Optional[str] = None artifact_id: Optional[int] = None