export type AgentPresetType = "image" | "video"; export type AgentPresetVisibility = "public" | "private"; export type AgentCategoryScope = "public" | "private" | "global"; export type AgentPresetStatus = "active" | "disabled" | "hidden" | "blocked"; export interface AgentCategory { id: string; name: string; slug: string; scope: AgentCategoryScope; createdBy?: string | null; sortOrder: number; isEnabled: boolean; createdAt: string | Date; updatedAt: string | Date; } export interface AgentReferenceAsset { id: string; assetId: string; sortOrder: number; originalUrl: string; previewUrl?: string | null; thumbnailUrl?: string | null; mimeType?: string | null; displayName?: string | null; } export interface AgentPresetSlot { id?: string; slotIndex: number; title?: string | null; promptTemplate: string; defaultParams?: Record | null; requireUpload?: boolean; uploadLabel?: string | null; referenceAssets?: AgentReferenceAsset[]; referenceAssetIds?: string[]; } export interface AgentModelSummary { id: string; modelId?: string | null; displayName?: string | null; avatarUrl?: string | null; } export interface AgentOwnerSummary { id: string; name?: string | null; email?: string | null; } export interface AgentPreset { id: string; ownerUserId: string; name: string; type: AgentPresetType; visibility: AgentPresetVisibility; categoryId?: string | null; promptTemplate: string; description?: string | null; defaultModelId?: string | null; defaultParams?: Record | null; slotCount: number; requiredUploadCount: number; avatarAssetId?: string | null; avatarUrl?: string | null; coverAssetId?: string | null; status: AgentPresetStatus; sortOrder: number; usageCount: number; lastUsedAt?: string | Date | null; forkedFromPresetId?: string | null; createdAt: string | Date; updatedAt: string | Date; owner?: AgentOwnerSummary | null; category?: AgentCategory | null; defaultModel?: AgentModelSummary | null; slots?: AgentPresetSlot[]; referenceAssets?: AgentReferenceAsset[]; referenceAssetIds?: string[]; referenceAssetCount?: number; } export interface AgentPresetListResponse { categories: AgentCategory[]; public: AgentPreset[]; private: AgentPreset[]; } export interface AgentExecutionSnapshot { id: string; presetId: string; projectId?: string | null; chatId?: string | null; messageId?: string | null; userId: string; presetName: string; presetType: AgentPresetType; visibility: AgentPresetVisibility; categoryId?: string | null; categoryName?: string | null; promptTemplate: string; defaultModelId?: string | null; resolvedModelId?: string | null; defaultParams?: Record | null; slotCount: number; requiredUploadCount: number; slots: Array<{ slotIndex: number; title?: string | null; promptTemplate: string; defaultParams?: Record | null; requireUpload?: boolean; uploadLabel?: string | null; referenceAssetIds: string[]; referenceImageUrls: string[]; }>; referenceAssetIds: string[]; referenceImageUrls: string[]; userInputText?: string | null; requestPayload?: Record | null; createdAt: string | Date; defaultModel?: AgentModelSummary | null; resolvedModel?: AgentModelSummary | null; } export interface AgentCreatePayload { name: string; type: AgentPresetType; visibility: AgentPresetVisibility; categoryId?: string; newCategoryName?: string; description?: string; defaultModelId: string; defaultParams?: Record; avatarAssetId?: string; slots: AgentPresetSlot[]; } export interface AgentUpdatePayload { name?: string; type?: AgentPresetType; visibility?: AgentPresetVisibility; categoryId?: string | null; newCategoryName?: string; description?: string | null; defaultModelId?: string; defaultParams?: Record | null; avatarAssetId?: string | null; slots?: AgentPresetSlot[]; status?: AgentPresetStatus; } export interface AgentCategoryCreatePayload { name: string; scope?: "public" | "private"; }