export interface ToolConfig { name: string; description: string; requestTemplate: { method: string; url: string; headers?: Array<{ key: string; value: string; }>; }; args: ToolArg[]; } export interface ToolArg { name: string; type: string; required: boolean; position: 'body' | 'query' | 'path'; description: string; items?: any; } export interface TokenCacheData { access_token: string; expires_in: number; expires_at: number; created_at: number; app_id?: string; } export interface DingTalkResponse { errcode: number; errmsg: string; request_id?: string; result?: T; } export interface EventTime { dateTime?: string; date?: string; timeZone?: string; } export interface Reminder { method?: string; minutes?: number; } export interface Attendee { id: string; displayName?: string; isOptional?: boolean; responseStatus?: string; self?: boolean; attendeeType?: string; } export interface Organizer { id: string; displayName?: string; self?: boolean; } export interface RecurrenceRule { pattern?: RecurrencePattern; range?: RecurrenceRange; } export interface RecurrencePattern { type: string; interval?: number; daysOfWeek?: string[]; dayOfMonth?: number; index?: string; } export interface RecurrenceRange { type: string; endDate?: string; numberOfOccurrences?: number; } export interface Event { id: string; summary: string; description?: string; start: EventTime; end: EventTime; location?: string; isAllDay?: boolean; attendees?: Attendee[]; organizer?: Organizer; recurrence?: RecurrenceRule; reminders?: Reminder[]; status?: string; visibility?: string; onlineMeetingUrl?: string; createTime?: string; updateTime?: string; seriesMasterId?: string; isCancelled?: boolean; isOrganizer?: boolean; meetingRooms?: MeetingRoom[]; categories?: string[]; } export interface MeetingRoom { roomId?: string; displayName?: string; responseStatus?: string; } export interface CreateEventRequest { summary: string; description?: string; start: EventTime; end: EventTime; location?: string; isAllDay?: boolean; attendees?: Array<{ id: string; isOptional?: boolean; }>; reminders?: Reminder[]; recurrence?: RecurrenceRule; onlineMeetingUrl?: string; extra?: Record; } export interface UpdateEventRequest { summary?: string; description?: string; start?: EventTime; end?: EventTime; location?: string; isAllDay?: boolean; reminders?: Reminder[]; recurrence?: RecurrenceRule; extra?: Record; } export interface ListEventsRequest { timeMin?: string; timeMax?: string; showDeleted?: boolean; maxResults?: number; nextToken?: string; syncToken?: string; } export interface ListEventsResponse { events: Event[]; nextToken?: string; syncToken?: string; } export interface AddAttendeeRequest { attendeesToAdd: Array<{ id: string; isOptional?: boolean; }>; pushNotification?: boolean; chatNotification?: boolean; } export interface RemoveAttendeeRequest { attendeesToRemove: Array<{ id: string; }>; pushNotification?: boolean; chatNotification?: boolean; } export interface CalendarViewRequest { timeMin: string; timeMax: string; maxAttendees?: number; maxResults?: number; nextToken?: string; } export interface CalendarViewResponse { events: Event[]; nextToken?: string; }