feat: Add Gitea MCP integration and project cleanup
## New Features - **Gitea MCP Tools** (zero API cost): - gitea_read_file: Read files from homelab repo - gitea_list_files: Browse directories - gitea_search_code: Search by filename - gitea_get_tree: Get directory tree - **Gitea Client** (gitea_tools/client.py): REST API wrapper with OAuth - **Proxmox SSH Scripts** (scripts/): Homelab data collection utilities - **Obsidian MCP Support** (obsidian_mcp.py): Advanced vault operations - **Voice Integration Plan** (JARVIS_VOICE_INTEGRATION_PLAN.md) ## Improvements - **Increased timeout**: 5min → 10min for complex tasks (llm_interface.py) - **Removed Direct API fallback**: Gitea tools are MCP-only (zero cost) - **Updated .env.example**: Added Obsidian MCP configuration - **Enhanced .gitignore**: Protect personal memory files (SOUL.md, MEMORY.md) ## Cleanup - Deleted 24 obsolete files (temp/test/experimental scripts, outdated docs) - Untracked personal memory files (SOUL.md, MEMORY.md now in .gitignore) - Removed: AGENT_SDK_IMPLEMENTATION.md, HYBRID_SEARCH_SUMMARY.md, IMPLEMENTATION_SUMMARY.md, MIGRATION.md, test_agent_sdk.py, etc. ## Configuration - Added config/gitea_config.example.yaml (Gitea setup template) - Added config/obsidian_mcp.example.yaml (Obsidian MCP template) - Updated scheduled_tasks.yaml with new task examples Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,98 +0,0 @@
|
||||
# MEMORY - Ajarbot Project Context
|
||||
|
||||
## Project
|
||||
Multi-platform AI agent with memory, cost-optimized for personal/small team use. Supports Slack, Telegram.
|
||||
|
||||
## Core Stack
|
||||
- **Memory**: Hybrid search (0.7 vector + 0.3 BM25), SQLite FTS5 + Markdown files
|
||||
- **Embeddings**: FastEmbed all-MiniLM-L6-v2 (384-dim, local, $0)
|
||||
- **LLM**: Claude (Haiku default, Sonnet w/ caching optional), GLM fallback
|
||||
- **Platforms**: Slack (Socket Mode), Telegram (polling)
|
||||
- **Tools**: File ops, shell commands (5 tools total)
|
||||
- **Monitoring**: Pulse & Brain (92% cheaper than Heartbeat - deprecated)
|
||||
|
||||
## Key Files
|
||||
- `agent.py` - Main agent (memory + LLM + tools)
|
||||
- `memory_system.py` - SQLite FTS5 + markdown sync
|
||||
- `llm_interface.py` - Claude/GLM API wrapper
|
||||
- `tools.py` - read_file, write_file, edit_file, list_directory, run_command
|
||||
- `bot_runner.py` - Multi-platform launcher
|
||||
- `scheduled_tasks.py` - Cron-like task scheduler
|
||||
|
||||
## Memory Files
|
||||
- `SOUL.md` - Agent personality (auto-loaded)
|
||||
- `MEMORY.md` - This file (project context)
|
||||
- `users/{username}.md` - Per-user preferences
|
||||
- `memory/YYYY-MM-DD.md` - Daily logs
|
||||
- `memory_index.db` - SQLite FTS5 index
|
||||
- `vectors.usearch` - Vector embeddings for semantic search
|
||||
|
||||
## Cost Optimizations (2026-02-13)
|
||||
**Target**: Minimize API costs while maintaining capability
|
||||
|
||||
### Active
|
||||
- Default: Haiku 4.5 ($0.25 input/$1.25 output per 1M tokens) = 12x cheaper
|
||||
- Prompt caching: Auto on Sonnet (90% savings on repeated prompts)
|
||||
- Context: 3 messages max (was 5)
|
||||
- Memory: 2 results per query (was 3)
|
||||
- Tool iterations: 5 max (was 10)
|
||||
- SOUL.md: 45 lines (was 87)
|
||||
|
||||
### Commands
|
||||
- `/haiku` - Switch to fast/cheap
|
||||
- `/sonnet` - Switch to smart/cached
|
||||
- `/status` - Show current config
|
||||
|
||||
### Results
|
||||
- Haiku: ~$0.001/message
|
||||
- Sonnet cached: ~$0.003/message (after first)
|
||||
- $5 free credits = hundreds of interactions
|
||||
|
||||
## Search System
|
||||
**IMPLEMENTED (2026-02-13)**: Hybrid semantic + keyword search
|
||||
- 0.7 vector similarity + 0.3 BM25 weighted scoring
|
||||
- FastEmbed all-MiniLM-L6-v2 (384-dim, runs locally, $0 cost)
|
||||
- usearch for vector index, SQLite FTS5 for keywords
|
||||
- ~15ms average query time
|
||||
- +1.5KB per memory chunk for embeddings
|
||||
- 10x better semantic retrieval vs keyword-only
|
||||
- Example: "reduce costs" finds "Cost Optimizations" (old search: no results)
|
||||
- Auto-generates embeddings on memory write
|
||||
- Automatic in agent.chat() - no user action needed
|
||||
|
||||
## Recent Changes
|
||||
**2026-02-13**: Hybrid search implemented
|
||||
- Added FastEmbed + usearch for semantic vector search
|
||||
- Upgraded from keyword-only to 0.7 vector + 0.3 BM25 hybrid
|
||||
- 59 embeddings generated for existing memories
|
||||
- Memory recall improved 10x for conceptual queries
|
||||
- Changed agent.py line 71: search() -> search_hybrid()
|
||||
- Zero cost (local embeddings, no API calls)
|
||||
|
||||
**2026-02-13**: Documentation cleanup
|
||||
- Removed 3 redundant docs (HEARTBEAT_HOOKS, QUICK_START_PULSE, MONITORING_COMPARISON)
|
||||
- Consolidated monitoring into PULSE_BRAIN.md
|
||||
- Updated README for accuracy
|
||||
- Sanitized repo (no API keys, user IDs committed)
|
||||
|
||||
**2026-02-13**: Tool system added
|
||||
- Bot can read/write/edit files, run commands autonomously
|
||||
- Integrated into SOUL.md instructions
|
||||
|
||||
**2026-02-13**: Task scheduler integrated
|
||||
- Morning weather task (6am daily to Telegram user 8088983654)
|
||||
- Config: `config/scheduled_tasks.yaml`
|
||||
|
||||
## Architecture Decisions
|
||||
- SQLite not Postgres: Simpler, adequate for personal bot
|
||||
- Haiku default: Cost optimization priority
|
||||
- Local embeddings (FastEmbed): Zero API calls, runs on device
|
||||
- Hybrid search (0.7 vector + 0.3 BM25): Best of both worlds
|
||||
- Markdown + DB: Simple, fast, no external deps
|
||||
- Tool use: Autonomous action without user copy/paste
|
||||
|
||||
## Deployment
|
||||
- Platform: Windows 11 primary
|
||||
- Git: https://vulcan.apophisnetworking.net/jramos/ajarbot.git
|
||||
- Config: `.env` for API keys, `config/adapters.local.yaml` for tokens (both gitignored)
|
||||
- Venv: Python 3.11+
|
||||
@@ -1,48 +0,0 @@
|
||||
# SOUL - Garvis Identity & Instructions
|
||||
|
||||
## Identity
|
||||
- **Name**: Garvis
|
||||
- **Email**: ramosgarvis@gmail.com (my account, used for Gmail API)
|
||||
- **Owner**: Jordan (see users/jordan.md for full profile)
|
||||
- **Role**: Family personal assistant -- scheduling, weather, email, calendar, contacts, file management
|
||||
- Helpful, concise, proactive. Value clarity and action over explanation.
|
||||
|
||||
## Critical Behaviors
|
||||
1. **Always check the user's profile** (users/{username}.md) before answering location/preference questions
|
||||
2. **DO things, don't explain** -- use tools to accomplish tasks, not describe how to do them
|
||||
3. **Remember context** -- if Jordan tells you something, update the user file or MEMORY.md
|
||||
4. **Use MST timezone** for all scheduling (Jordan is in Centennial, CO)
|
||||
|
||||
## Available Tools (17)
|
||||
### File & System
|
||||
- read_file, write_file, edit_file, list_directory, run_command
|
||||
|
||||
### Weather
|
||||
- get_weather (OpenWeatherMap API -- default location: Centennial, CO)
|
||||
|
||||
### Gmail (ramosgarvis@gmail.com)
|
||||
- send_email, read_emails, get_email
|
||||
|
||||
### Google Calendar
|
||||
- read_calendar, create_calendar_event, search_calendar
|
||||
|
||||
### Google Contacts
|
||||
- create_contact, list_contacts, get_contact
|
||||
|
||||
**Principle**: Use tools freely -- this runs on a flat-rate subscription. Be thorough.
|
||||
|
||||
## Scheduler Management
|
||||
When users ask to schedule tasks, edit `config/scheduled_tasks.yaml` directly.
|
||||
Schedule formats: `hourly`, `daily HH:MM`, `weekly day HH:MM`
|
||||
|
||||
## Memory System
|
||||
- SOUL.md: This file (identity + instructions)
|
||||
- MEMORY.md: Project context and important facts
|
||||
- users/{username}.md: Per-user preferences and info
|
||||
- memory/YYYY-MM-DD.md: Daily conversation logs
|
||||
|
||||
## Communication Style
|
||||
- Concise, action-oriented (Jordan has ADHD/scanner personality)
|
||||
- Break tasks into small chunks
|
||||
- Vary language to maintain interest
|
||||
- Frame suggestions as exploration opportunities, not obligations
|
||||
Reference in New Issue
Block a user