from typing import List, Optional from pydantic import BaseModel, Field class ScheduleRequest(BaseModel): text: str current_time: Optional[str] = None class ManualTaskRequest(BaseModel): title: str description: str start_time: str end_time: str priority: str = "medium" tags: List[str] = [] reminder: Optional[str] = None requirement_node_id: Optional[str] = None requirement_node_title: Optional[str] = None requirement_node_path: Optional[str] = None requirement_node_path_titles: List[str] = Field(default_factory=list) requirement_node_path_ids: List[str] = Field(default_factory=list) requirement_node_depth: Optional[int] = None requirement_document_id: Optional[str] = None requirement_document_name: Optional[str] = None class TTSRequest(BaseModel): text: str speech_text: Optional[str] = None speech_prompt: Optional[str] = None rewrite_for_speech: bool = False class AuthSignupRequest(BaseModel): name: str email: str password: str class AuthLoginRequest(BaseModel): email: str password: str class TeamCreateRequest(BaseModel): name: str description: Optional[str] = "" class TeamMemberRequest(BaseModel): user_id: str class ProjectCreateRequest(BaseModel): name: str description: Optional[str] = "" team_ids: List[str] = Field(default_factory=list) member_ids: List[str] = Field(default_factory=list) class ProjectUpdateRequest(BaseModel): name: Optional[str] = None description: Optional[str] = None team_ids: Optional[List[str]] = None member_ids: Optional[List[str]] = None class IssueCreateRequest(BaseModel): title: str description: Optional[str] = "" severity: str = "medium" status: str = "open" assignee_id: Optional[str] = None tags: List[str] = Field(default_factory=list) requirement_text: Optional[str] = None requirement_node_id: Optional[str] = None requirement_node_title: Optional[str] = None requirement_node_path: Optional[str] = None requirement_node_path_titles: List[str] = Field(default_factory=list) requirement_node_path_ids: List[str] = Field(default_factory=list) requirement_node_depth: Optional[int] = None requirement_document_id: Optional[str] = None requirement_document_name: Optional[str] = None position_order: Optional[int] = None attachment_urls: List[str] = Field(default_factory=list) class IssueUpdateRequest(BaseModel): title: Optional[str] = None description: Optional[str] = None severity: Optional[str] = None status: Optional[str] = None assignee_id: Optional[str] = None tags: Optional[List[str]] = None attachment_urls: Optional[List[str]] = None requirement_node_id: Optional[str] = None requirement_node_title: Optional[str] = None requirement_node_path: Optional[str] = None requirement_node_path_titles: Optional[List[str]] = None requirement_node_path_ids: Optional[List[str]] = None requirement_node_depth: Optional[int] = None requirement_document_id: Optional[str] = None requirement_document_name: Optional[str] = None position_order: Optional[int] = None class IssueReorderRequest(BaseModel): position_order: int class ProjectSuggestRequest(BaseModel): requirement_text: str class TeamChatRequest(BaseModel): team_id: str project_id: Optional[str] = None message: str issue_anchor_id: Optional[str] = None allow_auto_tool_call: bool = False doc_qa_only: bool = False preferred_requirement_node_id: Optional[str] = None selected_message_ids: List[str] = Field(default_factory=list) document_ids: List[str] = Field(default_factory=list) attachment_urls: List[str] = Field(default_factory=list) require_bot_mention: bool = True class TeamChatMessageRequest(BaseModel): message: str project_id: Optional[str] = None attachment_urls: List[str] = Field(default_factory=list) class TeamChatToolCreateIssue(BaseModel): title: str description: str = "" severity: str = "medium" status: str = "open" assignee_id: Optional[str] = None tags: List[str] = Field(default_factory=list) requirement_node_id: Optional[str] = None requirement_node_title: Optional[str] = None requirement_node_path: Optional[str] = None requirement_node_path_titles: List[str] = Field(default_factory=list) requirement_node_path_ids: List[str] = Field(default_factory=list) requirement_node_depth: Optional[int] = None requirement_document_id: Optional[str] = None requirement_document_name: Optional[str] = None class TeamChatToolCreateTask(BaseModel): title: str description: str = "" start_time: str end_time: str priority: str = "medium" tags: List[str] = Field(default_factory=list) reminder: Optional[str] = None requirement_node_id: Optional[str] = None requirement_node_title: Optional[str] = None requirement_node_path: Optional[str] = None requirement_node_path_titles: List[str] = Field(default_factory=list) requirement_node_path_ids: List[str] = Field(default_factory=list) requirement_node_depth: Optional[int] = None requirement_document_id: Optional[str] = None requirement_document_name: Optional[str] = None