package model import "time" type Task struct { AgentRunID string `json:"agentRunId,omitempty" gorm:"size:36;index"` GenerationID string `json:"generationId,omitempty" gorm:"size:36;index"` ApprovalID string `json:"approvalId,omitempty" gorm:"size:160"` AuthorizedChargeMicrocredits int64 `json:"authorizedChargeMicrocredits,omitempty"` ExecutionDiagnosticJSON string `json:"-" gorm:"type:text"` Diagnostic *TaskExecutionDiagnostic `json:"diagnostic,omitempty" gorm:"-"` CancellationSource string `json:"cancellationSource,omitempty" gorm:"size:40"` CancellationActorID string `json:"cancellationActorId,omitempty" gorm:"size:36"` CancellationRequestedAt *time.Time `json:"cancellationRequestedAt,omitempty"` CreationSubmissionID *string `json:"creationSubmissionId,omitempty" gorm:"size:36;uniqueIndex"` ID string `json:"id" gorm:"primaryKey;size:36"` UserID string `json:"userId" gorm:"index;size:36;index:idx_tasks_user_created,priority:1;index:idx_tasks_user_project_created,priority:1"` TraceID string `json:"-" gorm:"index;size:96"` RequestID string `json:"-" gorm:"index;size:96"` ProjectID string `json:"projectId" gorm:"index;size:80;index:idx_tasks_user_project_created,priority:2"` Type string `json:"type" gorm:"index;size:64"` Status TaskStatus `json:"status" gorm:"index;size:24;index:idx_tasks_status_created,priority:1;index:idx_tasks_claim,priority:1;index:idx_tasks_provider_cancel,priority:1"` Stage string `json:"stage" gorm:"size:80"` Progress int `json:"progress"` Prompt string `json:"prompt"` Operation string `json:"operation" gorm:"size:64"` Provider string `json:"provider" gorm:"size:64"` Model string `json:"model" gorm:"size:120"` LogicalModelID string `json:"logicalModelId,omitempty" gorm:"size:36;index"` LogicalModelRevisionID string `json:"logicalModelRevisionId,omitempty" gorm:"size:36;index"` RouteID string `json:"routeId,omitempty" gorm:"size:36;index"` ChannelModelID string `json:"channelModelId,omitempty" gorm:"size:36;index"` // RouteRun 只在用户主动重试时递增;worker 租约恢复不应创建新的路由选择世代。 RouteRun int `json:"-" gorm:"index"` BillingOrderID string `json:"billingOrderId,omitempty" gorm:"index;size:36"` ProviderRequestID string `json:"providerRequestId,omitempty" gorm:"index;size:160"` ProviderCancelStatus ProviderCancelStatus `json:"providerCancelStatus,omitempty" gorm:"index;size:24;index:idx_tasks_provider_cancel,priority:2"` ProviderCancelError string `json:"providerCancelError,omitempty" gorm:"type:text"` ProviderCancelAttempts int `json:"providerCancelAttempts,omitempty"` ProviderCancelRequestedAt *time.Time `json:"providerCancelRequestedAt,omitempty"` ProviderCancelledAt *time.Time `json:"providerCancelledAt,omitempty"` ProviderCancelNextCheckAt *time.Time `json:"providerCancelNextCheckAt,omitempty" gorm:"index:idx_tasks_provider_cancel,priority:3"` PollStage string `json:"pollStage,omitempty" gorm:"size:32"` NextPollAt *time.Time `json:"nextPollAt,omitempty" gorm:"index"` LeaseOwner string `json:"-" gorm:"index;size:120"` LeaseExpiresAt *time.Time `json:"-" gorm:"index;index:idx_tasks_claim,priority:2"` InputJSON string `json:"inputJson" gorm:"type:text"` ResultJSON string `json:"resultJson" gorm:"type:text"` TextDraft string `json:"textDraft,omitempty" gorm:"type:text"` Error string `json:"error"` Attempts int `json:"attempts"` StartedAt *time.Time `json:"startedAt"` CompletedAt *time.Time `json:"completedAt"` CreatedAt time.Time `json:"createdAt" gorm:"index:idx_tasks_user_created,priority:2;index:idx_tasks_status_created,priority:2;index:idx_tasks_claim,priority:3;index:idx_tasks_user_project_created,priority:3"` UpdatedAt time.Time `json:"updatedAt"` } // TaskTextDelta 只保存可回放窗口内的文本增量;最终正文和失败草稿分别归并到 Task.ResultJSON 与 Task.TextDraft。 type TaskTextDelta struct { ID string `json:"id" gorm:"primaryKey;size:36"` UserID string `json:"userId" gorm:"index;size:36;index:idx_task_text_deltas_user_created,priority:1"` TaskID string `json:"taskId" gorm:"index;size:36;uniqueIndex:idx_task_text_deltas_sequence,priority:1"` Sequence int64 `json:"sequence" gorm:"uniqueIndex:idx_task_text_deltas_sequence,priority:2"` Content string `json:"content" gorm:"type:text"` ByteCount int64 `json:"byteCount"` CreatedAt time.Time `json:"createdAt" gorm:"index:idx_task_text_deltas_user_created,priority:2"` ExpiresAt time.Time `json:"expiresAt" gorm:"index"` } type TaskLog struct { ID string `json:"id" gorm:"primaryKey;size:36"` UserID string `json:"userId" gorm:"index;size:36"` TaskID string `json:"taskId" gorm:"index;size:36"` TraceID string `json:"-" gorm:"index;size:96"` RequestID string `json:"-" gorm:"index;size:96"` Level string `json:"level" gorm:"size:24"` Message string `json:"message"` Payload string `json:"payload" gorm:"type:text"` CreatedAt time.Time `json:"createdAt"` } type Result struct { ID string `json:"id" gorm:"primaryKey;size:36"` UserID string `json:"userId" gorm:"index;size:36"` TaskID string `json:"taskId" gorm:"index;size:36"` Kind string `json:"kind" gorm:"size:64"` URL string `json:"url"` Payload string `json:"payload" gorm:"type:text"` CreatedAt time.Time `json:"createdAt"` }