""" Reminders tools. Reminders are stored in persona/REMINDERS.md and automatically surfaced in the system prompt at Tier 2+. Use these tools to add, list, and clear pending reminders. Operations: reminders_add — append a new reminder entry reminders_list — return all current reminders (or a message if empty) reminders_clear — erase all reminders (moved here from cron.py for consistency; cron.py still calls the same underlying file) """ import asyncio from datetime import datetime, timezone from pathlib import Path from persona import persona_path def _reminders_path() -> Path: return persona_path() / "REMINDERS.md" def _now_label() -> str: return datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M UTC") # --------------------------------------------------------------------------- # Sync implementations # --------------------------------------------------------------------------- def _reminders_list() -> str: p = _reminders_path() if not p.exists() or not p.read_text().strip(): return "No pending reminders." return p.read_text() def _reminders_add(text: str, label: str | None = None) -> str: p = _reminders_path() existing = p.read_text() if p.exists() else "" heading = label or _now_label() section = f"\n## {heading}\n\n{text.strip()}\n" p.write_text(existing.rstrip() + "\n" + section) return f"Reminder added: {heading}" def _reminders_clear() -> str: p = _reminders_path() p.write_text("") return "All reminders cleared." # --------------------------------------------------------------------------- # Async wrappers # --------------------------------------------------------------------------- async def reminders_list() -> str: return await asyncio.to_thread(_reminders_list) async def reminders_add(text: str, label: str | None = None) -> str: return await asyncio.to_thread(_reminders_add, text, label) async def reminders_clear() -> str: return await asyncio.to_thread(_reminders_clear)