import { z } from "zod"; type ToolContext = { sessionID: string; }; type ToolDefinition = { description: string; args: Shape; execute: ( args: z.infer>, context: ToolContext, ) => Promise | string; }; const defineTool = ( definition: ToolDefinition, ) => { const inputSchema = z.object(definition.args); return { description: definition.description, input: z.toJSONSchema(inputSchema), async execute(input: unknown, context: ToolContext) { return { content: await definition.execute(inputSchema.parse(input), context), }; }, }; }; export const tool = Object.assign(defineTool, { schema: z });