// agent_cli.go - Agent CLI 会话与消息持久化模型 // Logan.Li // 记录 AI 运维 Agent 的每次任务(关联主机 + 用户)及其 ReAct 推理过程 // (思考/工具调用/输出/结果),供前端历史回放与审计。 package model import "time" // AgentCLISession Agent CLI 任务会话 // Logan.Li type AgentCLISession struct { ID uint `gorm:"primarykey" json:"id"` UserID uint `gorm:"index" json:"user_id"` // 发起用户 ServerID uint `gorm:"index" json:"server_id"` // 目标主机 ServerName string `gorm:"size:128" json:"server_name"` // 主机名快照 ServerHost string `gorm:"size:64" json:"server_host"` // 主机 IP 快照 Title string `gorm:"size:255" json:"title"` // 任务标题(query 截断) Status string `gorm:"size:32;default:running" json:"status"` // running/done/aborted/error Provider string `gorm:"size:50" json:"provider"` // LLM 提供商 Model string `gorm:"size:100" json:"model"` // 模型名 Rounds int `json:"rounds"` // ReAct 轮次 TotalTokens int `json:"total_tokens"` // token 消耗 Duration int64 `json:"duration"` // 耗时(毫秒) Error string `gorm:"type:text" json:"error,omitempty"` // 错误信息 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // TableName 表名 // Logan.Li func (AgentCLISession) TableName() string { return "agent_cli_sessions" } // AgentCLIMessage Agent CLI 任务消息(ReAct 推理过程的每一步) // Logan.Li type AgentCLIMessage struct { ID uint `gorm:"primarykey" json:"id"` SessionID uint `gorm:"index;not null" json:"session_id"` Round int `json:"round"` // ReAct 轮次 Type string `gorm:"size:32" json:"type"` // thought/tool_call/tool_result/done/error/session Role string `gorm:"size:32" json:"role"` // user/assistant/tool Content string `gorm:"type:text" json:"content"` // 思考文本/最终答案 ToolName string `gorm:"size:64" json:"tool_name"` // 工具名 ToolArgs string `gorm:"type:text" json:"tool_args"` // 工具参数 JSON ToolOutput string `gorm:"type:text" json:"tool_output"` // 工具输出 Risk string `gorm:"size:32" json:"risk"` // 风险等级 Success bool `json:"success"` Duration string `gorm:"size:32" json:"duration"` // 工具耗时 Tokens int `json:"tokens"` CreatedAt time.Time `gorm:"index" json:"created_at"` } // TableName 表名 // Logan.Li func (AgentCLIMessage) TableName() string { return "agent_cli_messages" }