diff --git a/packages/db/src/migrations/0049_add_message_type.sql b/packages/db/src/migrations/0049_add_message_type.sql new file mode 100644 index 00000000..7b1b33f0 --- /dev/null +++ b/packages/db/src/migrations/0049_add_message_type.sql @@ -0,0 +1 @@ +ALTER TABLE "chat_messages" ADD COLUMN "message_type" text; diff --git a/packages/db/src/schema/chat_messages.ts b/packages/db/src/schema/chat_messages.ts index 0768813d..e3c79daa 100644 --- a/packages/db/src/schema/chat_messages.ts +++ b/packages/db/src/schema/chat_messages.ts @@ -10,6 +10,7 @@ export const chatMessages = pgTable( role: text("role").notNull(), content: text("content").notNull(), agentId: uuid("agent_id"), + messageType: text("message_type"), createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow(), }, diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 447737e5..ca5d16af 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -592,9 +592,11 @@ export { createConversationSchema, updateConversationSchema, createMessageSchema, + handoffSchema, type CreateConversation, type UpdateConversation, type CreateMessage, + type Handoff, } from "./validators/index.js"; export type { diff --git a/packages/shared/src/types/chat.ts b/packages/shared/src/types/chat.ts index a306773e..bd97469b 100644 --- a/packages/shared/src/types/chat.ts +++ b/packages/shared/src/types/chat.ts @@ -27,6 +27,7 @@ export interface ChatMessage { role: "user" | "assistant" | "system"; content: string; agentId: string | null; + messageType: string | null; createdAt: string; updatedAt: string | null; } diff --git a/packages/shared/src/validators/chat.ts b/packages/shared/src/validators/chat.ts index 7b9c99b3..b7a5a3b0 100644 --- a/packages/shared/src/validators/chat.ts +++ b/packages/shared/src/validators/chat.ts @@ -16,8 +16,20 @@ export const createMessageSchema = z.object({ role: z.enum(["user", "assistant", "system"]), content: z.string().min(1).max(100_000), agentId: z.string().uuid().optional(), + messageType: z.string().optional(), +}); + +export const handoffSchema = z.object({ + spec: z.object({ + what: z.string().min(1), + why: z.string().min(1), + constraints: z.string().optional().default(""), + success: z.string().optional().default(""), + }), + targetRole: z.enum(["pm", "engineer", "general"]), }); export type CreateConversation = z.infer; export type UpdateConversation = z.infer; export type CreateMessage = z.infer; +export type Handoff = z.infer;