import json import os import uuid from datetime import datetime, timedelta MEMORY_FILE = "calendar_memory.json" def load_events(): """Load all events from the JSON memory file.""" if not os.path.exists(MEMORY_FILE): return [] with open(MEMORY_FILE, "r") as f: return json.load(f) def save_events(events): """Save all events to the JSON memory file.""" with open(MEMORY_FILE, "w") as f: json.dump(events, f, indent=2) def add_event(date, description, category="event"): """Add a new calendar event to memory.""" events = load_events() new_event = { "id": str(uuid.uuid4()), "date": date, "description": description, "category": category, "created_at": datetime.now().isoformat() } events.append(new_event) save_events(events) return new_event def search_events(start_date=None, end_date=None, keyword=None): """Search events by date range and/or keyword.""" events = load_events() results = [] for event in events: match = True if start_date: if event["date"] < start_date: match = False if end_date: if event["date"] > end_date: match = False if keyword: if keyword.lower() not in event["description"].lower(): match = False if match: results.append(event) results.sort(key=lambda e: e["date"]) return results def get_upcoming_events(days=7): """Get events in the next N days for context assembly.""" today = datetime.now().strftime("%Y-%m-%d") end = (datetime.now() + timedelta(days=days)).strftime("%Y-%m-%d") return search_events(start_date=today, end_date=end)