File size: 2,129 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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<typeof questionOptionSchema>;
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<typeof questionItemSchema>;
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<typeof questionRequestSchema>;
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<typeof questionAnswerSchema>;
export const questionAnswerMethodSchema = z.enum(['enter', 'space', 'number_key', 'click']);
export type QuestionAnswerMethod = z.infer<typeof questionAnswerMethodSchema>;
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<typeof questionResponseSchema>;
|