import { type Static, Type } from "@sinclair/typebox"; import type { AgentTool, AgentToolResult } from "../../src/types.js"; export interface CalculateResult extends AgentToolResult { content: Array<{ type: "text"; text: string }>; details: undefined; } export function calculate(expression: string): CalculateResult { try { const result = new Function(`return ${expression}`)(); return { content: [{ type: "text", text: `${expression} = ${result}` }], details: undefined }; } catch (e: any) { throw new Error(e.message || String(e)); } } const calculateSchema = Type.Object({ expression: Type.String({ description: "The mathematical expression to evaluate" }), }); type CalculateParams = Static; export const calculateTool: AgentTool = { label: "Calculator", name: "calculate", description: "Evaluate mathematical expressions", parameters: calculateSchema, execute: async (_toolCallId: string, args: CalculateParams) => { return calculate(args.expression); }, };