- 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
- Add timezone field to CalendarConfig for local timezone support
- Update CustomProvider to parse calendar tool calls from JSON in LLM responses
- Add pytz dependency to pyproject.toml for timezone handling
- Add validation for placeholder event IDs in delete_event action
- Fix time parsing in update_event to use original event's date context
- Add _parse_time_with_date helper for date-aware time parsing
- Improve error messages to be more directive (STOP, DO NOT EXPLAIN)
- Update tool description to emphasize immediate execution
- Fix duration calculation in update_event to use original start/end times
- Improve list_events output with numbered events and LAST/FIRST markers
- Update AGENTS.md with explicit deletion workflow instructions
- Remove reference to non-existent delete_events_today action
- Added calendar and other missing tools to valid_tools whitelist in CustomProvider
- This fixes issue where calendar tool calls were shown in response instead of being executed
- Also added edit_file, cron, email to the whitelist for completeness
- Add CalendarConfig to schema with OAuth2 credentials support
- Implement CalendarTool with list_events, create_event, and check_availability actions
- Add email parser utility for extracting meeting information from emails
- Register calendar tool in agent loop (auto-loaded when enabled)
- Add calendar skill documentation
- Update AGENTS.md with calendar integration instructions
- Add CALENDAR_SETUP.md with complete setup guide
- Add Google Calendar API dependencies to pyproject.toml
- Support time parsing for 'today', 'tomorrow', and various time formats (12/24-hour, am/pm)
- Ensure timezone-aware datetime handling for Google Calendar API compatibility
- Skip progress updates (tool call hints) for email channel to prevent spam
- Mark skipped emails (from self/replies) as seen to avoid reprocessing
- Track skipped UIDs to prevent checking same emails repeatedly
- Reduce log noise by summarizing skipped emails instead of logging each one
- Update web search to use ddgs package (renamed from duckduckgo_search)
- Add ddgs>=9.0.0 to dependencies in pyproject.toml
- Fix cron tool to handle recurring jobs with duration limits
- When both every_seconds and in_seconds are provided, create multiple
one-time jobs instead of ignoring every_seconds
- Fixes issue where 'remind me every X for Y duration' only created
a single reminder instead of multiple recurring reminders
- Comprehensive security configuration guide for nanobot
- Production deployment security checklist
- Channel access control configuration
- API key and credential management
- Workspace and file system security settings
- Document security restrictions and best practices
- Provide production deployment checklist
- Include tool-specific security rules
- Reference implementation files for security checks
- Clarify when NOT to use message tool (simple acknowledgments, normal conversation)
- Add guidance for natural conversational responses
- Update cron tool documentation with better examples
- Improve scheduled tasks documentation in AGENTS.md
- Add auto-start functionality to cron service when jobs are added
if service is not running and event loop is available
- Add 'reminder' field to CronPayload to distinguish between
simple reminders (send message directly) and tasks (execute via agent)
- Update cron tool to accept 'reminder' parameter
- Fix callback logic to check reminder field: reminders send directly,
tasks are processed through agent
- Ensures both 'remind me to X' and 'schedule a task to do X' work correctly
- Added support for PDF file extraction using pdftotext, with error handling for extraction failures.
- Updated tool description to clarify usage and file type support.
- Improved error messages for binary and non-UTF-8 encoded files.
- Updated ExecTool description to emphasize the importance of using read_file for reading files before executing commands.
- Enhanced logging in agent loop for better debugging
- Added workaround for litellm's os.getcwd() issue when directory is deleted
- Improved tool result logging and iteration tracking
- Merged latest 166 commits from origin/main
- Resolved conflicts in .gitignore, commands.py, schema.py, providers/__init__.py, and registry.py
- Kept both local providers (Ollama, AirLLM) and new providers from main
- Preserved transformers 4.39.3 compatibility fixes
- Combined error handling improvements with new features
- Add DuckDuckGo search fallback when Brave API key is not available
- Web search now works without requiring an API key
- Falls back to DuckDuckGo if BRAVE_API_KEY is not set
- Maintains backward compatibility with Brave API when key is provided
- Improve error handling in agent CLI command
- Better exception handling with traceback display
- Prevents crashes from showing incomplete error messages
- Improves debugging experience
- Fix RoPE scaling compatibility: automatically convert unsupported 'llama3' type to 'linear' for local models
- Patch LlamaSdpaAttention to filter out position_embeddings argument that AirLLM passes but transformers 4.39.3 doesn't accept
- Add better error handling with specific guidance for compatibility issues
- Fix config file modification for local models with unsupported rope_scaling types
- Improve error messages to help diagnose transformers version compatibility issues
These fixes allow nanobot to work with transformers 4.39.3 and AirLLM.