You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

74 lines
2.9 KiB

import { sqliteTable, text, integer, index, uniqueIndex } from "drizzle-orm/sqlite-core";
import { users } from "./auth";
// ============ AgentSession(agent 会话表)============
export const agentSessions = sqliteTable(
"agent_sessions",
{
id: text("id").primaryKey(),
userId: integer("user_id").references(() => users.id, { onDelete: "cascade" }),
tempToken: text("temp_token", { length: 64 }),
title: text("title", { length: 100 }).notNull().default("新对话"),
modelId: integer("model_id"),
enableThinking: integer("enable_thinking").default(1).notNull(),
enableTools: integer("enable_tools").default(1).notNull(),
lastActiveAt: integer("last_active_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
expiresAt: integer("expires_at", { mode: "timestamp_ms" }),
deletedAt: integer("deleted_at", { mode: "timestamp_ms" }),
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
updatedAt: integer("updated_at", { mode: "timestamp_ms" })
.defaultNow()
.$onUpdate(() => new Date())
.notNull(),
},
(table) => [
index("idx_agent_sessions_user_deleted").on(table.userId, table.deletedAt),
index("idx_agent_sessions_temp_token").on(table.tempToken),
],
);
// ============ AgentMessage(agent 消息表)============
export const agentMessages = sqliteTable(
"agent_messages",
{
id: text("id").primaryKey(),
sessionId: text("session_id")
.notNull()
.references(() => agentSessions.id, { onDelete: "cascade" }),
role: text("role", { length: 20 }).notNull(),
content: text("content").notNull().default(""),
parts: text("parts"),
modelId: integer("model_id"),
inputTokens: integer("input_tokens"),
outputTokens: integer("output_tokens"),
sortOrder: integer("sort_order").notNull(),
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
},
(table) => [
index("idx_agent_messages_session_sort").on(table.sessionId, table.sortOrder),
],
);
// ============ AgentMessageFeedback(agent 消息反馈表)============
export const agentMessageFeedback = sqliteTable(
"agent_message_feedback",
{
id: integer("id").primaryKey({ autoIncrement: true }),
messageId: text("message_id")
.notNull()
.references(() => agentMessages.id, { onDelete: "cascade" }),
userId: integer("user_id")
.notNull()
.references(() => users.id, { onDelete: "cascade" }),
feedback: text("feedback", { length: 10 }).notNull(),
comment: text("comment"),
createdAt: integer("created_at", { mode: "timestamp_ms" }).defaultNow().notNull(),
updatedAt: integer("updated_at", { mode: "timestamp_ms" })
.defaultNow()
.$onUpdate(() => new Date())
.notNull(),
},
(table) => [
uniqueIndex("idx_agent_feedback_message_user").on(table.messageId, table.userId),
],
);