export type AgentPresetType = "image" | "video" | "text"; export type AgentPresetVisibility = "public" | "private"; export type AgentCategoryScope = "public" | "private" | "global"; export type AgentPresetStatus = "active" | "disabled" | "hidden" | "blocked"; export type AgentPresetModeType = | "legacy" | "scene_generation" | "detail_replacement" | "sku_replacement"; export interface AgentSceneGenerationModeConfig { productImageSlotCount: number; includeModelSlot: boolean; allowTemplateReferenceImages: boolean; allowModelOverride: boolean; } export interface AgentDetailReplacementModeConfig { enableTextEditing: boolean; productImageSlotCount: number; includeModelSlot: boolean; } export interface AgentSkuReplacementModeConfig { enableTextEditing: boolean; productImageSlotCount: number; includeModelSlot: boolean; } export interface AgentPresetModeConfig { modeType: AgentPresetModeType; scene: AgentSceneGenerationModeConfig; detail: AgentDetailReplacementModeConfig; sku: AgentSkuReplacementModeConfig; } export interface AgentCategoryPath { productCategory?: string | null; audienceTag?: string | null; usageScenario?: string | null; brand?: string | null; } export type AgentWorkflowStepKey = string; export interface AgentWorkflowOptionUiConfig { key: string; buttonName: string; description?: string | null; previewImageUrl?: string | null; enabled: boolean; sortOrder: number; promptFragment?: string | null; } export interface AgentWorkflowStepUiConfig { key: AgentWorkflowStepKey; title: string; description?: string | null; enabled: boolean; sortOrder: number; options: AgentWorkflowOptionUiConfig[]; } export interface AgentWorkflowUiConfig { inputOptions?: { brands: string[]; stores: string[]; }; steps: AgentWorkflowStepUiConfig[]; } export interface AgentWorkflowMaterialApiConfig { enabled: boolean; baseUrl: string; apiKey: string; } export type AgentWorkflowMaterialQueryType = "sku" | "spu"; export interface AgentWorkflowBrandModelImage { id: string; assetId?: string | null; imageUrl: string; displayName?: string | null; mimeType?: string | null; sortOrder: number; } export interface AgentWorkflowBrandModelEntry { brandName: string; images: AgentWorkflowBrandModelImage[]; } export interface AgentWorkflowBrandModelConfig { entries: AgentWorkflowBrandModelEntry[]; } export interface AgentWorkflowShowcaseConfig { enabled: boolean; title: string; subtitle: string; actionText: string; videoUrl: string; posterUrl?: string | null; overlayText?: string | null; footerText?: string | null; } export interface AgentWorkflowSelectedBrandModel extends AgentWorkflowBrandModelImage { brandName: string; } export type AgentWorkflowMaterialSource = "primary" | "secondary" | "brandModel"; export interface AgentWorkflowMaterialImage { id: string; key: string; label: string; fileName: string; imageUrl: string; assetId?: string | null; mimeType?: string | null; group: "fixed" | "other"; sortOrder: number; } export interface AgentWorkflowMaterialSkuOption { skuName: string; skuId?: string | null; hasWhiteBackground: boolean; whiteBackgroundCount: number; previewImageUrl?: string | null; previewFileName?: string | null; } export interface AgentWorkflowMaterialSearchResult { query: string; queryType?: AgentWorkflowMaterialQueryType; matchedSku: string; matchedSpu?: string | null; materialId?: string | null; productModel?: string | null; zipUrl?: string | null; fixedCount: number; otherCount: number; totalCount: number; images: AgentWorkflowMaterialImage[]; skuOptions?: AgentWorkflowMaterialSkuOption[]; } export interface AgentWorkflowMaterialSelectionState { result?: AgentWorkflowMaterialSearchResult | null; selectedImageIds: string[]; } export interface AgentWorkflowMaterialSelections { primary: AgentWorkflowMaterialSelectionState; secondary: AgentWorkflowMaterialSelectionState; } export interface AgentWorkflowReferenceImage { id: string; source: AgentWorkflowMaterialSource; sourceLabel: string; sku?: string; productModel?: string | null; label: string; name: string; url: string; assetId?: string | null; mimeType?: string | null; } export interface AgentWorkflowComposerSelection { stepKey: AgentWorkflowStepKey; stepTitle: string; optionKey: string; optionName: string; promptFragment?: string | null; } export interface AgentWorkflowComposerContext { primarySku?: string; secondarySku?: string; brand?: string; store?: string; selections: AgentWorkflowComposerSelection[]; referenceImages: AgentWorkflowReferenceImage[]; summaryText: string; promptText: string; } export interface AgentDetailReplacementReferenceItem { id: string; label: string; imageUrl?: string | null; candidateId?: string | null; sortOrder?: number; assignedProductIndex?: number | null; } export interface AgentModeReferenceCandidate { id: string; materialId?: string | null; taskNo?: string | null; productModel?: string | null; categoryName?: string | null; shopName?: string | null; sceneName?: string | null; uploadedAt?: string | null; isFullSet: boolean; mainImageUrls: string[]; skuImageUrls: string[]; detailImageUrls: string[]; allImageUrls: string[]; } export interface AgentDetailReplacementState { query: string; queryType: AgentWorkflowMaterialQueryType; candidates: AgentModeReferenceCandidate[]; selectedCandidateId?: string | null; references: AgentDetailReplacementReferenceItem[]; } export interface AgentSkuReplacementState { query: string; queryType: AgentWorkflowMaterialQueryType; candidates: AgentModeReferenceCandidate[]; selectedCandidateId?: string | null; references: AgentDetailReplacementReferenceItem[]; } export interface AgentModeWorkspaceState { detailReplacement: AgentDetailReplacementState; skuReplacement: AgentSkuReplacementState; } export interface AgentWorkflowPersistedState { inputs: { primarySku: string; secondarySku: string; brand: string; store: string; }; materials?: AgentWorkflowMaterialSelections; selections: Partial>; selectedBrandModel?: AgentWorkflowSelectedBrandModel | null; selectedAgentPresetId?: string | null; currentStage?: "workflow" | "mode"; agentModeState?: AgentModeWorkspaceState; } export interface AgentCategoryTreeConfig { productCategories: string[]; audienceTags: string[]; usageScenarios: string[]; brands: string[]; } 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; secondaryType?: string | null; visibility: AgentPresetVisibility; categoryId?: string | null; categoryPath?: AgentCategoryPath | 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; secondaryType?: string | null; visibility: AgentPresetVisibility; categoryPath?: AgentCategoryPath | null; description?: string; defaultModelId: string; defaultParams?: Record; avatarAssetId?: string; slots: AgentPresetSlot[]; } export interface AgentUpdatePayload { name?: string; type?: AgentPresetType; secondaryType?: string | null; visibility?: AgentPresetVisibility; categoryPath?: AgentCategoryPath | null; description?: string | null; defaultModelId?: string; defaultParams?: Record | null; avatarAssetId?: string | null; slots?: AgentPresetSlot[]; status?: AgentPresetStatus; } export interface AgentCategoryCreatePayload { name: string; scope?: "public" | "private"; }