import { z } from 'zod';
// Provider configurations
const BaseProviderConfigSchema = z.object({
type: z.enum(['openai', 'anthropic', 'gemini', 'openrouter']),
apiKey: z.string(),
model: z.string(),
temperature: z.number().min(0).max(1).optional(),
maxTokens: z.number().positive().optional(),
});
const OpenAIConfigSchema = BaseProviderConfigSchema.extend({
type: z.literal('openai'),
topP: z.number().min(0).max(1).optional(),
frequencyPenalty: z.number().min(-2).max(2).optional(),
presencePenalty: z.number().min(-2).max(2).optional(),
});
// Task schemas
const TaskSchema = z.object({
title: z.string(),
description: z.string(),
priority: z.enum(['low', 'medium', 'high']).optional(),
}).catchall(z.any()); // Allow additional properties
const TaskResultSchema = z.object({
success: z.boolean(),
content: z.string(),
toolCalls: z.array(z.any()).optional(),
usage: z.object({
promptTokens: z.number(),
completionTokens: z.number(),
totalTokens: z.number(),
}).optional(),
error: z.string().optional(),
});
// Tool schemas
const ToolDefinitionSchema = z.object({
name: z.string(),
description: z.string(),
parameters: z.any(), // Zod schema or plain object
});
const ToolCallSchema = z.object({
id: z.string(),
type: z.literal('function'),
function: z.object({
name: z.string(),
arguments: z.string(),
}),
});