from __future__ import annotations from datetime import datetime from typing import Any from pydantic import BaseModel, ConfigDict, Field from app.core.agent_enums import ( AgentAssetContentType, AgentAssetDomain, AgentAssetStatus, AgentAssetType, AgentReviewStatus, ) class AgentAssetCreate(BaseModel): asset_type: AgentAssetType code: str = Field(min_length=1, max_length=100) name: str = Field(min_length=1, max_length=200) description: str = "" domain: AgentAssetDomain scenario_json: list[Any] = Field(default_factory=list) owner: str = Field(min_length=1, max_length=100) reviewer: str | None = Field(default=None, max_length=100) status: AgentAssetStatus = AgentAssetStatus.DRAFT config_json: dict[str, Any] = Field(default_factory=dict) class AgentAssetUpdate(BaseModel): name: str | None = Field(default=None, min_length=1, max_length=200) description: str | None = None domain: AgentAssetDomain | None = None scenario_json: list[Any] | None = None owner: str | None = Field(default=None, min_length=1, max_length=100) reviewer: str | None = Field(default=None, max_length=100) status: AgentAssetStatus | None = None current_version: str | None = Field(default=None, max_length=30) published_version: str | None = Field(default=None, max_length=30) working_version: str | None = Field(default=None, max_length=30) config_json: dict[str, Any] | None = None class AgentAssetVersionCreate(BaseModel): version: str = Field(min_length=1, max_length=30) content: Any content_type: AgentAssetContentType change_note: str | None = None created_by: str = Field(min_length=1, max_length=100) class RuleMarkdownUpdate(BaseModel): version: str = Field(min_length=1, max_length=30) content: str change_note: str | None = None created_by: str = Field(min_length=1, max_length=100) class AgentAssetReviewCreate(BaseModel): version: str = Field(min_length=1, max_length=30) reviewer: str = Field(min_length=1, max_length=100) review_status: AgentReviewStatus review_note: str | None = None class AgentAssetReviewRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: str asset_id: str version: str reviewer: str review_status: str review_note: str | None reviewed_at: datetime | None created_at: datetime class AgentAssetOnlyOfficeConfigRead(BaseModel): documentServerUrl: str config: dict[str, Any] = Field(default_factory=dict) class AgentAssetOnlyOfficeCallbackRead(BaseModel): error: int = 0 class AgentAssetOnlyOfficeCallbackWrite(BaseModel): model_config = ConfigDict(extra="allow") status: int = Field(description="ONLYOFFICE 回调状态码。") url: str | None = Field(default=None, description="文档下载地址,状态为 2 或 6 时使用。") users: list[str] = Field(default_factory=list, description="当前编辑用户列表。") class AgentAssetVersionTimelineItemRead(BaseModel): event_type: str version: str actor: str event_time: datetime title: str description: str = "" note: str | None = None source_version: str | None = None class AgentAssetSpreadsheetDiffCellRead(BaseModel): sheet_name: str cell: str change_type: str before_value: Any | None = None after_value: Any | None = None class AgentAssetSpreadsheetDiffSheetRead(BaseModel): sheet_name: str change_type: str class AgentAssetVersionCompareRead(BaseModel): base_version: str target_version: str added_sheet_count: int = 0 removed_sheet_count: int = 0 changed_sheet_count: int = 0 changed_cell_count: int = 0 sheet_changes: list[AgentAssetSpreadsheetDiffSheetRead] = Field(default_factory=list) cell_changes: list[AgentAssetSpreadsheetDiffCellRead] = Field(default_factory=list) class AgentAssetVersionRead(BaseModel): model_config = ConfigDict(from_attributes=True) id: str asset_id: str version: str content: Any content_type: str change_note: str | None created_by: str created_at: datetime is_current: bool = False is_published: bool = False is_working: bool = False lifecycle_state: str = "history" class AgentAssetListItem(BaseModel): model_config = ConfigDict(from_attributes=True) id: str asset_type: str code: str name: str description: str domain: str scenario_json: list[Any] owner: str reviewer: str | None status: str current_version: str | None published_version: str | None working_version: str | None config_json: dict[str, Any] created_at: datetime updated_at: datetime class AgentAssetRead(AgentAssetListItem): current_version_content: Any | None = None current_version_content_type: str | None = None current_version_change_note: str | None = None recent_versions: list[AgentAssetVersionRead] = Field(default_factory=list) latest_review: AgentAssetReviewRead | None = None