package store // 数据库映射模型。表名经 GORM NamingStrategy 统一加 sundynix_ 前缀 + 单数: // User → sundynix_user,Task → sundynix_task。 // 约定:均嵌入 BaseModel(雪花字符串 id + created_at/updated_at + 软删 deleted_at); // 建表/改表一律走 AutoMigrate,不手写 DDL。 // User 是平台用户(Users)。 type User struct { BaseModel Email string `gorm:"uniqueIndex;size:255"` Name string `gorm:"size:64"` PasswordHash string `gorm:"size:255" json:"-"` // bcrypt;绝不出 JSON } // Task 是一次提交的 Agent 编排任务(DSL)。 // 业务 id(task_xxx,用于 NATS subject/stream)单列 TaskID,主键统一雪花。 type Task struct { BaseModel TaskID string `gorm:"uniqueIndex;size:64"` // task_xxx Graph string `gorm:"type:jsonb"` // React Flow 导出的 DSL 原文 Status string `gorm:"size:32"` // submitted / running / done / failed / timeout Detail string `gorm:"type:text"` // 失败/超时原因等(状态机回写) // 收尾持久化:供「运行历史复盘」永久回放(Redis 流仅 10min TTL,过期后历史任务靠这两列)。 Output string `gorm:"type:text"` // 最终模型输出(收尾时由网关从流快照落库) Trace string `gorm:"type:text"` // 执行轨迹事件 JSON 数组(存为文本,容忍空串;不在库内查它) } // Eval 是一次任务的自动化评测结果(dispatcher 评完经 NATS 回写,每任务一条,按 task_id upsert)。 type Eval struct { BaseModel TaskID string `gorm:"uniqueIndex;size:64"` Overall float64 // 综合分 [0,1] Rule float64 // 规则分 LLM float64 // LLM 质量分 Faithful float64 // RAG 忠实度分(0=无来源未评) Level string `gorm:"size:16"` // ok / warn / poor Flags string `gorm:"type:text"` // 命中问题(JSON 数组字符串) Reason string `gorm:"type:text"` // 评语 Sources int // 检索来源数 Corrected bool // 是否经低分自动纠偏重生成后采纳(恒温器闭环) } func (Eval) TableName() string { return "sundynix_eval" }