From 2e71c21094af46bf6e1d34f9b5ebffd39239b7f0 Mon Sep 17 00:00:00 2001 From: tanyar09 Date: Fri, 6 Mar 2026 13:07:15 -0500 Subject: [PATCH] Enhance CalendarTool: include additional event details in output - Request additional fields for events, including attendees and attachments - Extract and display event end time, location, attendees, attachments, and description in the event listing - Truncate long descriptions for better readability --- nanobot/agent/tools/calendar.py | 35 ++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/nanobot/agent/tools/calendar.py b/nanobot/agent/tools/calendar.py index 55a9e1a..a17ed23 100644 --- a/nanobot/agent/tools/calendar.py +++ b/nanobot/agent/tools/calendar.py @@ -714,6 +714,8 @@ class CalendarTool(Tool): maxResults=max_results, singleEvents=True, orderBy="startTime", + # Request additional fields to get attendees and attachments + fields="items(id,summary,start,end,description,location,attendees(email,responseStatus),attachments(fileUrl,title))", ) .execute() ) @@ -727,10 +729,17 @@ class CalendarTool(Tool): event_ids = [] for idx, event in enumerate(events, 1): start = event["start"].get("dateTime", event["start"].get("date")) + end = event["end"].get("dateTime", event["end"].get("date")) title = event.get("summary", "No title") event_id = event.get("id", "") event_ids.append(event_id) + # Extract additional information + description = event.get("description", "") + location = event.get("location", "") + attendees = event.get("attendees", []) + attachments = event.get("attachments", []) + # Add position indicator - "last" means the one with the latest time (usually the last in list) position_note = "" if idx == len(events): @@ -739,7 +748,31 @@ class CalendarTool(Tool): position_note = " (FIRST - earliest time)" # Format: include numbered list with position indicators - result.append(f"{idx}. {title} ({start}) [ID: {event_id}]{position_note}") + result.append(f"{idx}. {title} ({start} - {end}) [ID: {event_id}]{position_note}") + + # Add location if present + if location: + result.append(f" Location: {location}") + + # Add attendees if present + if attendees: + attendee_emails = [att.get("email", "") for att in attendees if att.get("email")] + if attendee_emails: + result.append(f" Attendees: {', '.join(attendee_emails)}") + + # Add attachments if present + if attachments: + attachment_info = [] + for att in attachments: + file_name = att.get("fileUrl", "").split("/")[-1] if att.get("fileUrl") else att.get("title", "Unknown file") + attachment_info.append(file_name) + if attachment_info: + result.append(f" Attachments: {', '.join(attachment_info)}") + + # Add description if present (truncate if too long) + if description: + desc_preview = description[:100] + "..." if len(description) > 100 else description + result.append(f" Description: {desc_preview}") # Also include a summary line with all IDs for easy extraction result.append(f"\nEvent IDs: {', '.join(event_ids)}")