| """Memory manager - high-level interface for memory operations.""" |
|
|
| from pathlib import Path |
|
|
| from memory.storage import MemoryStorage |
| from memory.retrieval import MemoryRetrieval |
|
|
|
|
| class MemoryManager: |
| """High-level interface for storing and retrieving memories.""" |
|
|
| def __init__(self, base_path: Path): |
| self.storage = MemoryStorage(base_path) |
| self.retrieval = MemoryRetrieval(base_path) |
|
|
| async def remember(self, content: str, category: str | None = None) -> str: |
| """Store a new memory. |
| |
| Args: |
| content: The content to remember. |
| category: Optional category for organization. |
| |
| Returns: |
| Confirmation message with the file path. |
| """ |
| path = await self.storage.store(content, category=category) |
| return f"Memory stored at {path}" |
|
|
| async def recall(self, query: str, max_results: int = 50) -> str: |
| """Search memories and return formatted results. |
| |
| Args: |
| query: Search query. |
| max_results: Maximum results to return. |
| |
| Returns: |
| Formatted search results string. |
| """ |
| results = await self.retrieval.search(query, max_results=max_results) |
| if not results: |
| return "No memories found matching the query." |
|
|
| parts = [f"Found {len(results)} matching memories:\n"] |
| for i, r in enumerate(results, 1): |
| parts.append( |
| f"{i}. [{r['category']}] {r['path']}\n" |
| f" {r['preview']}\n" |
| ) |
| return "\n".join(parts) |
|
|
| async def load_core(self) -> str: |
| """Load the highest priority CORE.md memory.""" |
| return await self.storage.load_core() |
|
|
| async def list_categories(self) -> list[str]: |
| """List all category folders.""" |
| return await self.storage.list_categories() |
|
|
| async def list_memories(self, category: str | None = None) -> list[dict]: |
| """List all stored memories with their metadata.""" |
| return await self.storage.list_memories(category) |
|
|
| async def journal(self, content: str) -> str: |
| """Write a journal entry to today's daily journal file. |
| |
| Args: |
| content: The journal entry content. |
| |
| Returns: |
| Confirmation message with the file path. |
| """ |
| path = await self.storage.journal(content) |
| return f"Journal entry added to {path}" |
|
|
| async def load_critical(self) -> str: |
| """Load critical memories (CORE.md).""" |
| return await self.storage.load_core() |
|
|
| async def load_recent_journal(self, days: int = 3) -> str: |
| """Load recent journal entries. |
| |
| Args: |
| days: Number of days to look back. |
| |
| Returns: |
| Combined journal entries. |
| """ |
| return await self.storage.load_recent_journal(days) |
|
|