import { Type, type Static } from "@sinclair/typebox"; export const QiaoqiaoMemorySchema = Type.Object({ action: Type.Union([ Type.Literal("list"), Type.Literal("behavior_logs"), Type.Literal("create"), Type.Literal("update"), Type.Literal("accept"), Type.Literal("reject"), Type.Literal("delete"), ], { description: "Memory action: list/behavior_logs/create/update/accept/reject/delete.", }), category: Type.Optional( Type.String({ description: "Memory category. Optional for list (omit to fetch all). Required for create.", }), ), content: Type.Optional( Type.String({ description: "Memory content. Required for create; optional for update.", minLength: 1, maxLength: 1000, }), ), memoryId: Type.Optional( Type.String({ description: "Memory ID. Required for update/accept/reject/delete.", minLength: 1, }), ), title: Type.Optional(Type.String({ description: "Optional memory title." })), isPrivate: Type.Optional(Type.Boolean({ description: "Whether memory is private." })), status: Type.Optional( Type.Union([Type.Literal("pending"), Type.Literal("accepted"), Type.Literal("cancelled")], { description: "Optional status for update.", }), ), source: Type.Optional(Type.String({ description: "Optional source for create, default user_upload." })), expiresAt: Type.Optional( Type.Union([ Type.String({ description: "ISO datetime string." }), Type.Null(), ]), ), isTemporary: Type.Optional(Type.Boolean({ description: "Create a pending temporary memory." })), temporaryDays: Type.Optional( Type.Integer({ description: "TTL in days when creating a temporary memory.", minimum: 1, maximum: 365, }), ), from: Type.Optional(Type.String({ description: "Optional ISO datetime lower bound for behavior_logs." })), to: Type.Optional(Type.String({ description: "Optional ISO datetime upper bound for behavior_logs." })), limit: Type.Optional( Type.Integer({ description: "Result limit for list or behavior_logs.", minimum: 1, maximum: 50, }), ), }); export type QiaoqiaoMemoryParams = Static;