import { z } from 'zod'; import { isoDateTimeSchema } from '@moonshot-ai/agent-core-v2/_base/utils/isoDateTime'; export const questionOptionSchema = z.object({ id: z.string().min(1), label: z.string().min(1), description: z.string().optional(), }); export type QuestionOption = z.infer; export const questionItemSchema = z.object({ id: z.string().min(1), question: z.string().min(1), header: z.string().optional(), body: z.string().optional(), options: z.array(questionOptionSchema).min(2).max(4), multi_select: z.boolean().optional(), allow_other: z.boolean().optional(), other_label: z.string().optional(), other_description: z.string().optional(), }); export type QuestionItem = z.infer; export const questionRequestSchema = z.object({ question_id: z.string().min(1), session_id: z.string().min(1), turn_id: z.number().int().nonnegative().optional(), tool_call_id: z.string().min(1).optional(), questions: z.array(questionItemSchema).min(1).max(4), created_at: isoDateTimeSchema, }); export type QuestionRequest = z.infer; export const questionAnswerSchema = z.discriminatedUnion('kind', [ z.object({ kind: z.literal('single'), option_id: z.string().min(1) }), z.object({ kind: z.literal('multi'), option_ids: z.array(z.string().min(1)).min(1) }), z.object({ kind: z.literal('other'), text: z.string() }), z.object({ kind: z.literal('multi_with_other'), option_ids: z.array(z.string().min(1)), other_text: z.string(), }), z.object({ kind: z.literal('skipped') }), ]); export type QuestionAnswer = z.infer; export const questionAnswerMethodSchema = z.enum(['enter', 'space', 'number_key', 'click']); export type QuestionAnswerMethod = z.infer; export const questionResponseSchema = z.object({ answers: z.record(z.string().min(1), questionAnswerSchema), method: questionAnswerMethodSchema.optional(), note: z.string().optional(), }); export type QuestionResponse = z.infer;