export type TaskStatus = 'pending' | 'uploading' | 'analyzing' | 'searching' | 'processing' | 'exporting' | 'completed' | 'failed'; export type TaskStepId = 'upload' | 'analyze' | 'rules' | 'search' | 'recommend' | 'export'; export interface TaskStep { id: TaskStepId; label: string; status: 'pending' | 'running' | 'done' | 'error'; progress: number; detail?: string; } export interface BriefRequirement { label: string; value: string; confidence: number; } export interface SearchCriteria { platforms: string[]; keywords: string[]; fanRange: { min: number; max: number }; budgetRange: { min: number; max: number }; region?: string; gender?: string; contentTags?: string[]; excludeTags?: string[]; } export interface CandidateCreator { id: string; platform: string; platformUserId: string; displayName: string; profileUrl: string; location: string; fansCount: number; contentTags: string[]; personaTags: string[]; gender?: string; likedCollectCount?: number; contentType?: string; city?: string; geoLocation?: string; xiaohongshuUrl?: string; cooperationMethod?: string; imagePrice: number; videoPrice: number; minPrice: number; cooperationStatus: string; sourceProvider: string; sourceConfidence: number; score?: number; styleMatch?: number; recommendStatus?: '强推荐' | '备选' | '需复核' | '已剔除'; recommendReason?: string; riskNote?: string; } export interface TaskResult { taskId: string; status: TaskStatus; steps: TaskStep[]; requirements?: BriefRequirement[]; searchCriteria?: SearchCriteria; candidates?: CandidateCreator[]; totalPool?: number; candidateCount?: number; strongCount?: number; backupCount?: number; exportUrl?: string; error?: string; createdAt: string; updatedAt: string; } export interface UploadBriefResponse { taskId: string; fileName: string; message: string; localCreatorCount?: number; } export interface TaskProgressEvent { taskId: string; step: TaskStepId; status: 'running' | 'done' | 'error'; progress: number; detail?: string; data?: unknown; }