From c2ef322835fcb7e1dfa93c68bd4dc248a9328b93 Mon Sep 17 00:00:00 2001 From: Nexus Dev Date: Wed, 1 Apr 2026 16:37:19 +0000 Subject: [PATCH] feat(21-01): add shared chat types and Zod validators - Create ChatConversation, ChatConversationListItem, ChatMessage, and list response types - Create createConversationSchema, updateConversationSchema, createMessageSchema validators - Re-export from @paperclipai/shared barrel files (types/index.ts, validators/index.ts) --- packages/shared/src/types/chat.ts | 41 +++++++++++++++++++++++++ packages/shared/src/types/index.ts | 1 + packages/shared/src/validators/chat.ts | 23 ++++++++++++++ packages/shared/src/validators/index.ts | 2 ++ 4 files changed, 67 insertions(+) create mode 100644 packages/shared/src/types/chat.ts create mode 100644 packages/shared/src/validators/chat.ts diff --git a/packages/shared/src/types/chat.ts b/packages/shared/src/types/chat.ts new file mode 100644 index 00000000..6bb6bba2 --- /dev/null +++ b/packages/shared/src/types/chat.ts @@ -0,0 +1,41 @@ +export interface ChatConversation { + id: string; + companyId: string; + title: string | null; + agentId: string | null; + pinnedAt: string | null; + archivedAt: string | null; + deletedAt: string | null; + createdAt: string; + updatedAt: string; +} + +export interface ChatConversationListItem { + id: string; + companyId: string; + title: string | null; + agentId: string | null; + pinnedAt: string | null; + archivedAt: string | null; + updatedAt: string; + lastMessagePreview: string | null; +} + +export interface ChatMessage { + id: string; + conversationId: string; + role: "user" | "assistant" | "system"; + content: string; + agentId: string | null; + createdAt: string; +} + +export interface ChatConversationListResponse { + items: ChatConversationListItem[]; + hasMore: boolean; +} + +export interface ChatMessageListResponse { + items: ChatMessage[]; + hasMore: boolean; +} diff --git a/packages/shared/src/types/index.ts b/packages/shared/src/types/index.ts index dfe4b9d5..9f118122 100644 --- a/packages/shared/src/types/index.ts +++ b/packages/shared/src/types/index.ts @@ -179,6 +179,7 @@ export type { CompanyPortabilityImportResult, CompanyPortabilityExportRequest, } from "./company-portability.js"; +export * from "./chat.js"; export type { JsonSchema, PluginJobDeclaration, diff --git a/packages/shared/src/validators/chat.ts b/packages/shared/src/validators/chat.ts new file mode 100644 index 00000000..7b9c99b3 --- /dev/null +++ b/packages/shared/src/validators/chat.ts @@ -0,0 +1,23 @@ +import { z } from "zod"; + +export const createConversationSchema = z.object({ + title: z.string().max(200).optional(), + agentId: z.string().uuid().optional(), +}); + +export const updateConversationSchema = z.object({ + title: z.string().max(200).optional(), + agentId: z.string().uuid().nullable().optional(), + pinnedAt: z.string().datetime().nullable().optional(), + archivedAt: z.string().datetime().nullable().optional(), +}); + +export const createMessageSchema = z.object({ + role: z.enum(["user", "assistant", "system"]), + content: z.string().min(1).max(100_000), + agentId: z.string().uuid().optional(), +}); + +export type CreateConversation = z.infer; +export type UpdateConversation = z.infer; +export type CreateMessage = z.infer; diff --git a/packages/shared/src/validators/index.ts b/packages/shared/src/validators/index.ts index 8d808ab0..4cb5d98c 100644 --- a/packages/shared/src/validators/index.ts +++ b/packages/shared/src/validators/index.ts @@ -1,3 +1,5 @@ +export * from "./chat.js"; + export { instanceGeneralSettingsSchema, patchInstanceGeneralSettingsSchema,