2025-07-23 02:14:43 +08:00
|
|
|
import type { Sandbox } from '@buster/sandbox';
|
|
|
|
import { z } from 'zod';
|
|
|
|
|
2025-07-24 05:53:18 +08:00
|
|
|
// Best practice: Use const object for keys
|
|
|
|
export const DocsAgentContextKeys = {
|
|
|
|
Sandbox: 'sandbox',
|
|
|
|
TodoList: 'todoList',
|
|
|
|
ClarificationQuestions: 'clarificationQuestions',
|
|
|
|
DataSourceId: 'dataSourceId',
|
|
|
|
} as const;
|
|
|
|
|
|
|
|
// Extract type from const object
|
|
|
|
export type DocsAgentContextKey = keyof typeof DocsAgentContextKeys;
|
2025-07-23 02:14:43 +08:00
|
|
|
|
|
|
|
export const ClarifyingQuestionSchema = z.object({
|
|
|
|
issue: z.string(),
|
|
|
|
context: z.string(),
|
|
|
|
clarificationQuestion: z.string(),
|
|
|
|
});
|
|
|
|
|
|
|
|
export type MessageUserClarifyingQuestion = z.infer<typeof ClarifyingQuestionSchema>;
|
|
|
|
|
2025-07-24 05:53:18 +08:00
|
|
|
// Use the const keys in your schema
|
|
|
|
export const DocsAgentContextSchema = z.object({
|
|
|
|
[DocsAgentContextKeys.Sandbox]: z.custom<Sandbox>(
|
|
|
|
(val) => {
|
2025-07-29 01:56:59 +08:00
|
|
|
return val && typeof val === 'object' && 'id' in val && 'fs' in val;
|
2025-07-24 05:53:18 +08:00
|
|
|
},
|
|
|
|
{
|
|
|
|
message: 'Invalid Sandbox instance',
|
|
|
|
}
|
|
|
|
),
|
|
|
|
[DocsAgentContextKeys.TodoList]: z.string(),
|
|
|
|
[DocsAgentContextKeys.ClarificationQuestions]: z.array(ClarifyingQuestionSchema),
|
|
|
|
[DocsAgentContextKeys.DataSourceId]: z.string().uuid(),
|
|
|
|
});
|
|
|
|
|
|
|
|
export type DocsAgentContext = z.infer<typeof DocsAgentContextSchema>;
|