import { z } from 'zod';
// MCP Message schemas
export const MCPRequestSchema = z.object({
jsonrpc: z.literal('2.0'),
id: z.union([z.string(), z.number()]).optional(), // ID is optional for notifications
method: z.string(),
params: z.any().optional()
});
export const MCPResponseSchema = z.object({
jsonrpc: z.literal('2.0'),
id: z.union([z.string(), z.number()]),
result: z.any().optional(),
error: z.object({
code: z.number(),
message: z.string(),
data: z.any().optional()
}).optional()
});
// Tool input schemas
export const LocalLLMInputSchema = z.object({
provider: z.enum(['ollama', 'lmstudio']),
model: z.string(),
prompt: z.string(),
temperature: z.number().min(0).max(2).optional(),
stream: z.boolean().optional()
});
export const CodeExecuteInputSchema = z.object({
cmd: z.string(),
args: z.array(z.string()).optional(),
cwd: z.string().optional(),
timeoutMs: z.number().default(15000)
});
// AI Coordination schemas
export const InitializeConversationSchema = z.object({
title: z.string(),
objective: z.string(),
orchestrator: z.enum(["claude", "openai", "replit"]).default("claude"),
participants: z.array(z.string()).default(["claude", "openai", "replit"]),
context: z.object({}).default({})
});
export const SendMessageSchema = z.object({
session_id: z.string(),
participant: z.enum(["claude", "openai", "replit"]),
message_type: z.enum(["discussion", "proposal", "agreement", "objection", "question", "decision", "task_assignment"]).default("discussion"),
content: z.string(),
context: z.object({}).default({}),
references_message_id: z.number().optional()
});
export const PlanningSessionSchema = z.object({
session_id: z.string(),
planning_objective: z.string(),
participants: z.array(z.string()),
planning_context: z.object({}).default({})
});
export const TaskAssignmentSchema = z.object({
session_id: z.string(),
assigned_to: z.enum(["claude", "openai", "replit"]),
assigned_by: z.enum(["claude", "openai", "replit"]),
task_description: z.string(),
task_type: z.string(),
parameters: z.object({}).default({}),
planning_session_id: z.number().optional()
});
export const GetConversationStatusSchema = z.object({
session_id: z.string(),
include_full_history: z.boolean().default(false)
});
export const TaskUpdateSchema = z.object({
task_id: z.number(),
status: z.enum(["assigned", "in_progress", "completed", "failed", "delegated"]),
result: z.object({}).default({}),
message: z.string().optional()
});
// Tool response schemas
export const ToolResponseSchema = z.object({
content: z.array(z.object({
type: z.literal('text'),
text: z.string()
}))
});
export type MCPRequest = z.infer<typeof MCPRequestSchema>;
export type MCPResponse = z.infer<typeof MCPResponseSchema>;
export type LocalLLMInput = z.infer<typeof LocalLLMInputSchema>;
export type CodeExecuteInput = z.infer<typeof CodeExecuteInputSchema>;
export type ToolResponse = z.infer<typeof ToolResponseSchema>;