From 5c578c191bffcc0ce7b5ca7c9ce1e21d97e64af1 Mon Sep 17 00:00:00 2001 From: icarus Date: Thu, 18 Sep 2025 13:15:58 +0800 Subject: [PATCH] refactor(types): convert AgentSessionMessageEntity interface to zod schema Replace interface with zod schema for better type safety and validation --- src/renderer/src/types/agent.ts | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/renderer/src/types/agent.ts b/src/renderer/src/types/agent.ts index 8b598f1b35..752d9544a2 100644 --- a/src/renderer/src/types/agent.ts +++ b/src/renderer/src/types/agent.ts @@ -2,7 +2,7 @@ * Database entity types for Agent, Session, and SessionMessage * Shared between main and renderer processes */ -import { ModelMessage, TextStreamPart, UIMessageChunk } from 'ai' +import { ModelMessage, modelMessageSchema, TextStreamPart, UIMessageChunk } from 'ai' import { z } from 'zod' export const PermissionModeSchema = z.enum(['default', 'acceptEdits', 'bypassPermissions', 'plan']) @@ -91,15 +91,18 @@ export const AgentSessionEntitySchema = AgentBaseSchema.extend({ export type AgentSessionEntity = z.infer // AgentSessionMessageEntity representing a message within a session -export interface AgentSessionMessageEntity { - id: number // Auto-increment primary key - session_id: string // Reference to session - role: ModelMessage['role'] // 'assistant' | 'user' | 'system' | 'tool' - content: ModelMessage - metadata?: Record // Additional metadata (optional) - created_at: string // ISO timestamp - updated_at: string // ISO timestamp -} +export const AgentSessionMessageEntitySchema = z.object({ + id: z.number(), // Auto-increment primary key + session_id: z.string(), // Reference to session + // manual defined. may not synced with ai sdk definition + role: z.enum(['assistant', 'user', 'system', 'tool']), // 'assistant' | 'user' | 'system' | 'tool' + content: modelMessageSchema, + metadata: z.record(z.string(), z.any()).optional(), // Additional metadata (optional) + created_at: z.iso.datetime(), // ISO timestamp + updated_at: z.iso.datetime() // ISO timestamp +}) + +export type AgentSessionMessageEntity = z.infer // Structured content for session messages that preserves both AI SDK and raw data export interface SessionMessageContent {