import { type Static, Type } from "@sinclair/typebox"; import type { AgentTool, AgentToolResult } from "../../src/types.js"; export interface GetCurrentTimeResult extends AgentToolResult<{ utcTimestamp: number; }> {} export async function getCurrentTime( timezone?: string, ): Promise { const date = new Date(); if (timezone) { try { const timeStr = date.toLocaleString("en-US", { timeZone: timezone, dateStyle: "full", timeStyle: "long", }); return { content: [{ type: "text", text: timeStr }], details: { utcTimestamp: date.getTime() }, }; } catch (_e) { throw new Error( `Invalid timezone: ${timezone}. Current UTC time: ${date.toISOString()}`, ); } } const timeStr = date.toLocaleString("en-US", { dateStyle: "full", timeStyle: "long", }); return { content: [{ type: "text", text: timeStr }], details: { utcTimestamp: date.getTime() }, }; } const getCurrentTimeSchema = Type.Object({ timezone: Type.Optional( Type.String({ description: "Optional timezone (e.g., 'America/New_York', 'Europe/London')", }), ), }); type GetCurrentTimeParams = Static; export const getCurrentTimeTool: AgentTool< typeof getCurrentTimeSchema, { utcTimestamp: number } > = { label: "Current Time", name: "get_current_time", description: "Get the current date and time", parameters: getCurrentTimeSchema, execute: async (_toolCallId: string, args: GetCurrentTimeParams) => { return getCurrentTime(args.timezone); }, };