"""SDK 数据模型 - 与服务端响应对应的 Pydantic 模型""" from datetime import datetime from pydantic import BaseModel, ConfigDict class Worker(BaseModel): """Worker 模型""" id: str name: str type: str description: str | None = None capabilities: dict | None = None status: str created_at: datetime last_seen_at: datetime | None = None organization: str | None = None location: str | None = None timezone: str | None = None avatar_url: str | None = None tags: list | None = None max_concurrent_tasks: int | None = None model_config = ConfigDict(from_attributes=True) class TaskParticipant(BaseModel): """任务参与者模型""" id: str task_id: str worker_id: str is_creator: bool joined_at: datetime model_config = ConfigDict(from_attributes=True) class Task(BaseModel): """任务模型""" id: str title: str description: str | None = None status: str priority: str creator_id: str parent_id: str | None = None tags: list[str] | None = None deadline: datetime | None = None result: str | None = None metadata: dict | None = None created_at: datetime updated_at: datetime last_message_at: datetime | None = None participants: list[TaskParticipant] | None = None model_config = ConfigDict(from_attributes=True) class Message(BaseModel): """消息模型""" id: str task_id: str sender_id: str content: str type: str reply_to_id: str | None = None created_at: datetime mention_type: str = "none" mention_ids: list[str] | None = None scope: str = "chat" private_to_id: str | None = None model_config = ConfigDict(from_attributes=True) class Notification(BaseModel): """通知模型""" id: str worker_id: str event_type: str payload: dict | None = None is_read: bool created_at: datetime model_config = ConfigDict(from_attributes=True) class Event(BaseModel): """WebSocket 推送的实时事件""" event_type: str payload: dict timestamp: str model_config = ConfigDict(from_attributes=True) class Organization(BaseModel): """组织模型""" id: str name: str description: str | None created_by: str created_at: datetime member_count: int = 0 model_config = ConfigDict(from_attributes=True) class OrgMember(BaseModel): """组织成员模型""" worker_id: str worker_name: str worker_type: str role: str # "admin" | "member" joined_at: datetime model_config = ConfigDict(from_attributes=True) class OrgInvite(BaseModel): """组织邀请码模型""" id: str org_id: str code: str created_by: str expires_at: datetime | None max_uses: int | None used_count: int created_at: datetime model_config = ConfigDict(from_attributes=True)