diff --git a/.devcontainer/mcp-config.json b/.devcontainer/mcp-config.json index ca2cdebc..1410bfe1 100644 --- a/.devcontainer/mcp-config.json +++ b/.devcontainer/mcp-config.json @@ -3,7 +3,7 @@ "agent-memory": { "command": "uv", "args": ["run", "agent-memory", "mcp"], - "cwd": "/workspace", + "cwd": "/workspace/V0", "env": { "REDIS_URL": "redis://redis:6379", "DISABLE_AUTH": "true", diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh index 41d391c4..951a1d6f 100755 --- a/.devcontainer/post-create.sh +++ b/.devcontainer/post-create.sh @@ -14,13 +14,13 @@ echo "" # Install Python dependencies for the memory server echo -e "${YELLOW}Installing Memory Server dependencies...${NC}" -cd /workspace +cd /workspace/V0 uv sync --all-extras # Install Workbench UI dependencies if the project exists -if [ -d "/workspace/workbench" ] && [ -f "/workspace/workbench/package.json" ]; then +if [ -d "/workspace/V0/workbench" ] && [ -f "/workspace/V0/workbench/package.json" ]; then echo -e "${YELLOW}Installing Workbench UI dependencies...${NC}" - cd /workspace/workbench + cd /workspace/V0/workbench npm install || { echo -e "${YELLOW}Warning: npm install had issues. You may need to run 'npm install' manually.${NC}" } @@ -45,8 +45,8 @@ echo -e " 3. To use Claude with memory tools:" echo -e " ${BLUE}claude --mcp-config /workspace/.devcontainer/mcp-config.json${NC}" echo "" echo -e " 4. Run examples:" -echo -e " ${BLUE}cd /workspace && uv run python examples/travel_agent.py${NC}" +echo -e " ${BLUE}cd /workspace/V0 && uv run python examples/travel_agent.py${NC}" echo "" echo -e " 5. Run tests:" -echo -e " ${BLUE}cd /workspace && uv run pytest${NC}" +echo -e " ${BLUE}cd /workspace/V0 && uv run pytest${NC}" echo "" diff --git a/.devcontainer/start-services.sh b/.devcontainer/start-services.sh index cf6643dd..22794949 100755 --- a/.devcontainer/start-services.sh +++ b/.devcontainer/start-services.sh @@ -20,18 +20,18 @@ echo "" mkdir -p /tmp/ams-logs # Load environment variables from workbench .env if it exists -if [ -f "/workspace/workbench/.env" ]; then - echo -e "${YELLOW}Loading environment from /workspace/workbench/.env...${NC}" +if [ -f "/workspace/V0/workbench/.env" ]; then + echo -e "${YELLOW}Loading environment from /workspace/V0/workbench/.env...${NC}" set -a # automatically export all variables - source /workspace/workbench/.env + source /workspace/V0/workbench/.env set +a fi -# Also check for root .env file -if [ -f "/workspace/.env" ]; then - echo -e "${YELLOW}Loading environment from /workspace/.env...${NC}" +# Also check for the V0 project .env file +if [ -f "/workspace/V0/.env" ]; then + echo -e "${YELLOW}Loading environment from /workspace/V0/.env...${NC}" set -a - source /workspace/.env + source /workspace/V0/.env set +a fi @@ -48,12 +48,12 @@ echo -e "${GREEN}Redis is ready!${NC}" # Start Memory Server echo -e "${YELLOW}Starting Memory Server...${NC}" -cd /workspace +cd /workspace/V0 if [ -f "pyproject.toml" ]; then nohup uv run agent-memory api --host 0.0.0.0 --port 8000 --task-backend=asyncio > /tmp/ams-logs/memory-server.log 2>&1 & echo $! > /tmp/ams-logs/memory-server.pid else - echo -e "${RED}Error: pyproject.toml not found in /workspace${NC}" + echo -e "${RED}Error: pyproject.toml not found in /workspace/V0${NC}" exit 1 fi @@ -74,7 +74,7 @@ echo -e "${GREEN}Memory Server is ready!${NC}" # Start MCP Server (SSE mode for workbench browser client) echo -e "${YELLOW}Starting MCP Server (SSE mode on port 9000)...${NC}" -cd /workspace +cd /workspace/V0 nohup uv run agent-memory mcp --mode sse --port 9000 --task-backend=asyncio > /tmp/ams-logs/mcp-server.log 2>&1 & echo $! > /tmp/ams-logs/mcp-server.pid # Give MCP server a moment to bind @@ -82,9 +82,9 @@ sleep 3 echo -e "${GREEN}MCP Server started!${NC}" # Start Workbench UI if it exists -if [ -d "/workspace/workbench" ] && [ -f "/workspace/workbench/package.json" ]; then +if [ -d "/workspace/V0/workbench" ] && [ -f "/workspace/V0/workbench/package.json" ]; then echo -e "${YELLOW}Starting Workbench UI...${NC}" - cd /workspace/workbench + cd /workspace/V0/workbench # Install dependencies if node_modules doesn't exist if [ ! -d "node_modules" ]; then @@ -105,7 +105,7 @@ if [ -d "/workspace/workbench" ] && [ -f "/workspace/workbench/package.json" ]; attempt=$((attempt + 1)) if [ $attempt -ge $max_attempts ]; then echo -e "${RED}Workbench UI failed to start. Check logs at /tmp/ams-logs/workbench-ui.log${NC}" - echo -e "${YELLOW}You can start it manually: cd /workspace/workbench && npm run dev${NC}" + echo -e "${YELLOW}You can start it manually: cd /workspace/V0/workbench && npm run dev${NC}" break fi sleep 1 @@ -116,7 +116,7 @@ if [ -d "/workspace/workbench" ] && [ -f "/workspace/workbench/package.json" ]; fi else echo -e "${YELLOW}Workbench UI not found. Skipping...${NC}" - echo -e "${YELLOW}To set up the workbench, run: cd /workspace/workbench && npm install${NC}" + echo -e "${YELLOW}To set up the workbench, run: cd /workspace/V0/workbench && npm install${NC}" fi echo "" diff --git a/.github/workflows/agent-memory-client.yml b/.github/workflows/agent-memory-client.yml index 85a0129b..562998bb 100644 --- a/.github/workflows/agent-memory-client.yml +++ b/.github/workflows/agent-memory-client.yml @@ -31,11 +31,11 @@ jobs: uses: gradle/actions/setup-gradle@v3 - name: Run tests - working-directory: agent-memory-client/agent-memory-client-java + working-directory: V0/agent-memory-client/agent-memory-client-java run: ./gradlew test - name: Build - working-directory: agent-memory-client/agent-memory-client-java + working-directory: V0/agent-memory-client/agent-memory-client-java run: ./gradlew build test-js: @@ -54,15 +54,15 @@ jobs: node-version: ${{ matrix.node-version }} - name: Install dependencies - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm ci - name: Run tests with coverage - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm run test:coverage -- --run - name: Build - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm run build test: @@ -84,15 +84,16 @@ jobs: uses: astral-sh/setup-uv@v3 - name: Install dependencies - working-directory: agent-memory-client + working-directory: V0/agent-memory-client run: uv sync --extra dev - name: Run pre-commit + working-directory: V0 run: | uv run pre-commit run --all-files - name: Run tests - working-directory: agent-memory-client + working-directory: V0/agent-memory-client run: uv run pytest tests/ --cov=agent_memory_client --cov-report=xml publish-testpypi: @@ -118,14 +119,14 @@ jobs: pip install build - name: Build package - working-directory: agent-memory-client + working-directory: V0/agent-memory-client run: python -m build - name: Publish package to TestPyPI uses: pypa/gh-action-pypi-publish@release/v1 with: repository-url: https://test.pypi.org/legacy/ - packages-dir: agent-memory-client/dist/ + packages-dir: V0/agent-memory-client/dist/ publish-pypi: name: Publish to PyPI @@ -150,13 +151,13 @@ jobs: pip install build - name: Build package - working-directory: agent-memory-client + working-directory: V0/agent-memory-client run: python -m build - name: Publish package to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: - packages-dir: agent-memory-client/dist/ + packages-dir: V0/agent-memory-client/dist/ publish-npm: name: Publish to npm @@ -176,15 +177,15 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install dependencies - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm ci - name: Build - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm run build - name: Publish to npm - working-directory: agent-memory-client/agent-memory-client-js + working-directory: V0/agent-memory-client/agent-memory-client-js run: npm publish --provenance --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} @@ -211,7 +212,7 @@ jobs: run: echo "VERSION=${GITHUB_REF#refs/tags/client-java/v}" >> $GITHUB_OUTPUT - name: Build and publish - working-directory: agent-memory-client/agent-memory-client-java + working-directory: V0/agent-memory-client/agent-memory-client-java run: ./gradlew publish -Pversion=${{ steps.version.outputs.VERSION }} env: ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_SIGNING_KEY }} @@ -247,12 +248,12 @@ jobs: # uses: pypa/gh-action-pypi-publish@release/v1 # with: # repository-url: https://test.pypi.org/legacy/ -# packages-dir: agent-memory-client/dist/ +# packages-dir: V0/agent-memory-client/dist/ # password: ${{ secrets.TEST_PYPI_API_TOKEN }} # # For PyPI job, replace the publish step with: # - name: Publish package to PyPI # uses: pypa/gh-action-pypi-publish@release/v1 # with: -# packages-dir: agent-memory-client/dist/ +# packages-dir: V0/agent-memory-client/dist/ # password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.github/workflows/agent-memory-server.yml b/.github/workflows/agent-memory-server.yml index 363cf496..71fc19ee 100644 --- a/.github/workflows/agent-memory-server.yml +++ b/.github/workflows/agent-memory-server.yml @@ -23,6 +23,9 @@ jobs: build: name: Build package runs-on: ubuntu-latest + defaults: + run: + working-directory: V0 steps: - uses: actions/checkout@v4 @@ -43,7 +46,7 @@ jobs: uses: actions/upload-artifact@v4 with: name: dist - path: dist/* + path: V0/dist/* publish-testpypi: name: Publish to TestPyPI @@ -130,8 +133,8 @@ jobs: - name: Build and push Docker image (standard) uses: docker/build-push-action@v5 with: - context: . - file: ./Dockerfile + context: ./V0 + file: ./V0/Dockerfile platforms: linux/amd64,linux/arm64 push: true tags: | @@ -145,8 +148,8 @@ jobs: - name: Build and push Docker image (standalone) uses: docker/build-push-action@v5 with: - context: . - file: ./Dockerfile.standalone + context: ./V0 + file: ./V0/Dockerfile.standalone platforms: linux/amd64,linux/arm64 push: true tags: | @@ -233,8 +236,8 @@ jobs: - name: Build and push Docker image (standard) uses: docker/build-push-action@v5 with: - context: . - file: ./Dockerfile + context: ./V0 + file: ./V0/Dockerfile platforms: linux/amd64,linux/arm64 push: true tags: | @@ -248,8 +251,8 @@ jobs: - name: Build and push Docker image (standalone) uses: docker/build-push-action@v5 with: - context: . - file: ./Dockerfile.standalone + context: ./V0 + file: ./V0/Dockerfile.standalone platforms: linux/amd64,linux/arm64 push: true tags: | diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml index 48d3f440..c1e0f03b 100644 --- a/.github/workflows/claude.yml +++ b/.github/workflows/claude.yml @@ -36,4 +36,4 @@ jobs: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} # Define which tools Claude can use - allowed_tools: "Bash,Bash(python:*),Bash(ruff:*),Bash(uv:*),Bash(pip:*),Bash(pytest:*),Bash(git status),Bash(git log),Bash(git show),Bash(git blame),Bash(git reflog),Bash(git stash list),Bash(git ls-files),Bash(git branch),Bash(git tag),Bash(git diff),Bash(make:*),Bash(pytest:*),Bash(cd:*),Bash(ls:*),Bash(make),Bash(make:*),View,GlobTool,GrepTool,BatchTool,Bash(cd /home/runner/work/agent-memory-server/agent-memory-server && ruff check),Bash(cd /home/runner/work/agent-memory-server/agent-memory-server && pytest*)" + allowed_tools: "Bash,Bash(python:*),Bash(ruff:*),Bash(uv:*),Bash(pip:*),Bash(pytest:*),Bash(git status),Bash(git log),Bash(git show),Bash(git blame),Bash(git reflog),Bash(git stash list),Bash(git ls-files),Bash(git branch),Bash(git tag),Bash(git diff),Bash(make:*),Bash(pytest:*),Bash(cd:*),Bash(ls:*),Bash(make),Bash(make:*),View,GlobTool,GrepTool,BatchTool,Bash(cd /home/runner/work/agent-memory-server/agent-memory-server/V0 && ruff check),Bash(cd /home/runner/work/agent-memory-server/agent-memory-server/V0 && pytest*)" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c0b65f9c..66844687 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -4,16 +4,16 @@ on: push: branches: [main] paths: - - 'docs/**' - - 'mkdocs.yml' - - 'index.md' + - 'V0/docs/**' + - 'V0/mkdocs.yml' + - 'V0/index.md' - '.github/workflows/docs.yml' pull_request: branches: [main] paths: - - 'docs/**' - - 'mkdocs.yml' - - 'index.md' + - 'V0/docs/**' + - 'V0/mkdocs.yml' + - 'V0/index.md' permissions: contents: read @@ -27,6 +27,9 @@ concurrency: jobs: build: runs-on: ubuntu-latest + defaults: + run: + working-directory: V0 steps: - name: Checkout uses: actions/checkout@v4 @@ -63,7 +66,7 @@ jobs: if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v3 with: - path: ./site + path: V0/site deploy: if: github.ref == 'refs/heads/main' diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml index 58ebed62..553050a5 100644 --- a/.github/workflows/python-tests.yml +++ b/.github/workflows/python-tests.yml @@ -12,6 +12,9 @@ on: jobs: lint: runs-on: ubuntu-latest + defaults: + run: + working-directory: V0 steps: - uses: actions/checkout@v3 @@ -36,6 +39,9 @@ jobs: needs: lint if: github.event_name != 'pull_request' || (github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]') runs-on: ubuntu-latest + defaults: + run: + working-directory: V0 steps: - uses: actions/checkout@v4 @@ -68,6 +74,9 @@ jobs: test: needs: lint runs-on: ubuntu-latest + defaults: + run: + working-directory: V0 strategy: fail-fast: false matrix: diff --git a/.github/workflows/release-java-client.yml b/.github/workflows/release-java-client.yml index a842ce12..a97df6d0 100644 --- a/.github/workflows/release-java-client.yml +++ b/.github/workflows/release-java-client.yml @@ -36,7 +36,7 @@ jobs: jreleaser-arguments: 'assemble --git-root-search' clone-to-dist-repo: false update-antora-version: false - working-directory: 'agent-memory-client/agent-memory-client-java' + working-directory: 'V0/agent-memory-client/agent-memory-client-java' tag-prefix: 'java-client-v' git-root-search: true secrets: diff --git a/.github/workflows/test-fork-pr.yml b/.github/workflows/test-fork-pr.yml index 0daf8019..7dc89a7f 100644 --- a/.github/workflows/test-fork-pr.yml +++ b/.github/workflows/test-fork-pr.yml @@ -60,6 +60,9 @@ jobs: name: Service Tests runs-on: ubuntu-latest needs: setup + defaults: + run: + working-directory: V0 steps: - name: Create check run id: check diff --git a/.gitignore b/.gitignore index 9670b99c..097fb012 100644 --- a/.gitignore +++ b/.gitignore @@ -173,7 +173,7 @@ venv.bak/ .ropeproject # mkdocs documentation -/site +/V0/site # mypy .mypy_cache/ @@ -233,14 +233,16 @@ libs/redis/docs/.Trash* *.pyc .ai .claude +.omc/ +.omx/ TASK_MEMORY.md *.code-workspace -/agent-memory-client/agent-memory-client-java/.gradle/ +/V0/agent-memory-client/agent-memory-client-java/.gradle/ augment*.md dev_docs/ # Root-level Node artifacts (workbench has its own) -/node_modules/ -/package.json -/package-lock.json +/V0/node_modules/ +/V0/package.json +/V0/package-lock.json .gitnexus diff --git a/AGENTS.md b/AGENTS.md index a4d912b2..b332b044 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,259 +1,17 @@ -# CLAUDE.md - Redis Agent Memory Server Project Context +# AGENTS.md -## Redis Version -This project uses Redis 8, which is the redis:8 docker image. -Do not use Redis Stack or other earlier versions of Redis. +The project source, build tooling, tests, and docs live in [`V0/`](./V0/). -## Frequently Used Commands +**Start there:** read [`V0/AGENTS.md`](./V0/AGENTS.md) for the full agent and +development instructions. Run build, lint, and test commands from inside `V0/` +(for example `cd V0 && make test`). -### Project Setup -Get started in a new environment by installing `uv`: -```bash -pip install uv # Install uv (once) -make setup # Create .venv, sync deps, install pre-commit hooks -make sync # Sync latest dependencies -``` +The repository root is a thin landing layer — see [`README.md`](./README.md). -### Activate the virtual environment -You MUST always activate the virtualenv before running commands: +## Looking for the supported production path? -```bash -source .venv/bin/activate -``` - -### Running Tests -Always run tests before committing. You MUST have 100% of the tests in the -code basepassing to commit. - -Run all tests like this, including tests that require API keys in the -environment: -```bash -make test-api -``` - -### Linting - -```bash -make pre-commit # Run the exact formatting/lint hooks used in CI -make verify # Run full local verification (pre-commit + API tests) -``` - -### Managing Dependencies -uv add # Add a dependency to pyproject.toml and update lock file -uv remove # Remove a dependency from pyproject.toml and update lock file - -### Running Servers -# Server commands -uv run agent-memory api # Start REST API server (default port 8000) -uv run agent-memory mcp # Start MCP server (stdio mode) -uv run agent-memory mcp --mode sse --port 9000 # Start MCP server (SSE mode) - -### Database Operations -# Database/Redis operations -uv run agent-memory rebuild-index # Rebuild Redis search index -uv run agent-memory migrate-memories # Run memory migrations - -### Background Tasks -# Background task management -uv run agent-memory task-worker # Start background task worker -# Schedule a specific task -uv run agent-memory schedule-task "agent_memory_server.long_term_memory.compact_long_term_memories" - -### Running All Containers -# Docker development -docker-compose up # Start full stack (API, MCP, Redis) -docker-compose up redis # Start only Redis Stack -docker-compose down # Stop all services -``` - -### Committing Changes -IMPORTANT: This project uses `pre-commit`. You should run `pre-commit` -before committing: -```bash -make pre-commit -``` - -## Important Architectural Patterns - -### Dual Interface Design (REST + MCP) -- **REST API**: Traditional HTTP endpoints for web applications (`api.py`) -- **MCP Server**: Model Context Protocol for AI agent integration (`mcp.py`) -- Both interfaces share the same core memory management logic - -### Memory Architecture -```python -# Two-tier memory system -Working Memory (Session-scoped) → Long-term Memory (Persistent) - ↓ ↓ -- Messages - Semantic search -- Context - Topic modeling -- Structured memories - Entity recognition -- Metadata - Deduplication -``` - -### RedisVL Integration -**CRITICAL**: Always use RedisVL query types instead of direct redis-py client access for searches: -```python -# Correct - Use RedisVL queries -from redisvl.query import VectorQuery, FilterQuery -query = VectorQuery(vector=embedding, vector_field_name="vector", return_fields=["text"]) - -# Avoid - Direct redis client searches -# redis.ft().search(...) # Don't do this -``` - -### Async-First Design -- All core operations are async -- Background task processing with Docket -- Async Redis connections throughout - -## Critical Rules - -### Import Placement -Place all imports at the top of modules, not inside functions. Inline imports should only be used when strictly necessary (e.g., avoiding circular dependencies, optional dependencies, or significant startup performance concerns). - -### Authentication -- **PRODUCTION**: Never set `DISABLE_AUTH=true` in production -- **DEVELOPMENT**: Use `DISABLE_AUTH=true` for local testing only -- JWT/OAuth2 authentication required for all endpoints except `/health`, `/docs`, `/openapi.json` - -### Memory Management -- Working memory automatically promotes structured memories to long-term storage -- Conversations are summarized when exceeding window size -- Use model-aware token limits for context window management - -### RedisVL Usage (Required) -Always use RedisVL query types for any search operations. This is a project requirement. - -## Testing Notes - -The project uses `pytest` with `testcontainers` for Redis integration testing: - -- `make test` - Run the standard test suite -- `make test-api` - Run all tests including API-key-dependent tests -- `make test-unit` - Unit tests only -- `make test-integration` - Integration tests (require Redis) -- `make test-cov` - Run tests with coverage - -## Project Structure - -``` -agent_memory_server/ -├── main.py # FastAPI application entry point -├── api.py # REST API endpoints -├── mcp.py # MCP server implementation -├── config.py # Configuration management -├── auth.py # OAuth2/JWT authentication -├── models.py # Pydantic data models -├── working_memory.py # Session-scoped memory management -├── long_term_memory.py # Persistent memory with semantic search -├── messages.py # Message handling and formatting -├── summarization.py # Conversation summarization -├── extraction.py # Topic and entity extraction -├── filters.py # Search filtering logic -├── llm/ # LLM client package (LiteLLM-based) -│ ├── __init__.py # Re-exports for clean imports -│ ├── client.py # LLMClient class with chat/embedding methods -│ ├── types.py # ChatCompletionResponse, EmbeddingResponse, LLMBackend -│ └── exceptions.py # LLMClientError, ModelValidationError, APIKeyMissingError -├── migrations.py # Database schema migrations -├── docket_tasks.py # Background task definitions -├── cli.py # Command-line interface -├── dependencies.py # FastAPI dependency injection -├── healthcheck.py # Health check endpoint -├── logging.py # Structured logging setup -├── client/ # Client libraries -└── utils/ # Utility modules - ├── redis.py # Redis connection and setup - ├── keys.py # Redis key management - └── api_keys.py # API key utilities -``` - -## Core Components - -### 1. Memory Management -- **Working Memory**: Session-scoped storage with automatic summarization -- **Long-term Memory**: Persistent storage with semantic search capabilities -- **Memory Promotion**: Automatic migration from working to long-term memory -- **Deduplication**: Prevents duplicate memories using content hashing - -### 2. Search and Retrieval -- **Semantic Search**: Vector-based similarity search using embeddings -- **Filtering System**: Advanced filtering by session, namespace, topics, entities, timestamps -- **Hybrid Search**: Combines semantic similarity with metadata filtering -- **RedisVL Integration**: All search operations use RedisVL query builders - -### 3. AI Integration -- **Topic Modeling**: Automatic topic extraction using BERTopic or LLM -- **Entity Recognition**: BERT-based named entity recognition -- **Summarization**: Conversation summarization when context window exceeded -- **Multi-LLM Support**: OpenAI, Anthropic, and other providers - -### 4. Authentication & Security -- **OAuth2/JWT**: Industry-standard authentication with JWKS validation -- **Multi-Provider**: Auth0, AWS Cognito, Okta, Azure AD support -- **Role-Based Access**: Fine-grained permissions using JWT claims -- **Development Mode**: `DISABLE_AUTH` for local development - -### 5. Background Processing -- **Docket Tasks**: Redis-based task queue for background operations -- **Memory Indexing**: Asynchronous embedding generation and indexing -- **Compaction**: Periodic cleanup and optimization of stored memories - -## Environment Configuration - -Key environment variables: -```bash -# Redis -REDIS_URL=redis://localhost:6379 - -# Authentication (Production) -OAUTH2_ISSUER_URL=https://your-auth-provider.com -OAUTH2_AUDIENCE=your-api-audience -DISABLE_AUTH=false # Never true in production - -# Development -DISABLE_AUTH=true # Local development only -LOG_LEVEL=DEBUG - -# AI Services -OPENAI_API_KEY=your-key -ANTHROPIC_API_KEY=your-key -GENERATION_MODEL=gpt-4o-mini -EMBEDDING_MODEL=text-embedding-3-small - -# Memory Configuration -LONG_TERM_MEMORY=true -ENABLE_TOPIC_EXTRACTION=true -ENABLE_NER=true -``` - -## API Reference - -### REST API (Port 8000) -- Session management (`/v1/working-memory/`) -- Working memory operations (`/v1/working-memory/{id}`) -- Long-term memory search (`/v1/long-term-memory/search`) -- Memory hydration (`/v1/memory/prompt`) - -### MCP Server (Port 9000) -- `create_long_term_memories` - Store persistent memories -- `search_long_term_memory` - Semantic search with filtering -- `memory_prompt` - Hydrate queries with relevant context -- `set_working_memory` - Manage session memory - -## Development Workflow - -0. **Install uv**: `pip install uv` to get started with uv -1. **Setup**: `make setup` -2. **Redis**: Start Redis Stack via `docker-compose up redis` -3. **Development**: Use `DISABLE_AUTH=true` for local testing -4. **Testing**: Run `make verify` before committing -5. **Linting**: `make pre-commit` matches the CI lint gate exactly -6. **Background Tasks**: Start worker with `uv run agent-memory task-worker` - -## Documentation -- API docs available at `/docs` when server is running -- OpenAPI spec at `/openapi.json` -- Authentication examples in README.md -- System architecture diagram in `diagram.png` +This repository (`V0/`) is the open-source research foundation. Redis's official +managed path for production use is **[Redis Agent Memory in Redis Iris](https://redis.io/agent-memory/)** +— agent memory as a service, with a REST API, client libraries, secure API key +management, and automatic TTL-based lifecycle management. See the +[README](./README.md#redis-agent-memory-in-redis-iris) for the full overview and links. diff --git a/CLAUDE.md b/CLAUDE.md index 53393a02..2f5a6251 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,3 +1,5 @@ # CLAUDE.md - Redis Agent Memory Server Project Context -See ./AGENTS.md +This project lives in [`V0/`](./V0/). See [`V0/AGENTS.md`](./V0/AGENTS.md) for +full instructions (and [`V0/CLAUDE.md`](./V0/CLAUDE.md)). Run commands from +inside `V0/`. diff --git a/README.md b/README.md index 2c1f39a1..020e7e33 100644 --- a/README.md +++ b/README.md @@ -1,311 +1,50 @@ -
-# Redis Agent Memory Server - -A memory layer for AI agents. +# Redis Agent Memory - **[Documentation](https://redis.github.io/agent-memory-server/)** • **[GitHub](https://github.com/redis/agent-memory-server)** • **[Docker](https://hub.docker.com/r/redislabs/agent-memory-server)** +A memory layer that gives agents intelligent short-term memory and persistent context across conversations.
-## Features -- **Dual Interface**: REST API and Model Context Protocol (MCP) server -- **Two-Tier Memory**: Working memory (session-scoped) and long-term memory (persistent) -- **Configurable Memory Strategies**: Customize how memories are extracted (discrete, summary, preferences, custom) -- **Semantic, Keyword & Hybrid Search**: Vector-based similarity, full-text keyword, and combined hybrid search with metadata filtering -- **Flexible Backends**: Pluggable memory vector database factory system -- **Multi-Provider LLM Support**: OpenAI, Anthropic, AWS Bedrock, Ollama, Azure, Gemini via [LiteLLM](https://docs.litellm.ai/) -- **AI Integration**: Automatic topic extraction, entity recognition, and conversation summarization -- **Python SDK**: Easy integration with AI applications - -## Quick Start - -### 1. Installation - -#### Using Docker - -Pre-built Docker images are available from: -- **Docker Hub**: [redislabs/agent-memory-server](https://hub.docker.com/r/redislabs/agent-memory-server) -- **GitHub Packages**: [ghcr.io/redis/agent-memory-server](https://github.com/redis/agent-memory-server/pkgs/container/agent-memory-server) - -**Quick Start (Development Mode)**: -```bash -# Start with docker compose -# Note: The 'api' service exposes port 8000. -# Choose one depending on your needs: - -# Option 1: Development mode (no worker, immediate task execution) -docker compose up api redis - -# Option 2: Production-like mode (with background worker) -docker compose up api task-worker redis mcp - -# Or run just the API server (requires separate Redis) -docker run -p 8000:8000 \ - -e REDIS_URL=redis://your-redis:6379 \ - -e OPENAI_API_KEY=your-key \ - redislabs/agent-memory-server:latest \ - agent-memory api --host 0.0.0.0 --port 8000 --task-backend=asyncio -``` - -By default, the image runs the API with the **Docket** task backend, which -expects a separate `agent-memory task-worker` process for non-blocking -background tasks. The example above shows how to override this to use the -asyncio backend for a single-container development setup. - -If you are connecting to a Redis Cluster and want Docket-backed workers, set -`REDIS_URL` to a `redis+cluster://...` or `rediss+cluster://...` URL. AMS will -translate that URL for its other Redis clients internally. - -**Production Deployment**: - -For production, run separate containers for the API and background workers: - -```bash -# API Server (without background worker) -docker run -p 8000:8000 \ - -e REDIS_URL=redis://your-redis:6379 \ - -e OPENAI_API_KEY=your-key \ - -e DISABLE_AUTH=false \ - redislabs/agent-memory-server:latest \ - agent-memory api --host 0.0.0.0 --port 8000 - -# Background Worker (separate container) -docker run \ - -e REDIS_URL=redis://your-redis:6379 \ - -e OPENAI_API_KEY=your-key \ - redislabs/agent-memory-server:latest \ - agent-memory task-worker --concurrency 10 - -# MCP Server (if needed) -docker run -p 9000:9000 \ - -e REDIS_URL=redis://your-redis:6379 \ - -e OPENAI_API_KEY=your-key \ - redislabs/agent-memory-server:latest \ - agent-memory mcp --mode sse --port 9000 -``` - -#### From Source - -```bash -# Install dependencies -pip install uv -uv sync --all-extras - -# Start Redis -docker compose up redis - -# Start the server (development mode, asyncio task backend) -uv run agent-memory api --task-backend=asyncio -``` - -### Core CLI Commands - -| Command | Typical Use | Backend Behavior | -|---|---|---| -| `uv run agent-memory api --task-backend=asyncio` | Local development (single process) | Uses `asyncio` inline tasks; no separate worker | -| `uv run agent-memory api` | Production API server | Defaults to `docket`; run `uv run agent-memory task-worker` | -| `uv run agent-memory mcp` | Claude Desktop / local stdio MCP | Defaults to `asyncio`; no worker required | -| `uv run agent-memory mcp --mode sse --port 9000 --task-backend docket` | Network MCP with shared workers | Uses `docket`; run `uv run agent-memory task-worker` | -| `uv run agent-memory task-worker --concurrency 10` | Background processing | Processes queued Docket tasks | - -### 2. Python SDK - -Allowing the server to extract memories from working memory is easiest. However, you can also manually create memories: - -```bash -# Install the client -pip install agent-memory-client - -# For LangChain integration -pip install agent-memory-client langchain-core -``` - -```python -from agent_memory_client import MemoryAPIClient, MemoryClientConfig +## Redis Agent Memory in Redis Iris -# Connect to server -client = MemoryAPIClient(MemoryClientConfig(base_url="http://localhost:8000")) +[Redis Agent Memory in Redis Iris](https://redis.io/agent-memory/) is Redis’s official managed path for teams that want agent memory as a service, not another subsystem to build and operate themselves. [Redis Iris](https://redis.io/iris/) is the real-time context engine for agents, designed to deliver fresh, relevant context at runtime, and Redis Agent Memory is the part of Iris that makes context compound across turns, sessions, channels, and agents. -# Store memories -await client.create_long_term_memory([ - { - "text": "User prefers morning meetings", - "user_id": "user123", - "memory_type": "preference" - } -]) +Redis Agent Memory in Iris gives you the Redis-managed experience: a persistent, structured memory layer for AI agents exposed through a REST API and client libraries, with dedicated endpoints, secure API key management, configurable memory schemas, and automatic TTL-based lifecycle management. The point is not just storage. It is to remove the custom memory infrastructure teams otherwise end up building around session handling, extraction, retrieval, and lifecycle management. -# Search memories -results = await client.search_long_term_memory( - text="What time does the user like meetings?", - user_id="user123" -) -``` +Redis Agent Memory uses a two-tier model. Session memory keeps the active conversation state, session history, and session-specific metadata close at hand, with configurable TTL control for retention. Long-term memory stores extracted facts and learned patterns from past interactions as text plus vector embeddings for semantic retrieval. As new events are written to working memory, Redis Agent Memory automatically extracts important information and promotes it to long-term memory in the background, so memory accumulates without slowing down the live agent loop. -> **Note**: While you can call client functions directly as shown above, using **MCP or SDK-provided tool calls** is recommended for AI agents as it provides better integration, automatic context management, and follows AI-native patterns. For the best performance, you can add messages to working memory and allow the server to extract memories in the background. See **[Memory Integration Patterns](https://redis.github.io/agent-memory-server/memory-integration-patterns/)** for guidance on when to use each approach. +That matters because Redis Iris is not just a memory feature in isolation. It is a broader context engine built to address the production problems agents actually hit: fragmented data, stale operational state, slow retrieval, and interactions that do not improve over time. Within that story, Redis Agent Memory is the compounding memory layer; [Redis Context Retriever](https://redis.io/context-retriever/) makes business data navigable; [Redis Data Integration](https://redis.io/data-integration/) keeps operational state fresh; and [Redis LangCache](https://redis.io/langcache/) helps repeated work stay inside the latency budget. +If you are evaluating the supported Redis path, these are the best places to start: -#### LangChain Integration +- Product overview: [Redis Iris](https://redis.io/iris/) +- Agent Memory overview: [Redis Agent Memory docs](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/) +- Redis Cloud service guide: [Redis Agent Memory on Redis Cloud](https://redis.io/docs/latest/operate/rc/context-engine/agent-memory/) -For LangChain users, the SDK provides automatic conversion of memory client tools to LangChain-compatible tools, eliminating the need for manual wrapping with `@tool` decorators. +A practical getting-started flow on Redis Cloud looks like this: -```python -from agent_memory_client import create_memory_client -from agent_memory_client.integrations.langchain import get_memory_tools -from langchain.agents import create_agent -from langchain_openai import ChatOpenAI +- [Create a database](https://redis.io/docs/latest/operate/rc/databases/create-database/) +- [Create an Agent Memory service](https://redis.io/docs/latest/operate/rc/context-engine/agent-memory/create-service/) +- [Use the Agent Memory API](https://redis.io/docs/latest/operate/rc/context-engine/agent-memory/use-agent-memory/) from your application +- [View and manage your service](https://redis.io/docs/latest/operate/rc/context-engine/agent-memory/view-service/) -# Get LangChain-compatible tools automatically -memory_client = await create_memory_client("http://localhost:8000") -tools = get_memory_tools( - memory_client=memory_client, - session_id="my_session", - user_id="alice" -) +For implementation details and usage examples, see: -# Create a LangGraph-based agent with memory tools -llm = ChatOpenAI(model="gpt-4o") -agent = create_agent( - llm, tools, - system_prompt="You are a helpful assistant with memory." -) +- [API and SDK examples](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/api-examples/) +- [API reference](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/api-reference/) -# Use the agent -result = await agent.ainvoke({"messages": [("human", "Remember that I love pizza")]}) -print(result["messages"][-1].content) -``` -### 3. MCP Integration +## V0 — the open-source research foundation -```bash -# Start MCP server (stdio mode - recommended for Claude Desktop) -uv run agent-memory mcp +[**`V0/`**](./V0/) contains the original Redis Agent Memory Server: an open-source reference implementation for agent memory with REST and MCP interfaces, working and long-term memory, configurable extraction strategies, and Redis-backed semantic search. +It serves as the research foundation and architectural starting point for Redis Agent Memory, but it is not the current supported production path. -# Or with SSE mode (development mode, default asyncio backend) -uv run agent-memory mcp --mode sse --port 9000 -``` +- **Start here:** [`V0/README.md`](./V0/README.md) +- **Documentation:** https://redis.github.io/agent-memory-server/ +- Build, test, and run everything from inside `V0/` (e.g. `cd V0 && make test`). -### MCP config via uvx (recommended) - -Use this in your MCP tool configuration (e.g., Claude Desktop mcp.json): - -```json -{ - "mcpServers": { - "memory": { - "command": "uvx", - "args": ["--from", "agent-memory-server", "agent-memory", "mcp"], - "env": { - "DISABLE_AUTH": "true", - "REDIS_URL": "redis://localhost:6379", - "OPENAI_API_KEY": "" - } - } - } -} -``` - -Notes: -- API keys: Set either `OPENAI_API_KEY` (default models use OpenAI) or switch to Anthropic by setting `ANTHROPIC_API_KEY` and `GENERATION_MODEL` to an Anthropic model (e.g., `claude-3-5-haiku-20241022`). - -- Make sure your MCP host can find `uvx` (on its PATH or by using an absolute command path). - - macOS: `brew install uv` - - If not on PATH, set `"command"` to the absolute path (e.g., `/opt/homebrew/bin/uvx` on Apple Silicon, `/usr/local/bin/uvx` on Intel macOS). On Linux, `~/.local/bin/uvx` is common. See https://docs.astral.sh/uv/getting-started/ -- For production, remove `DISABLE_AUTH` and configure proper authentication. - -## LLM Provider Configuration - -The server uses [LiteLLM](https://docs.litellm.ai/) to support 100+ LLM providers. Configure via environment variables: - -```bash -# OpenAI (default) -export OPENAI_API_KEY=sk-... -export GENERATION_MODEL=gpt-4o -export EMBEDDING_MODEL=text-embedding-3-small - -# Anthropic -export ANTHROPIC_API_KEY=sk-ant-... -export GENERATION_MODEL=claude-3-5-sonnet-20241022 -export EMBEDDING_MODEL=text-embedding-3-small # Use OpenAI for embeddings - -# AWS Bedrock -export AWS_ACCESS_KEY_ID=... -export AWS_SECRET_ACCESS_KEY=... -export AWS_REGION_NAME=us-east-1 -export GENERATION_MODEL=anthropic.claude-sonnet-4-5-20250929-v1:0 -export EMBEDDING_MODEL=bedrock/amazon.titan-embed-text-v2:0 # Note: bedrock/ prefix required - -# Ollama (local) -export OLLAMA_API_BASE=http://localhost:11434 -export GENERATION_MODEL=ollama/llama2 -export EMBEDDING_MODEL=ollama/nomic-embed-text -export REDISVL_VECTOR_DIMENSIONS=768 # Required for Ollama -``` - -See **[LLM Providers](https://redis.github.io/agent-memory-server/llm-providers/)** for complete configuration options. - -## Documentation - -📚 **[Full Documentation](https://redis.github.io/agent-memory-server/)** - Complete guides, API reference, and examples - -### Key Documentation Sections: - -- **[Quick Start Guide](https://redis.github.io/agent-memory-server/quick-start/)** - Get up and running in minutes -- **[Python SDK](https://redis.github.io/agent-memory-server/python-sdk/)** - Complete SDK reference with examples -- **[LangChain Integration](https://redis.github.io/agent-memory-server/langchain-integration/)** - Automatic tool conversion for LangChain -- **[LLM Providers](https://redis.github.io/agent-memory-server/llm-providers/)** - Configure OpenAI, Anthropic, AWS Bedrock, Ollama, and more -- **[Embedding Providers](https://redis.github.io/agent-memory-server/embedding-providers/)** - Configure embedding models for semantic search -- **[Custom Memory Vector Databases](https://redis.github.io/agent-memory-server/custom-memory-vector-db/)** - Configure custom memory vector databases -- **[Authentication](https://redis.github.io/agent-memory-server/authentication/)** - OAuth2/JWT setup for production -- **[Memory Types](https://redis.github.io/agent-memory-server/long-term-memory/#memory-types)** - Understanding semantic vs episodic memory -- **[API Reference](https://redis.github.io/agent-memory-server/api/)** - REST API endpoints -- **[MCP Protocol](https://redis.github.io/agent-memory-server/mcp/)** - Model Context Protocol integration - -## Architecture - -``` -Working Memory (Session-scoped) → Long-term Memory (Persistent) - ↓ ↓ -- Messages - Semantic, keyword & hybrid search -- Structured memories - Topic modeling -- Summary of past messages - Entity recognition -- Metadata - Deduplication -``` - -## Use Cases - -- **AI Assistants**: Persistent memory across conversations -- **Customer Support**: Context from previous interactions -- **Personal AI**: Learning user preferences and history -- **Research Assistants**: Accumulating knowledge over time -- **Chatbots**: Maintaining context and personalization - -## Development - -```bash -# Initial setup -make setup - -# Full local verification (matches CI lint + service tests) -make verify - -# Or run individual layers -make pre-commit -make test -make test-api - -# Start development stack (choose one based on your needs) -docker compose up api redis # Development mode -docker compose up api task-worker redis mcp # Production-like mode -``` - -`make verify` requires `OPENAI_API_KEY` because it runs `make test-api`. ## License -Apache License 2.0 - see [LICENSE](LICENSE) file for details. - -## Contributing - -We welcome contributions! Please see the [development documentation](docs/development.md) for guidelines. +This project is licensed under the **Apache License 2.0** (Redis, Inc.). See +[`LICENSE`](./LICENSE) at the repository root. diff --git a/.dockerignore b/V0/.dockerignore similarity index 100% rename from .dockerignore rename to V0/.dockerignore diff --git a/.env.example b/V0/.env.example similarity index 100% rename from .env.example rename to V0/.env.example diff --git a/V0/AGENTS.md b/V0/AGENTS.md new file mode 100644 index 00000000..d6d5a3e4 --- /dev/null +++ b/V0/AGENTS.md @@ -0,0 +1,256 @@ +# CLAUDE.md - Redis Agent Memory Server Project Context + +## Redis Version +This project uses Redis 8, which is the redis:8 docker image. +Do not use Redis Stack or other earlier versions of Redis. + +## Frequently Used Commands + +### Project Setup +Get started in a new environment by installing `uv`: +```bash +pip install uv # Install uv (once) +make setup # Create .venv, sync deps, install pre-commit hooks +make sync # Sync latest dependencies +``` + +### Activate the virtual environment +You MUST always activate the virtualenv before running commands: + +```bash +source .venv/bin/activate +``` + +### Running Tests +Always run tests before committing. You MUST have 100% of the tests in the +code basepassing to commit. + +Run all tests like this, including tests that require API keys in the +environment: +```bash +make test-api +``` + +### Linting + +```bash +make pre-commit # Run the exact formatting/lint hooks used in CI +make verify # Run full local verification (pre-commit + API tests) +``` + +### Managing Dependencies +uv add # Add a dependency to pyproject.toml and update lock file +uv remove # Remove a dependency from pyproject.toml and update lock file + +### Running Servers +# Server commands +uv run agent-memory api # Start REST API server (default port 8000) +uv run agent-memory mcp # Start MCP server (stdio mode) +uv run agent-memory mcp --mode sse --port 9000 # Start MCP server (SSE mode) + +### Database Operations +# Database/Redis operations +uv run agent-memory rebuild-index # Rebuild Redis search index +uv run agent-memory migrate-memories # Run memory migrations + +### Background Tasks +# Background task management +uv run agent-memory task-worker # Start background task worker +# Schedule a specific task +uv run agent-memory schedule-task "agent_memory_server.long_term_memory.compact_long_term_memories" + +### Running All Containers +# Docker development +docker-compose up # Start full stack (API, MCP, Redis) +docker-compose up redis # Start only Redis Stack +docker-compose down # Stop all services +``` + +### Committing Changes +IMPORTANT: This project uses `pre-commit`. You should run `pre-commit` +before committing: +```bash +make pre-commit +``` + +## Important Architectural Patterns + +### Dual Interface Design (REST + MCP) +- **REST API**: Traditional HTTP endpoints for web applications (`api.py`) +- **MCP Server**: Model Context Protocol for AI agent integration (`mcp.py`) +- Both interfaces share the same core memory management logic + +### Memory Architecture +Two-tier memory system. Data flows from Working Memory → Long-term Memory: +important information written to working memory is extracted and promoted to +long-term memory. + +- **Working Memory** (session-scoped): messages, context, structured memories, metadata +- **Long-term Memory** (persistent): semantic search, topic modeling, entity recognition, deduplication + +### RedisVL Integration +**CRITICAL**: Always use RedisVL query types instead of direct redis-py client access for searches: +```python +# Correct - Use RedisVL queries +from redisvl.query import VectorQuery, FilterQuery +query = VectorQuery(vector=embedding, vector_field_name="vector", return_fields=["text"]) + +# Avoid - Direct redis client searches +# redis.ft().search(...) # Don't do this +``` + +### Async-First Design +- All core operations are async +- Background task processing with Docket +- Async Redis connections throughout + +## Critical Rules + +### Import Placement +Place all imports at the top of modules, not inside functions. Inline imports should only be used when strictly necessary (e.g., avoiding circular dependencies, optional dependencies, or significant startup performance concerns). + +### Authentication +- **PRODUCTION**: Never set `DISABLE_AUTH=true` in production +- **DEVELOPMENT**: Use `DISABLE_AUTH=true` for local testing only +- JWT/OAuth2 authentication required for all endpoints except `/health`, `/docs`, `/openapi.json` + +### Memory Management +- Working memory automatically promotes structured memories to long-term storage +- Conversations are summarized when exceeding window size +- Use model-aware token limits for context window management + +### RedisVL Usage (Required) +Always use RedisVL query types for any search operations. This is a project requirement. + +## Testing Notes + +The project uses `pytest` with `testcontainers` for Redis integration testing: + +- `make test` - Run the standard test suite +- `make test-api` - Run all tests including API-key-dependent tests +- `make test-unit` - Unit tests only +- `make test-integration` - Integration tests (require Redis) +- `make test-cov` - Run tests with coverage + +## Project Structure + +``` +agent_memory_server/ +├── main.py # FastAPI application entry point +├── api.py # REST API endpoints +├── mcp.py # MCP server implementation +├── config.py # Configuration management +├── auth.py # OAuth2/JWT authentication +├── models.py # Pydantic data models +├── working_memory.py # Session-scoped memory management +├── long_term_memory.py # Persistent memory with semantic search +├── messages.py # Message handling and formatting +├── summarization.py # Conversation summarization +├── extraction.py # Topic and entity extraction +├── filters.py # Search filtering logic +├── llm/ # LLM client package (LiteLLM-based) +│ ├── __init__.py # Re-exports for clean imports +│ ├── client.py # LLMClient class with chat/embedding methods +│ ├── types.py # ChatCompletionResponse, EmbeddingResponse, LLMBackend +│ └── exceptions.py # LLMClientError, ModelValidationError, APIKeyMissingError +├── migrations.py # Database schema migrations +├── docket_tasks.py # Background task definitions +├── cli.py # Command-line interface +├── dependencies.py # FastAPI dependency injection +├── healthcheck.py # Health check endpoint +├── logging.py # Structured logging setup +├── client/ # Client libraries +└── utils/ # Utility modules + ├── redis.py # Redis connection and setup + ├── keys.py # Redis key management + └── api_keys.py # API key utilities +``` + +## Core Components + +### 1. Memory Management +- **Working Memory**: Session-scoped storage with automatic summarization +- **Long-term Memory**: Persistent storage with semantic search capabilities +- **Memory Promotion**: Automatic migration from working to long-term memory +- **Deduplication**: Prevents duplicate memories using content hashing + +### 2. Search and Retrieval +- **Semantic Search**: Vector-based similarity search using embeddings +- **Filtering System**: Advanced filtering by session, namespace, topics, entities, timestamps +- **Hybrid Search**: Combines semantic similarity with metadata filtering +- **RedisVL Integration**: All search operations use RedisVL query builders + +### 3. AI Integration +- **Topic Modeling**: Automatic topic extraction using BERTopic or LLM +- **Entity Recognition**: BERT-based named entity recognition +- **Summarization**: Conversation summarization when context window exceeded +- **Multi-LLM Support**: OpenAI, Anthropic, and other providers + +### 4. Authentication & Security +- **OAuth2/JWT**: Industry-standard authentication with JWKS validation +- **Multi-Provider**: Auth0, AWS Cognito, Okta, Azure AD support +- **Role-Based Access**: Fine-grained permissions using JWT claims +- **Development Mode**: `DISABLE_AUTH` for local development + +### 5. Background Processing +- **Docket Tasks**: Redis-based task queue for background operations +- **Memory Indexing**: Asynchronous embedding generation and indexing +- **Compaction**: Periodic cleanup and optimization of stored memories + +## Environment Configuration + +Key environment variables: +```bash +# Redis +REDIS_URL=redis://localhost:6379 + +# Authentication (Production) +OAUTH2_ISSUER_URL=https://your-auth-provider.com +OAUTH2_AUDIENCE=your-api-audience +DISABLE_AUTH=false # Never true in production + +# Development +DISABLE_AUTH=true # Local development only +LOG_LEVEL=DEBUG + +# AI Services +OPENAI_API_KEY=your-key +ANTHROPIC_API_KEY=your-key +GENERATION_MODEL=gpt-4o-mini +EMBEDDING_MODEL=text-embedding-3-small + +# Memory Configuration +LONG_TERM_MEMORY=true +ENABLE_TOPIC_EXTRACTION=true +ENABLE_NER=true +``` + +## API Reference + +### REST API (Port 8000) +- Session management (`/v1/working-memory/`) +- Working memory operations (`/v1/working-memory/{id}`) +- Long-term memory search (`/v1/long-term-memory/search`) +- Memory hydration (`/v1/memory/prompt`) + +### MCP Server (Port 9000) +- `create_long_term_memories` - Store persistent memories +- `search_long_term_memory` - Semantic search with filtering +- `memory_prompt` - Hydrate queries with relevant context +- `set_working_memory` - Manage session memory + +## Development Workflow + +0. **Install uv**: `pip install uv` to get started with uv +1. **Setup**: `make setup` +2. **Redis**: Start Redis Stack via `docker-compose up redis` +3. **Development**: Use `DISABLE_AUTH=true` for local testing +4. **Testing**: Run `make verify` before committing +5. **Linting**: `make pre-commit` matches the CI lint gate exactly +6. **Background Tasks**: Start worker with `uv run agent-memory task-worker` + +## Documentation +- API docs available at `/docs` when server is running +- OpenAPI spec at `/openapi.json` +- Authentication examples in README.md +- System architecture diagram in `diagram.png` diff --git a/V0/CLAUDE.md b/V0/CLAUDE.md new file mode 100644 index 00000000..53393a02 --- /dev/null +++ b/V0/CLAUDE.md @@ -0,0 +1,3 @@ +# CLAUDE.md - Redis Agent Memory Server Project Context + +See ./AGENTS.md diff --git a/Dockerfile b/V0/Dockerfile similarity index 100% rename from Dockerfile rename to V0/Dockerfile diff --git a/Dockerfile.standalone b/V0/Dockerfile.standalone similarity index 100% rename from Dockerfile.standalone rename to V0/Dockerfile.standalone diff --git a/Makefile b/V0/Makefile similarity index 100% rename from Makefile rename to V0/Makefile diff --git a/V0/README.md b/V0/README.md new file mode 100644 index 00000000..1b3eae71 --- /dev/null +++ b/V0/README.md @@ -0,0 +1,321 @@ + +
+ +# Redis Agent Memory Server + +A memory layer for AI agents. + + **[Documentation](https://redis.github.io/agent-memory-server/)** • **[GitHub](https://github.com/redis/agent-memory-server)** • **[Docker](https://hub.docker.com/r/redislabs/agent-memory-server)** + +
+ + +> +> This is the original reference implementation of Redis Agent Memory Server. It remains a useful reference and starting point for understanding agent memory, but **it is no longer actively maintained and is not the supported production path.** +> +> For production use, Redis’s official managed path is **[Redis Agent Memory in Redis Iris](https://redis.io/agent-memory/)**, the same two-tier memory model delivered as a managed service, with dedicated endpoints, secure API key management, configurable schemas, and automatic TTL-based lifecycle management, so you don't have to build and operate the memory infrastructure yourself. +> +> - Agent Memory overview: [redis.io/agent-memory](https://redis.io/agent-memory/) +> - Docs: [Redis Agent Memory docs](https://redis.io/docs/latest/develop/ai/context-engine/agent-memory/) +> - Get started on Redis Cloud: [Create an Agent Memory service](https://redis.io/docs/latest/operate/rc/context-engine/agent-memory/create-service/) + +## Features +- **Dual Interface**: REST API and Model Context Protocol (MCP) server +- **Two-Tier Memory**: Working memory (session-scoped) and long-term memory (persistent) +- **Configurable Memory Strategies**: Customize how memories are extracted (discrete, summary, preferences, custom) +- **Semantic, Keyword & Hybrid Search**: Vector-based similarity, full-text keyword, and combined hybrid search with metadata filtering +- **Flexible Backends**: Pluggable memory vector database factory system +- **Multi-Provider LLM Support**: OpenAI, Anthropic, AWS Bedrock, Ollama, Azure, Gemini via [LiteLLM](https://docs.litellm.ai/) +- **AI Integration**: Automatic topic extraction, entity recognition, and conversation summarization +- **Python SDK**: Easy integration with AI applications + +## Quick Start + +### 1. Installation + +#### Using Docker + +Pre-built Docker images are available from: +- **Docker Hub**: [redislabs/agent-memory-server](https://hub.docker.com/r/redislabs/agent-memory-server) +- **GitHub Packages**: [ghcr.io/redis/agent-memory-server](https://github.com/redis/agent-memory-server/pkgs/container/agent-memory-server) + +**Quick Start (Development Mode)**: +```bash +# Start with docker compose +# Note: The 'api' service exposes port 8000. +# Choose one depending on your needs: + +# Option 1: Development mode (no worker, immediate task execution) +docker compose up api redis + +# Option 2: Production-like mode (with background worker) +docker compose up api task-worker redis mcp + +# Or run just the API server (requires separate Redis) +docker run -p 8000:8000 \ + -e REDIS_URL=redis://your-redis:6379 \ + -e OPENAI_API_KEY=your-key \ + redislabs/agent-memory-server:latest \ + agent-memory api --host 0.0.0.0 --port 8000 --task-backend=asyncio +``` + +By default, the image runs the API with the **Docket** task backend, which +expects a separate `agent-memory task-worker` process for non-blocking +background tasks. The example above shows how to override this to use the +asyncio backend for a single-container development setup. + +If you are connecting to a Redis Cluster and want Docket-backed workers, set +`REDIS_URL` to a `redis+cluster://...` or `rediss+cluster://...` URL. AMS will +translate that URL for its other Redis clients internally. + +**Production Deployment**: + +For production, run separate containers for the API and background workers: + +```bash +# API Server (without background worker) +docker run -p 8000:8000 \ + -e REDIS_URL=redis://your-redis:6379 \ + -e OPENAI_API_KEY=your-key \ + -e DISABLE_AUTH=false \ + redislabs/agent-memory-server:latest \ + agent-memory api --host 0.0.0.0 --port 8000 + +# Background Worker (separate container) +docker run \ + -e REDIS_URL=redis://your-redis:6379 \ + -e OPENAI_API_KEY=your-key \ + redislabs/agent-memory-server:latest \ + agent-memory task-worker --concurrency 10 + +# MCP Server (if needed) +docker run -p 9000:9000 \ + -e REDIS_URL=redis://your-redis:6379 \ + -e OPENAI_API_KEY=your-key \ + redislabs/agent-memory-server:latest \ + agent-memory mcp --mode sse --port 9000 +``` + +#### From Source + +```bash +# Install dependencies +pip install uv +uv sync --all-extras + +# Start Redis +docker compose up redis + +# Start the server (development mode, asyncio task backend) +uv run agent-memory api --task-backend=asyncio +``` + +### Core CLI Commands + +| Command | Typical Use | Backend Behavior | +|---|---|---| +| `uv run agent-memory api --task-backend=asyncio` | Local development (single process) | Uses `asyncio` inline tasks; no separate worker | +| `uv run agent-memory api` | Production API server | Defaults to `docket`; run `uv run agent-memory task-worker` | +| `uv run agent-memory mcp` | Claude Desktop / local stdio MCP | Defaults to `asyncio`; no worker required | +| `uv run agent-memory mcp --mode sse --port 9000 --task-backend docket` | Network MCP with shared workers | Uses `docket`; run `uv run agent-memory task-worker` | +| `uv run agent-memory task-worker --concurrency 10` | Background processing | Processes queued Docket tasks | + +### 2. Python SDK + +Allowing the server to extract memories from working memory is easiest. However, you can also manually create memories: + +```bash +# Install the client +pip install agent-memory-client + +# For LangChain integration +pip install agent-memory-client langchain-core +``` + +```python +from agent_memory_client import MemoryAPIClient, MemoryClientConfig + +# Connect to server +client = MemoryAPIClient(MemoryClientConfig(base_url="http://localhost:8000")) + +# Store memories +await client.create_long_term_memory([ + { + "text": "User prefers morning meetings", + "user_id": "user123", + "memory_type": "preference" + } +]) + +# Search memories +results = await client.search_long_term_memory( + text="What time does the user like meetings?", + user_id="user123" +) +``` + +> **Note**: While you can call client functions directly as shown above, using **MCP or SDK-provided tool calls** is recommended for AI agents as it provides better integration, automatic context management, and follows AI-native patterns. For the best performance, you can add messages to working memory and allow the server to extract memories in the background. See **[Memory Integration Patterns](https://redis.github.io/agent-memory-server/memory-integration-patterns/)** for guidance on when to use each approach. + + +#### LangChain Integration + +For LangChain users, the SDK provides automatic conversion of memory client tools to LangChain-compatible tools, eliminating the need for manual wrapping with `@tool` decorators. + +```python +from agent_memory_client import create_memory_client +from agent_memory_client.integrations.langchain import get_memory_tools +from langchain.agents import create_agent +from langchain_openai import ChatOpenAI + +# Get LangChain-compatible tools automatically +memory_client = await create_memory_client("http://localhost:8000") +tools = get_memory_tools( + memory_client=memory_client, + session_id="my_session", + user_id="alice" +) + +# Create a LangGraph-based agent with memory tools +llm = ChatOpenAI(model="gpt-4o") +agent = create_agent( + llm, tools, + system_prompt="You are a helpful assistant with memory." +) + +# Use the agent +result = await agent.ainvoke({"messages": [("human", "Remember that I love pizza")]}) +print(result["messages"][-1].content) +``` + +### 3. MCP Integration + +```bash +# Start MCP server (stdio mode - recommended for Claude Desktop) +uv run agent-memory mcp + +# Or with SSE mode (development mode, default asyncio backend) +uv run agent-memory mcp --mode sse --port 9000 +``` + +### MCP config via uvx (recommended) + +Use this in your MCP tool configuration (e.g., Claude Desktop mcp.json): + +```json +{ + "mcpServers": { + "memory": { + "command": "uvx", + "args": ["--from", "agent-memory-server", "agent-memory", "mcp"], + "env": { + "DISABLE_AUTH": "true", + "REDIS_URL": "redis://localhost:6379", + "OPENAI_API_KEY": "" + } + } + } +} +``` + +Notes: +- API keys: Set either `OPENAI_API_KEY` (default models use OpenAI) or switch to Anthropic by setting `ANTHROPIC_API_KEY` and `GENERATION_MODEL` to an Anthropic model (e.g., `claude-3-5-haiku-20241022`). + +- Make sure your MCP host can find `uvx` (on its PATH or by using an absolute command path). + - macOS: `brew install uv` + - If not on PATH, set `"command"` to the absolute path (e.g., `/opt/homebrew/bin/uvx` on Apple Silicon, `/usr/local/bin/uvx` on Intel macOS). On Linux, `~/.local/bin/uvx` is common. See https://docs.astral.sh/uv/getting-started/ +- For production, remove `DISABLE_AUTH` and configure proper authentication. + +## LLM Provider Configuration + +The server uses [LiteLLM](https://docs.litellm.ai/) to support 100+ LLM providers. Configure via environment variables: + +```bash +# OpenAI (default) +export OPENAI_API_KEY=sk-... +export GENERATION_MODEL=gpt-4o +export EMBEDDING_MODEL=text-embedding-3-small + +# Anthropic +export ANTHROPIC_API_KEY=sk-ant-... +export GENERATION_MODEL=claude-3-5-sonnet-20241022 +export EMBEDDING_MODEL=text-embedding-3-small # Use OpenAI for embeddings + +# AWS Bedrock +export AWS_ACCESS_KEY_ID=... +export AWS_SECRET_ACCESS_KEY=... +export AWS_REGION_NAME=us-east-1 +export GENERATION_MODEL=anthropic.claude-sonnet-4-5-20250929-v1:0 +export EMBEDDING_MODEL=bedrock/amazon.titan-embed-text-v2:0 # Note: bedrock/ prefix required + +# Ollama (local) +export OLLAMA_API_BASE=http://localhost:11434 +export GENERATION_MODEL=ollama/llama2 +export EMBEDDING_MODEL=ollama/nomic-embed-text +export REDISVL_VECTOR_DIMENSIONS=768 # Required for Ollama +``` + +See **[LLM Providers](https://redis.github.io/agent-memory-server/llm-providers/)** for complete configuration options. + +## Documentation + +📚 **[Full Documentation](https://redis.github.io/agent-memory-server/)** - Complete guides, API reference, and examples + +### Key Documentation Sections: + +- **[Quick Start Guide](https://redis.github.io/agent-memory-server/quick-start/)** - Get up and running in minutes +- **[Python SDK](https://redis.github.io/agent-memory-server/python-sdk/)** - Complete SDK reference with examples +- **[LangChain Integration](https://redis.github.io/agent-memory-server/langchain-integration/)** - Automatic tool conversion for LangChain +- **[LLM Providers](https://redis.github.io/agent-memory-server/llm-providers/)** - Configure OpenAI, Anthropic, AWS Bedrock, Ollama, and more +- **[Embedding Providers](https://redis.github.io/agent-memory-server/embedding-providers/)** - Configure embedding models for semantic search +- **[Custom Memory Vector Databases](https://redis.github.io/agent-memory-server/custom-memory-vector-db/)** - Configure custom memory vector databases +- **[Authentication](https://redis.github.io/agent-memory-server/authentication/)** - OAuth2/JWT setup for production +- **[Memory Types](https://redis.github.io/agent-memory-server/long-term-memory/#memory-types)** - Understanding semantic vs episodic memory +- **[API Reference](https://redis.github.io/agent-memory-server/api/)** - REST API endpoints +- **[MCP Protocol](https://redis.github.io/agent-memory-server/mcp/)** - Model Context Protocol integration + +## Architecture + +``` +Working Memory (Session-scoped) → Long-term Memory (Persistent) + ↓ ↓ +- Messages - Semantic, keyword & hybrid search +- Structured memories - Topic modeling +- Summary of past messages - Entity recognition +- Metadata - Deduplication +``` + +## Use Cases + +- **AI Assistants**: Persistent memory across conversations +- **Customer Support**: Context from previous interactions +- **Personal AI**: Learning user preferences and history +- **Research Assistants**: Accumulating knowledge over time +- **Chatbots**: Maintaining context and personalization + +## Development + +```bash +# Initial setup +make setup + +# Full local verification (matches CI lint + service tests) +make verify + +# Or run individual layers +make pre-commit +make test +make test-api + +# Start development stack (choose one based on your needs) +docker compose up api redis # Development mode +docker compose up api task-worker redis mcp # Production-like mode +``` + +`make verify` requires `OPENAI_API_KEY` because it runs `make test-api`. +## License + +Apache License 2.0 - see [LICENSE](LICENSE) file for details. + +## Contributing + +We welcome contributions! Please see the [development documentation](docs/development.md) for guidelines. diff --git a/agent-memory-client/LICENSE b/V0/agent-memory-client/LICENSE similarity index 100% rename from agent-memory-client/LICENSE rename to V0/agent-memory-client/LICENSE diff --git a/agent-memory-client/README.md b/V0/agent-memory-client/README.md similarity index 100% rename from agent-memory-client/README.md rename to V0/agent-memory-client/README.md diff --git a/agent-memory-client/agent-memory-client-java/RELEASE.md b/V0/agent-memory-client/agent-memory-client-java/RELEASE.md similarity index 100% rename from agent-memory-client/agent-memory-client-java/RELEASE.md rename to V0/agent-memory-client/agent-memory-client-java/RELEASE.md diff --git a/agent-memory-client/agent-memory-client-java/build.gradle.kts b/V0/agent-memory-client/agent-memory-client-java/build.gradle.kts similarity index 100% rename from agent-memory-client/agent-memory-client-java/build.gradle.kts rename to V0/agent-memory-client/agent-memory-client-java/build.gradle.kts diff --git a/agent-memory-client/agent-memory-client-java/gradle.properties b/V0/agent-memory-client/agent-memory-client-java/gradle.properties similarity index 100% rename from agent-memory-client/agent-memory-client-java/gradle.properties rename to V0/agent-memory-client/agent-memory-client-java/gradle.properties diff --git a/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.jar b/V0/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.jar rename to V0/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.jar diff --git a/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.properties b/V0/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.properties rename to V0/agent-memory-client/agent-memory-client-java/gradle/wrapper/gradle-wrapper.properties diff --git a/agent-memory-client/agent-memory-client-java/gradlew b/V0/agent-memory-client/agent-memory-client-java/gradlew similarity index 100% rename from agent-memory-client/agent-memory-client-java/gradlew rename to V0/agent-memory-client/agent-memory-client-java/gradlew diff --git a/agent-memory-client/agent-memory-client-java/gradlew.bat b/V0/agent-memory-client/agent-memory-client-java/gradlew.bat similarity index 100% rename from agent-memory-client/agent-memory-client-java/gradlew.bat rename to V0/agent-memory-client/agent-memory-client-java/gradlew.bat diff --git a/agent-memory-client/agent-memory-client-java/jreleaser.yml b/V0/agent-memory-client/agent-memory-client-java/jreleaser.yml similarity index 100% rename from agent-memory-client/agent-memory-client-java/jreleaser.yml rename to V0/agent-memory-client/agent-memory-client-java/jreleaser.yml diff --git a/agent-memory-client/agent-memory-client-java/settings.gradle.kts b/V0/agent-memory-client/agent-memory-client-java/settings.gradle.kts similarity index 100% rename from agent-memory-client/agent-memory-client-java/settings.gradle.kts rename to V0/agent-memory-client/agent-memory-client-java/settings.gradle.kts diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/MemoryAPIClient.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/MemoryAPIClient.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/MemoryAPIClient.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/MemoryAPIClient.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryClientException.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryClientException.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryClientException.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryClientException.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryNotFoundException.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryNotFoundException.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryNotFoundException.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryNotFoundException.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryServerException.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryServerException.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryServerException.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryServerException.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryValidationException.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryValidationException.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryValidationException.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/exceptions/MemoryValidationException.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/common/AckResponse.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/common/AckResponse.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/common/AckResponse.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/common/AckResponse.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/health/HealthCheckResponse.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/health/HealthCheckResponse.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/health/HealthCheckResponse.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/health/HealthCheckResponse.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/ForgetResponse.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/ForgetResponse.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/ForgetResponse.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/ForgetResponse.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecord.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecord.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecord.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecord.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResult.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResult.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResult.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResult.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResults.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResults.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResults.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryRecordResults.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryType.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryType.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryType.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/MemoryType.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/SearchRequest.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/SearchRequest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/SearchRequest.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/longtermemory/SearchRequest.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/CreateSummaryViewRequest.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/CreateSummaryViewRequest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/CreateSummaryViewRequest.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/CreateSummaryViewRequest.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryView.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryView.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryView.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryView.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryViewPartitionResult.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryViewPartitionResult.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryViewPartitionResult.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/summaryview/SummaryViewPartitionResult.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/task/Task.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/task/Task.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/task/Task.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/task/Task.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryMessage.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryMessage.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryMessage.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryMessage.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryStrategyConfig.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryStrategyConfig.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryStrategyConfig.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MemoryStrategyConfig.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MergeStrategy.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MergeStrategy.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MergeStrategy.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/MergeStrategy.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/SessionListResponse.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/SessionListResponse.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/SessionListResponse.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/SessionListResponse.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemory.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemory.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemory.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemory.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResponse.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResponse.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResponse.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResponse.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResult.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResult.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResult.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryResult.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/BaseService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/BaseService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/BaseService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/BaseService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/HealthService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/HealthService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/HealthService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/HealthService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/LongTermMemoryService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/LongTermMemoryService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/LongTermMemoryService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/LongTermMemoryService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/MemoryHydrationService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/MemoryHydrationService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/MemoryHydrationService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/MemoryHydrationService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/SummaryViewService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/SummaryViewService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/SummaryViewService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/SummaryViewService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/TaskService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/TaskService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/TaskService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/TaskService.java diff --git a/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/WorkingMemoryService.java b/V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/WorkingMemoryService.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/WorkingMemoryService.java rename to V0/agent-memory-client/agent-memory-client-java/src/main/java/com/redis/agentmemory/services/WorkingMemoryService.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryAPIClientTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryAPIClientTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryAPIClientTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryAPIClientTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryRecordBuilderTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryRecordBuilderTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryRecordBuilderTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/MemoryRecordBuilderTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/BaseIntegrationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/BaseIntegrationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/BaseIntegrationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/BaseIntegrationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/EndToEndIntegrationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/EndToEndIntegrationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/EndToEndIntegrationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/EndToEndIntegrationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/LongTermMemoryIntegrationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/LongTermMemoryIntegrationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/LongTermMemoryIntegrationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/LongTermMemoryIntegrationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/MemoryHydrationIntegrationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/MemoryHydrationIntegrationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/MemoryHydrationIntegrationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/MemoryHydrationIntegrationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/WorkingMemoryIntegrationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/WorkingMemoryIntegrationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/WorkingMemoryIntegrationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/integration/WorkingMemoryIntegrationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/JsonSerializationTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/JsonSerializationTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/JsonSerializationTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/JsonSerializationTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/longtermemory/MemoryRecordTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/longtermemory/MemoryRecordTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/longtermemory/MemoryRecordTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/longtermemory/MemoryRecordTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/MemoryMessageTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/MemoryMessageTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/MemoryMessageTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/MemoryMessageTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/models/workingmemory/WorkingMemoryTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/HealthServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/HealthServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/HealthServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/HealthServiceTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/LongTermMemoryServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/LongTermMemoryServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/LongTermMemoryServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/LongTermMemoryServiceTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/MemoryHydrationServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/MemoryHydrationServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/MemoryHydrationServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/MemoryHydrationServiceTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/SummaryViewServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/SummaryViewServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/SummaryViewServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/SummaryViewServiceTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/TaskServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/TaskServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/TaskServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/TaskServiceTest.java diff --git a/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/WorkingMemoryServiceTest.java b/V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/WorkingMemoryServiceTest.java similarity index 100% rename from agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/WorkingMemoryServiceTest.java rename to V0/agent-memory-client/agent-memory-client-java/src/test/java/com/redis/agentmemory/services/WorkingMemoryServiceTest.java diff --git a/agent-memory-client/agent-memory-client-js/.gitignore b/V0/agent-memory-client/agent-memory-client-js/.gitignore similarity index 100% rename from agent-memory-client/agent-memory-client-js/.gitignore rename to V0/agent-memory-client/agent-memory-client-js/.gitignore diff --git a/agent-memory-client/agent-memory-client-js/README.md b/V0/agent-memory-client/agent-memory-client-js/README.md similarity index 100% rename from agent-memory-client/agent-memory-client-js/README.md rename to V0/agent-memory-client/agent-memory-client-js/README.md diff --git a/agent-memory-client/agent-memory-client-js/package-lock.json b/V0/agent-memory-client/agent-memory-client-js/package-lock.json similarity index 100% rename from agent-memory-client/agent-memory-client-js/package-lock.json rename to V0/agent-memory-client/agent-memory-client-js/package-lock.json diff --git a/agent-memory-client/agent-memory-client-js/package.json b/V0/agent-memory-client/agent-memory-client-js/package.json similarity index 100% rename from agent-memory-client/agent-memory-client-js/package.json rename to V0/agent-memory-client/agent-memory-client-js/package.json diff --git a/agent-memory-client/agent-memory-client-js/src/client.test.ts b/V0/agent-memory-client/agent-memory-client-js/src/client.test.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/client.test.ts rename to V0/agent-memory-client/agent-memory-client-js/src/client.test.ts diff --git a/agent-memory-client/agent-memory-client-js/src/client.ts b/V0/agent-memory-client/agent-memory-client-js/src/client.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/client.ts rename to V0/agent-memory-client/agent-memory-client-js/src/client.ts diff --git a/agent-memory-client/agent-memory-client-js/src/errors.test.ts b/V0/agent-memory-client/agent-memory-client-js/src/errors.test.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/errors.test.ts rename to V0/agent-memory-client/agent-memory-client-js/src/errors.test.ts diff --git a/agent-memory-client/agent-memory-client-js/src/errors.ts b/V0/agent-memory-client/agent-memory-client-js/src/errors.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/errors.ts rename to V0/agent-memory-client/agent-memory-client-js/src/errors.ts diff --git a/agent-memory-client/agent-memory-client-js/src/filters.test.ts b/V0/agent-memory-client/agent-memory-client-js/src/filters.test.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/filters.test.ts rename to V0/agent-memory-client/agent-memory-client-js/src/filters.test.ts diff --git a/agent-memory-client/agent-memory-client-js/src/filters.ts b/V0/agent-memory-client/agent-memory-client-js/src/filters.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/filters.ts rename to V0/agent-memory-client/agent-memory-client-js/src/filters.ts diff --git a/agent-memory-client/agent-memory-client-js/src/index.ts b/V0/agent-memory-client/agent-memory-client-js/src/index.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/index.ts rename to V0/agent-memory-client/agent-memory-client-js/src/index.ts diff --git a/agent-memory-client/agent-memory-client-js/src/models.test.ts b/V0/agent-memory-client/agent-memory-client-js/src/models.test.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/models.test.ts rename to V0/agent-memory-client/agent-memory-client-js/src/models.test.ts diff --git a/agent-memory-client/agent-memory-client-js/src/models.ts b/V0/agent-memory-client/agent-memory-client-js/src/models.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/src/models.ts rename to V0/agent-memory-client/agent-memory-client-js/src/models.ts diff --git a/agent-memory-client/agent-memory-client-js/tsconfig.json b/V0/agent-memory-client/agent-memory-client-js/tsconfig.json similarity index 100% rename from agent-memory-client/agent-memory-client-js/tsconfig.json rename to V0/agent-memory-client/agent-memory-client-js/tsconfig.json diff --git a/agent-memory-client/agent-memory-client-js/tsup.config.ts b/V0/agent-memory-client/agent-memory-client-js/tsup.config.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/tsup.config.ts rename to V0/agent-memory-client/agent-memory-client-js/tsup.config.ts diff --git a/agent-memory-client/agent-memory-client-js/vitest.config.ts b/V0/agent-memory-client/agent-memory-client-js/vitest.config.ts similarity index 100% rename from agent-memory-client/agent-memory-client-js/vitest.config.ts rename to V0/agent-memory-client/agent-memory-client-js/vitest.config.ts diff --git a/agent-memory-client/agent_memory_client/__init__.py b/V0/agent-memory-client/agent_memory_client/__init__.py similarity index 100% rename from agent-memory-client/agent_memory_client/__init__.py rename to V0/agent-memory-client/agent_memory_client/__init__.py diff --git a/agent-memory-client/agent_memory_client/client.py b/V0/agent-memory-client/agent_memory_client/client.py similarity index 100% rename from agent-memory-client/agent_memory_client/client.py rename to V0/agent-memory-client/agent_memory_client/client.py diff --git a/agent-memory-client/agent_memory_client/exceptions.py b/V0/agent-memory-client/agent_memory_client/exceptions.py similarity index 100% rename from agent-memory-client/agent_memory_client/exceptions.py rename to V0/agent-memory-client/agent_memory_client/exceptions.py diff --git a/agent-memory-client/agent_memory_client/filters.py b/V0/agent-memory-client/agent_memory_client/filters.py similarity index 100% rename from agent-memory-client/agent_memory_client/filters.py rename to V0/agent-memory-client/agent_memory_client/filters.py diff --git a/agent-memory-client/agent_memory_client/integrations/__init__.py b/V0/agent-memory-client/agent_memory_client/integrations/__init__.py similarity index 100% rename from agent-memory-client/agent_memory_client/integrations/__init__.py rename to V0/agent-memory-client/agent_memory_client/integrations/__init__.py diff --git a/agent-memory-client/agent_memory_client/integrations/langchain.py b/V0/agent-memory-client/agent_memory_client/integrations/langchain.py similarity index 100% rename from agent-memory-client/agent_memory_client/integrations/langchain.py rename to V0/agent-memory-client/agent_memory_client/integrations/langchain.py diff --git a/agent-memory-client/agent_memory_client/models.py b/V0/agent-memory-client/agent_memory_client/models.py similarity index 100% rename from agent-memory-client/agent_memory_client/models.py rename to V0/agent-memory-client/agent_memory_client/models.py diff --git a/agent-memory-client/agent_memory_client/py.typed b/V0/agent-memory-client/agent_memory_client/py.typed similarity index 100% rename from agent-memory-client/agent_memory_client/py.typed rename to V0/agent-memory-client/agent_memory_client/py.typed diff --git a/agent-memory-client/agent_memory_client/tool_schema.py b/V0/agent-memory-client/agent_memory_client/tool_schema.py similarity index 100% rename from agent-memory-client/agent_memory_client/tool_schema.py rename to V0/agent-memory-client/agent_memory_client/tool_schema.py diff --git a/agent-memory-client/agent_memory_client/utils/__init__.py b/V0/agent-memory-client/agent_memory_client/utils/__init__.py similarity index 100% rename from agent-memory-client/agent_memory_client/utils/__init__.py rename to V0/agent-memory-client/agent_memory_client/utils/__init__.py diff --git a/agent-memory-client/agent_memory_client/utils/tag_codec.py b/V0/agent-memory-client/agent_memory_client/utils/tag_codec.py similarity index 100% rename from agent-memory-client/agent_memory_client/utils/tag_codec.py rename to V0/agent-memory-client/agent_memory_client/utils/tag_codec.py diff --git a/agent-memory-client/pyproject.toml b/V0/agent-memory-client/pyproject.toml similarity index 100% rename from agent-memory-client/pyproject.toml rename to V0/agent-memory-client/pyproject.toml diff --git a/agent-memory-client/tests/test_basic.py b/V0/agent-memory-client/tests/test_basic.py similarity index 100% rename from agent-memory-client/tests/test_basic.py rename to V0/agent-memory-client/tests/test_basic.py diff --git a/agent-memory-client/tests/test_client.py b/V0/agent-memory-client/tests/test_client.py similarity index 100% rename from agent-memory-client/tests/test_client.py rename to V0/agent-memory-client/tests/test_client.py diff --git a/agent-memory-client/tests/test_langchain_integration.py b/V0/agent-memory-client/tests/test_langchain_integration.py similarity index 100% rename from agent-memory-client/tests/test_langchain_integration.py rename to V0/agent-memory-client/tests/test_langchain_integration.py diff --git a/agent-memory-client/tests/test_tool_schemas.py b/V0/agent-memory-client/tests/test_tool_schemas.py similarity index 100% rename from agent-memory-client/tests/test_tool_schemas.py rename to V0/agent-memory-client/tests/test_tool_schemas.py diff --git a/agent-memory-client/uv.lock b/V0/agent-memory-client/uv.lock similarity index 100% rename from agent-memory-client/uv.lock rename to V0/agent-memory-client/uv.lock diff --git a/agent_memory_server/__init__.py b/V0/agent_memory_server/__init__.py similarity index 100% rename from agent_memory_server/__init__.py rename to V0/agent_memory_server/__init__.py diff --git a/agent_memory_server/_aws/__init__.py b/V0/agent_memory_server/_aws/__init__.py similarity index 100% rename from agent_memory_server/_aws/__init__.py rename to V0/agent_memory_server/_aws/__init__.py diff --git a/agent_memory_server/_aws/clients.py b/V0/agent_memory_server/_aws/clients.py similarity index 100% rename from agent_memory_server/_aws/clients.py rename to V0/agent_memory_server/_aws/clients.py diff --git a/agent_memory_server/_aws/utils.py b/V0/agent_memory_server/_aws/utils.py similarity index 100% rename from agent_memory_server/_aws/utils.py rename to V0/agent_memory_server/_aws/utils.py diff --git a/agent_memory_server/api.py b/V0/agent_memory_server/api.py similarity index 100% rename from agent_memory_server/api.py rename to V0/agent_memory_server/api.py diff --git a/agent_memory_server/auth.py b/V0/agent_memory_server/auth.py similarity index 100% rename from agent_memory_server/auth.py rename to V0/agent_memory_server/auth.py diff --git a/agent_memory_server/cli.py b/V0/agent_memory_server/cli.py similarity index 100% rename from agent_memory_server/cli.py rename to V0/agent_memory_server/cli.py diff --git a/agent_memory_server/config.py b/V0/agent_memory_server/config.py similarity index 100% rename from agent_memory_server/config.py rename to V0/agent_memory_server/config.py diff --git a/agent_memory_server/dependencies.py b/V0/agent_memory_server/dependencies.py similarity index 100% rename from agent_memory_server/dependencies.py rename to V0/agent_memory_server/dependencies.py diff --git a/agent_memory_server/docket_tasks.py b/V0/agent_memory_server/docket_tasks.py similarity index 100% rename from agent_memory_server/docket_tasks.py rename to V0/agent_memory_server/docket_tasks.py diff --git a/agent_memory_server/extraction.py b/V0/agent_memory_server/extraction.py similarity index 100% rename from agent_memory_server/extraction.py rename to V0/agent_memory_server/extraction.py diff --git a/agent_memory_server/filters.py b/V0/agent_memory_server/filters.py similarity index 100% rename from agent_memory_server/filters.py rename to V0/agent_memory_server/filters.py diff --git a/agent_memory_server/healthcheck.py b/V0/agent_memory_server/healthcheck.py similarity index 100% rename from agent_memory_server/healthcheck.py rename to V0/agent_memory_server/healthcheck.py diff --git a/agent_memory_server/llm/__init__.py b/V0/agent_memory_server/llm/__init__.py similarity index 100% rename from agent_memory_server/llm/__init__.py rename to V0/agent_memory_server/llm/__init__.py diff --git a/agent_memory_server/llm/client.py b/V0/agent_memory_server/llm/client.py similarity index 100% rename from agent_memory_server/llm/client.py rename to V0/agent_memory_server/llm/client.py diff --git a/agent_memory_server/llm/embeddings.py b/V0/agent_memory_server/llm/embeddings.py similarity index 100% rename from agent_memory_server/llm/embeddings.py rename to V0/agent_memory_server/llm/embeddings.py diff --git a/agent_memory_server/llm/exceptions.py b/V0/agent_memory_server/llm/exceptions.py similarity index 100% rename from agent_memory_server/llm/exceptions.py rename to V0/agent_memory_server/llm/exceptions.py diff --git a/agent_memory_server/llm/types.py b/V0/agent_memory_server/llm/types.py similarity index 100% rename from agent_memory_server/llm/types.py rename to V0/agent_memory_server/llm/types.py diff --git a/agent_memory_server/logging.py b/V0/agent_memory_server/logging.py similarity index 100% rename from agent_memory_server/logging.py rename to V0/agent_memory_server/logging.py diff --git a/agent_memory_server/long_term_memory.py b/V0/agent_memory_server/long_term_memory.py similarity index 100% rename from agent_memory_server/long_term_memory.py rename to V0/agent_memory_server/long_term_memory.py diff --git a/agent_memory_server/main.py b/V0/agent_memory_server/main.py similarity index 100% rename from agent_memory_server/main.py rename to V0/agent_memory_server/main.py diff --git a/agent_memory_server/mcp.py b/V0/agent_memory_server/mcp.py similarity index 100% rename from agent_memory_server/mcp.py rename to V0/agent_memory_server/mcp.py diff --git a/agent_memory_server/memory_strategies.py b/V0/agent_memory_server/memory_strategies.py similarity index 100% rename from agent_memory_server/memory_strategies.py rename to V0/agent_memory_server/memory_strategies.py diff --git a/agent_memory_server/memory_vector_db.py b/V0/agent_memory_server/memory_vector_db.py similarity index 100% rename from agent_memory_server/memory_vector_db.py rename to V0/agent_memory_server/memory_vector_db.py diff --git a/agent_memory_server/memory_vector_db_factory.py b/V0/agent_memory_server/memory_vector_db_factory.py similarity index 100% rename from agent_memory_server/memory_vector_db_factory.py rename to V0/agent_memory_server/memory_vector_db_factory.py diff --git a/agent_memory_server/migrations.py b/V0/agent_memory_server/migrations.py similarity index 100% rename from agent_memory_server/migrations.py rename to V0/agent_memory_server/migrations.py diff --git a/agent_memory_server/models.py b/V0/agent_memory_server/models.py similarity index 100% rename from agent_memory_server/models.py rename to V0/agent_memory_server/models.py diff --git a/agent_memory_server/prompt_security.py b/V0/agent_memory_server/prompt_security.py similarity index 100% rename from agent_memory_server/prompt_security.py rename to V0/agent_memory_server/prompt_security.py diff --git a/agent_memory_server/summarization.py b/V0/agent_memory_server/summarization.py similarity index 100% rename from agent_memory_server/summarization.py rename to V0/agent_memory_server/summarization.py diff --git a/agent_memory_server/summary_views.py b/V0/agent_memory_server/summary_views.py similarity index 100% rename from agent_memory_server/summary_views.py rename to V0/agent_memory_server/summary_views.py diff --git a/agent_memory_server/tasks.py b/V0/agent_memory_server/tasks.py similarity index 100% rename from agent_memory_server/tasks.py rename to V0/agent_memory_server/tasks.py diff --git a/agent_memory_server/utils/__init__.py b/V0/agent_memory_server/utils/__init__.py similarity index 100% rename from agent_memory_server/utils/__init__.py rename to V0/agent_memory_server/utils/__init__.py diff --git a/agent_memory_server/utils/api_keys.py b/V0/agent_memory_server/utils/api_keys.py similarity index 100% rename from agent_memory_server/utils/api_keys.py rename to V0/agent_memory_server/utils/api_keys.py diff --git a/agent_memory_server/utils/datetime.py b/V0/agent_memory_server/utils/datetime.py similarity index 100% rename from agent_memory_server/utils/datetime.py rename to V0/agent_memory_server/utils/datetime.py diff --git a/agent_memory_server/utils/keys.py b/V0/agent_memory_server/utils/keys.py similarity index 100% rename from agent_memory_server/utils/keys.py rename to V0/agent_memory_server/utils/keys.py diff --git a/agent_memory_server/utils/recency.py b/V0/agent_memory_server/utils/recency.py similarity index 100% rename from agent_memory_server/utils/recency.py rename to V0/agent_memory_server/utils/recency.py diff --git a/agent_memory_server/utils/redis.py b/V0/agent_memory_server/utils/redis.py similarity index 100% rename from agent_memory_server/utils/redis.py rename to V0/agent_memory_server/utils/redis.py diff --git a/agent_memory_server/utils/redis_query.py b/V0/agent_memory_server/utils/redis_query.py similarity index 100% rename from agent_memory_server/utils/redis_query.py rename to V0/agent_memory_server/utils/redis_query.py diff --git a/agent_memory_server/utils/tag_codec.py b/V0/agent_memory_server/utils/tag_codec.py similarity index 100% rename from agent_memory_server/utils/tag_codec.py rename to V0/agent_memory_server/utils/tag_codec.py diff --git a/agent_memory_server/working_memory.py b/V0/agent_memory_server/working_memory.py similarity index 100% rename from agent_memory_server/working_memory.py rename to V0/agent_memory_server/working_memory.py diff --git a/agent_memory_server/working_memory_index.py b/V0/agent_memory_server/working_memory_index.py similarity index 100% rename from agent_memory_server/working_memory_index.py rename to V0/agent_memory_server/working_memory_index.py diff --git a/claude.png b/V0/claude.png similarity index 100% rename from claude.png rename to V0/claude.png diff --git a/cursor.png b/V0/cursor.png similarity index 100% rename from cursor.png rename to V0/cursor.png diff --git a/diagram.png b/V0/diagram.png similarity index 100% rename from diagram.png rename to V0/diagram.png diff --git a/docker-bake.json b/V0/docker-bake.json similarity index 100% rename from docker-bake.json rename to V0/docker-bake.json diff --git a/docker-compose-task-workers.yml b/V0/docker-compose-task-workers.yml similarity index 100% rename from docker-compose-task-workers.yml rename to V0/docker-compose-task-workers.yml diff --git a/docker-compose.yml b/V0/docker-compose.yml similarity index 100% rename from docker-compose.yml rename to V0/docker-compose.yml diff --git a/docker/standalone/entrypoint.sh b/V0/docker/standalone/entrypoint.sh similarity index 100% rename from docker/standalone/entrypoint.sh rename to V0/docker/standalone/entrypoint.sh diff --git a/docker/standalone/supervisord.conf b/V0/docker/standalone/supervisord.conf similarity index 100% rename from docker/standalone/supervisord.conf rename to V0/docker/standalone/supervisord.conf diff --git a/docs/README.md b/V0/docs/README.md similarity index 100% rename from docs/README.md rename to V0/docs/README.md diff --git a/docs/advanced-memory-vector-db.md b/V0/docs/advanced-memory-vector-db.md similarity index 100% rename from docs/advanced-memory-vector-db.md rename to V0/docs/advanced-memory-vector-db.md diff --git a/docs/advanced-topics-index.md b/V0/docs/advanced-topics-index.md similarity index 100% rename from docs/advanced-topics-index.md rename to V0/docs/advanced-topics-index.md diff --git a/docs/agent-examples.md b/V0/docs/agent-examples.md similarity index 100% rename from docs/agent-examples.md rename to V0/docs/agent-examples.md diff --git a/docs/api-reference-index.md b/V0/docs/api-reference-index.md similarity index 100% rename from docs/api-reference-index.md rename to V0/docs/api-reference-index.md diff --git a/docs/api.md b/V0/docs/api.md similarity index 100% rename from docs/api.md rename to V0/docs/api.md diff --git a/docs/authentication.md b/V0/docs/authentication.md similarity index 100% rename from docs/authentication.md rename to V0/docs/authentication.md diff --git a/docs/aws-bedrock.md b/V0/docs/aws-bedrock.md similarity index 100% rename from docs/aws-bedrock.md rename to V0/docs/aws-bedrock.md diff --git a/docs/cli.md b/V0/docs/cli.md similarity index 100% rename from docs/cli.md rename to V0/docs/cli.md diff --git a/docs/configuration.md b/V0/docs/configuration.md similarity index 100% rename from docs/configuration.md rename to V0/docs/configuration.md diff --git a/docs/contextual-grounding.md b/V0/docs/contextual-grounding.md similarity index 100% rename from docs/contextual-grounding.md rename to V0/docs/contextual-grounding.md diff --git a/docs/custom-memory-vector-db.md b/V0/docs/custom-memory-vector-db.md similarity index 100% rename from docs/custom-memory-vector-db.md rename to V0/docs/custom-memory-vector-db.md diff --git a/docs/developer-guide-index.md b/V0/docs/developer-guide-index.md similarity index 100% rename from docs/developer-guide-index.md rename to V0/docs/developer-guide-index.md diff --git a/docs/development.md b/V0/docs/development.md similarity index 100% rename from docs/development.md rename to V0/docs/development.md diff --git a/docs/embedding-providers.md b/V0/docs/embedding-providers.md similarity index 100% rename from docs/embedding-providers.md rename to V0/docs/embedding-providers.md diff --git a/docs/getting-started-index.md b/V0/docs/getting-started-index.md similarity index 100% rename from docs/getting-started-index.md rename to V0/docs/getting-started-index.md diff --git a/docs/getting-started.md b/V0/docs/getting-started.md similarity index 100% rename from docs/getting-started.md rename to V0/docs/getting-started.md diff --git a/docs/index.md b/V0/docs/index.md similarity index 100% rename from docs/index.md rename to V0/docs/index.md diff --git a/docs/java-sdk.md b/V0/docs/java-sdk.md similarity index 100% rename from docs/java-sdk.md rename to V0/docs/java-sdk.md diff --git a/docs/langchain-integration.md b/V0/docs/langchain-integration.md similarity index 100% rename from docs/langchain-integration.md rename to V0/docs/langchain-integration.md diff --git a/docs/llm-providers.md b/V0/docs/llm-providers.md similarity index 100% rename from docs/llm-providers.md rename to V0/docs/llm-providers.md diff --git a/docs/long-term-memory.md b/V0/docs/long-term-memory.md similarity index 100% rename from docs/long-term-memory.md rename to V0/docs/long-term-memory.md diff --git a/docs/mcp.md b/V0/docs/mcp.md similarity index 100% rename from docs/mcp.md rename to V0/docs/mcp.md diff --git a/docs/memory-extraction-strategies.md b/V0/docs/memory-extraction-strategies.md similarity index 100% rename from docs/memory-extraction-strategies.md rename to V0/docs/memory-extraction-strategies.md diff --git a/docs/memory-integration-patterns.md b/V0/docs/memory-integration-patterns.md similarity index 100% rename from docs/memory-integration-patterns.md rename to V0/docs/memory-integration-patterns.md diff --git a/docs/memory-lifecycle.md b/V0/docs/memory-lifecycle.md similarity index 100% rename from docs/memory-lifecycle.md rename to V0/docs/memory-lifecycle.md diff --git a/docs/operations-guide-index.md b/V0/docs/operations-guide-index.md similarity index 100% rename from docs/operations-guide-index.md rename to V0/docs/operations-guide-index.md diff --git a/docs/python-sdk-index.md b/V0/docs/python-sdk-index.md similarity index 100% rename from docs/python-sdk-index.md rename to V0/docs/python-sdk-index.md diff --git a/docs/python-sdk.md b/V0/docs/python-sdk.md similarity index 100% rename from docs/python-sdk.md rename to V0/docs/python-sdk.md diff --git a/docs/query-optimization.md b/V0/docs/query-optimization.md similarity index 100% rename from docs/query-optimization.md rename to V0/docs/query-optimization.md diff --git a/docs/quick-start.md b/V0/docs/quick-start.md similarity index 100% rename from docs/quick-start.md rename to V0/docs/quick-start.md diff --git a/docs/recency-boost.md b/V0/docs/recency-boost.md similarity index 100% rename from docs/recency-boost.md rename to V0/docs/recency-boost.md diff --git a/docs/security-custom-prompts.md b/V0/docs/security-custom-prompts.md similarity index 100% rename from docs/security-custom-prompts.md rename to V0/docs/security-custom-prompts.md diff --git a/docs/stylesheets/extra.css b/V0/docs/stylesheets/extra.css similarity index 100% rename from docs/stylesheets/extra.css rename to V0/docs/stylesheets/extra.css diff --git a/docs/summary-views.md b/V0/docs/summary-views.md similarity index 100% rename from docs/summary-views.md rename to V0/docs/summary-views.md diff --git a/docs/typescript-sdk.md b/V0/docs/typescript-sdk.md similarity index 100% rename from docs/typescript-sdk.md rename to V0/docs/typescript-sdk.md diff --git a/docs/use-cases.md b/V0/docs/use-cases.md similarity index 100% rename from docs/use-cases.md rename to V0/docs/use-cases.md diff --git a/docs/working-memory.md b/V0/docs/working-memory.md similarity index 100% rename from docs/working-memory.md rename to V0/docs/working-memory.md diff --git a/examples/README.md b/V0/examples/README.md similarity index 100% rename from examples/README.md rename to V0/examples/README.md diff --git a/examples/agent_memory_server_interactive_guide.ipynb b/V0/examples/agent_memory_server_interactive_guide.ipynb similarity index 100% rename from examples/agent_memory_server_interactive_guide.ipynb rename to V0/examples/agent_memory_server_interactive_guide.ipynb diff --git a/examples/ai_tutor.py b/V0/examples/ai_tutor.py similarity index 100% rename from examples/ai_tutor.py rename to V0/examples/ai_tutor.py diff --git a/examples/langchain_integration_example.py b/V0/examples/langchain_integration_example.py similarity index 100% rename from examples/langchain_integration_example.py rename to V0/examples/langchain_integration_example.py diff --git a/examples/memory_editing_agent.py b/V0/examples/memory_editing_agent.py similarity index 100% rename from examples/memory_editing_agent.py rename to V0/examples/memory_editing_agent.py diff --git a/examples/memory_prompt_agent.py b/V0/examples/memory_prompt_agent.py similarity index 100% rename from examples/memory_prompt_agent.py rename to V0/examples/memory_prompt_agent.py diff --git a/examples/recent_messages_limit_demo.py b/V0/examples/recent_messages_limit_demo.py similarity index 100% rename from examples/recent_messages_limit_demo.py rename to V0/examples/recent_messages_limit_demo.py diff --git a/examples/travel_agent.py b/V0/examples/travel_agent.py similarity index 100% rename from examples/travel_agent.py rename to V0/examples/travel_agent.py diff --git a/manual_oauth_qa/README.md b/V0/manual_oauth_qa/README.md similarity index 100% rename from manual_oauth_qa/README.md rename to V0/manual_oauth_qa/README.md diff --git a/manual_oauth_qa/TROUBLESHOOTING.md b/V0/manual_oauth_qa/TROUBLESHOOTING.md similarity index 100% rename from manual_oauth_qa/TROUBLESHOOTING.md rename to V0/manual_oauth_qa/TROUBLESHOOTING.md diff --git a/manual_oauth_qa/debug_auth0.py b/V0/manual_oauth_qa/debug_auth0.py similarity index 100% rename from manual_oauth_qa/debug_auth0.py rename to V0/manual_oauth_qa/debug_auth0.py diff --git a/manual_oauth_qa/env_template b/V0/manual_oauth_qa/env_template similarity index 100% rename from manual_oauth_qa/env_template rename to V0/manual_oauth_qa/env_template diff --git a/manual_oauth_qa/manual_auth0_test.py b/V0/manual_oauth_qa/manual_auth0_test.py similarity index 100% rename from manual_oauth_qa/manual_auth0_test.py rename to V0/manual_oauth_qa/manual_auth0_test.py diff --git a/manual_oauth_qa/quick_auth0_setup.sh b/V0/manual_oauth_qa/quick_auth0_setup.sh similarity index 100% rename from manual_oauth_qa/quick_auth0_setup.sh rename to V0/manual_oauth_qa/quick_auth0_setup.sh diff --git a/manual_oauth_qa/quick_setup.sh b/V0/manual_oauth_qa/quick_setup.sh similarity index 100% rename from manual_oauth_qa/quick_setup.sh rename to V0/manual_oauth_qa/quick_setup.sh diff --git a/manual_oauth_qa/setup_check.py b/V0/manual_oauth_qa/setup_check.py similarity index 100% rename from manual_oauth_qa/setup_check.py rename to V0/manual_oauth_qa/setup_check.py diff --git a/manual_oauth_qa/test_auth0.py b/V0/manual_oauth_qa/test_auth0.py similarity index 100% rename from manual_oauth_qa/test_auth0.py rename to V0/manual_oauth_qa/test_auth0.py diff --git a/mkdocs.yml b/V0/mkdocs.yml similarity index 99% rename from mkdocs.yml rename to V0/mkdocs.yml index 8b3377d0..38afa234 100644 --- a/mkdocs.yml +++ b/V0/mkdocs.yml @@ -3,7 +3,7 @@ site_description: Give your AI agents persistent memory and context that gets sm site_url: https://redis.github.io/agent-memory-server repo_url: https://github.com/redis/agent-memory-server repo_name: redis/agent-memory-server -edit_uri: blob/main/docs +edit_uri: blob/main/V0/docs docs_dir: docs exclude_docs: | diff --git a/pyproject.toml b/V0/pyproject.toml similarity index 100% rename from pyproject.toml rename to V0/pyproject.toml diff --git a/pytest.ini b/V0/pytest.ini similarity index 100% rename from pytest.ini rename to V0/pytest.ini diff --git a/scripts/tag_and_push_client.py b/V0/scripts/tag_and_push_client.py similarity index 100% rename from scripts/tag_and_push_client.py rename to V0/scripts/tag_and_push_client.py diff --git a/scripts/tag_and_push_server.py b/V0/scripts/tag_and_push_server.py similarity index 100% rename from scripts/tag_and_push_server.py rename to V0/scripts/tag_and_push_server.py diff --git a/tests/__init__.py b/V0/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to V0/tests/__init__.py diff --git a/tests/benchmarks/test_migration_benchmark.py b/V0/tests/benchmarks/test_migration_benchmark.py similarity index 100% rename from tests/benchmarks/test_migration_benchmark.py rename to V0/tests/benchmarks/test_migration_benchmark.py diff --git a/tests/conftest.py b/V0/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to V0/tests/conftest.py diff --git a/tests/docker-compose.amd64.yml b/V0/tests/docker-compose.amd64.yml similarity index 100% rename from tests/docker-compose.amd64.yml rename to V0/tests/docker-compose.amd64.yml diff --git a/tests/docker-compose.yml b/V0/tests/docker-compose.yml similarity index 100% rename from tests/docker-compose.yml rename to V0/tests/docker-compose.yml diff --git a/tests/integration/test_deduplication_e2e.py b/V0/tests/integration/test_deduplication_e2e.py similarity index 100% rename from tests/integration/test_deduplication_e2e.py rename to V0/tests/integration/test_deduplication_e2e.py diff --git a/tests/integration/test_memory_vector_db_factory_integration.py b/V0/tests/integration/test_memory_vector_db_factory_integration.py similarity index 100% rename from tests/integration/test_memory_vector_db_factory_integration.py rename to V0/tests/integration/test_memory_vector_db_factory_integration.py diff --git a/tests/integration/test_task_created_at_invariant.py b/V0/tests/integration/test_task_created_at_invariant.py similarity index 100% rename from tests/integration/test_task_created_at_invariant.py rename to V0/tests/integration/test_task_created_at_invariant.py diff --git a/tests/integration/test_task_error_message_clearable.py b/V0/tests/integration/test_task_error_message_clearable.py similarity index 100% rename from tests/integration/test_task_error_message_clearable.py rename to V0/tests/integration/test_task_error_message_clearable.py diff --git a/tests/integration/test_task_timestamp_ordering.py b/V0/tests/integration/test_task_timestamp_ordering.py similarity index 100% rename from tests/integration/test_task_timestamp_ordering.py rename to V0/tests/integration/test_task_timestamp_ordering.py diff --git a/tests/integration/test_task_transition_guards.py b/V0/tests/integration/test_task_transition_guards.py similarity index 100% rename from tests/integration/test_task_transition_guards.py rename to V0/tests/integration/test_task_transition_guards.py diff --git a/tests/templates/contextual_grounding_evaluation_prompt.txt b/V0/tests/templates/contextual_grounding_evaluation_prompt.txt similarity index 100% rename from tests/templates/contextual_grounding_evaluation_prompt.txt rename to V0/tests/templates/contextual_grounding_evaluation_prompt.txt diff --git a/tests/templates/extraction_evaluation_prompt.txt b/V0/tests/templates/extraction_evaluation_prompt.txt similarity index 100% rename from tests/templates/extraction_evaluation_prompt.txt rename to V0/tests/templates/extraction_evaluation_prompt.txt diff --git a/tests/test_api.py b/V0/tests/test_api.py similarity index 100% rename from tests/test_api.py rename to V0/tests/test_api.py diff --git a/tests/test_auth.py b/V0/tests/test_auth.py similarity index 100% rename from tests/test_auth.py rename to V0/tests/test_auth.py diff --git a/tests/test_aws_clients.py b/V0/tests/test_aws_clients.py similarity index 100% rename from tests/test_aws_clients.py rename to V0/tests/test_aws_clients.py diff --git a/tests/test_aws_config.py b/V0/tests/test_aws_config.py similarity index 100% rename from tests/test_aws_config.py rename to V0/tests/test_aws_config.py diff --git a/tests/test_aws_utils.py b/V0/tests/test_aws_utils.py similarity index 100% rename from tests/test_aws_utils.py rename to V0/tests/test_aws_utils.py diff --git a/tests/test_cli.py b/V0/tests/test_cli.py similarity index 100% rename from tests/test_cli.py rename to V0/tests/test_cli.py diff --git a/tests/test_client_api.py b/V0/tests/test_client_api.py similarity index 100% rename from tests/test_client_api.py rename to V0/tests/test_client_api.py diff --git a/tests/test_client_enhancements.py b/V0/tests/test_client_enhancements.py similarity index 100% rename from tests/test_client_enhancements.py rename to V0/tests/test_client_enhancements.py diff --git a/tests/test_client_strategy_support.py b/V0/tests/test_client_strategy_support.py similarity index 100% rename from tests/test_client_strategy_support.py rename to V0/tests/test_client_strategy_support.py diff --git a/tests/test_client_tool_calls.py b/V0/tests/test_client_tool_calls.py similarity index 100% rename from tests/test_client_tool_calls.py rename to V0/tests/test_client_tool_calls.py diff --git a/tests/test_context_percentage_calculation.py b/V0/tests/test_context_percentage_calculation.py similarity index 100% rename from tests/test_context_percentage_calculation.py rename to V0/tests/test_context_percentage_calculation.py diff --git a/tests/test_contextual_grounding.py b/V0/tests/test_contextual_grounding.py similarity index 100% rename from tests/test_contextual_grounding.py rename to V0/tests/test_contextual_grounding.py diff --git a/tests/test_contextual_grounding_integration.py b/V0/tests/test_contextual_grounding_integration.py similarity index 100% rename from tests/test_contextual_grounding_integration.py rename to V0/tests/test_contextual_grounding_integration.py diff --git a/tests/test_dependencies.py b/V0/tests/test_dependencies.py similarity index 100% rename from tests/test_dependencies.py rename to V0/tests/test_dependencies.py diff --git a/tests/test_extraction.py b/V0/tests/test_extraction.py similarity index 100% rename from tests/test_extraction.py rename to V0/tests/test_extraction.py diff --git a/tests/test_extraction_logic_fix.py b/V0/tests/test_extraction_logic_fix.py similarity index 100% rename from tests/test_extraction_logic_fix.py rename to V0/tests/test_extraction_logic_fix.py diff --git a/tests/test_filters.py b/V0/tests/test_filters.py similarity index 100% rename from tests/test_filters.py rename to V0/tests/test_filters.py diff --git a/tests/test_forgetting.py b/V0/tests/test_forgetting.py similarity index 100% rename from tests/test_forgetting.py rename to V0/tests/test_forgetting.py diff --git a/tests/test_forgetting_job.py b/V0/tests/test_forgetting_job.py similarity index 100% rename from tests/test_forgetting_job.py rename to V0/tests/test_forgetting_job.py diff --git a/tests/test_full_integration.py b/V0/tests/test_full_integration.py similarity index 100% rename from tests/test_full_integration.py rename to V0/tests/test_full_integration.py diff --git a/tests/test_issue_235.py b/V0/tests/test_issue_235.py similarity index 100% rename from tests/test_issue_235.py rename to V0/tests/test_issue_235.py diff --git a/tests/test_issue_237.py b/V0/tests/test_issue_237.py similarity index 100% rename from tests/test_issue_237.py rename to V0/tests/test_issue_237.py diff --git a/tests/test_llm_client.py b/V0/tests/test_llm_client.py similarity index 100% rename from tests/test_llm_client.py rename to V0/tests/test_llm_client.py diff --git a/tests/test_llm_judge_evaluation.py b/V0/tests/test_llm_judge_evaluation.py similarity index 100% rename from tests/test_llm_judge_evaluation.py rename to V0/tests/test_llm_judge_evaluation.py diff --git a/tests/test_llms.py b/V0/tests/test_llms.py similarity index 100% rename from tests/test_llms.py rename to V0/tests/test_llms.py diff --git a/tests/test_long_term_memory.py b/V0/tests/test_long_term_memory.py similarity index 100% rename from tests/test_long_term_memory.py rename to V0/tests/test_long_term_memory.py diff --git a/tests/test_mcp.py b/V0/tests/test_mcp.py similarity index 100% rename from tests/test_mcp.py rename to V0/tests/test_mcp.py diff --git a/tests/test_mcp_strategy_support.py b/V0/tests/test_mcp_strategy_support.py similarity index 100% rename from tests/test_mcp_strategy_support.py rename to V0/tests/test_mcp_strategy_support.py diff --git a/tests/test_memory_compaction.py b/V0/tests/test_memory_compaction.py similarity index 100% rename from tests/test_memory_compaction.py rename to V0/tests/test_memory_compaction.py diff --git a/tests/test_memory_strategies.py b/V0/tests/test_memory_strategies.py similarity index 100% rename from tests/test_memory_strategies.py rename to V0/tests/test_memory_strategies.py diff --git a/tests/test_memory_vector_db.py b/V0/tests/test_memory_vector_db.py similarity index 100% rename from tests/test_memory_vector_db.py rename to V0/tests/test_memory_vector_db.py diff --git a/tests/test_migrations.py b/V0/tests/test_migrations.py similarity index 100% rename from tests/test_migrations.py rename to V0/tests/test_migrations.py diff --git a/tests/test_models.py b/V0/tests/test_models.py similarity index 100% rename from tests/test_models.py rename to V0/tests/test_models.py diff --git a/tests/test_no_worker_mode.py b/V0/tests/test_no_worker_mode.py similarity index 100% rename from tests/test_no_worker_mode.py rename to V0/tests/test_no_worker_mode.py diff --git a/tests/test_prompt_security.py b/V0/tests/test_prompt_security.py similarity index 100% rename from tests/test_prompt_security.py rename to V0/tests/test_prompt_security.py diff --git a/tests/test_query_optimization_errors.py b/V0/tests/test_query_optimization_errors.py similarity index 100% rename from tests/test_query_optimization_errors.py rename to V0/tests/test_query_optimization_errors.py diff --git a/tests/test_recency_aggregation.py b/V0/tests/test_recency_aggregation.py similarity index 100% rename from tests/test_recency_aggregation.py rename to V0/tests/test_recency_aggregation.py diff --git a/tests/test_recent_messages_limit.py b/V0/tests/test_recent_messages_limit.py similarity index 100% rename from tests/test_recent_messages_limit.py rename to V0/tests/test_recent_messages_limit.py diff --git a/tests/test_redis_utils.py b/V0/tests/test_redis_utils.py similarity index 100% rename from tests/test_redis_utils.py rename to V0/tests/test_redis_utils.py diff --git a/tests/test_semantic_compaction_false_positives.py b/V0/tests/test_semantic_compaction_false_positives.py similarity index 100% rename from tests/test_semantic_compaction_false_positives.py rename to V0/tests/test_semantic_compaction_false_positives.py diff --git a/tests/test_summarization.py b/V0/tests/test_summarization.py similarity index 100% rename from tests/test_summarization.py rename to V0/tests/test_summarization.py diff --git a/tests/test_summary_views.py b/V0/tests/test_summary_views.py similarity index 100% rename from tests/test_summary_views.py rename to V0/tests/test_summary_views.py diff --git a/tests/test_tag_codec.py b/V0/tests/test_tag_codec.py similarity index 100% rename from tests/test_tag_codec.py rename to V0/tests/test_tag_codec.py diff --git a/tests/test_tasks.py b/V0/tests/test_tasks.py similarity index 100% rename from tests/test_tasks.py rename to V0/tests/test_tasks.py diff --git a/tests/test_thread_aware_grounding.py b/V0/tests/test_thread_aware_grounding.py similarity index 100% rename from tests/test_thread_aware_grounding.py rename to V0/tests/test_thread_aware_grounding.py diff --git a/tests/test_token_auth.py b/V0/tests/test_token_auth.py similarity index 100% rename from tests/test_token_auth.py rename to V0/tests/test_token_auth.py diff --git a/tests/test_token_cli.py b/V0/tests/test_token_cli.py similarity index 100% rename from tests/test_token_cli.py rename to V0/tests/test_token_cli.py diff --git a/tests/test_tool_contextual_grounding.py b/V0/tests/test_tool_contextual_grounding.py similarity index 100% rename from tests/test_tool_contextual_grounding.py rename to V0/tests/test_tool_contextual_grounding.py diff --git a/tests/test_working_memory.py b/V0/tests/test_working_memory.py similarity index 100% rename from tests/test_working_memory.py rename to V0/tests/test_working_memory.py diff --git a/tests/test_working_memory_reconstruction.py b/V0/tests/test_working_memory_reconstruction.py similarity index 100% rename from tests/test_working_memory_reconstruction.py rename to V0/tests/test_working_memory_reconstruction.py diff --git a/tests/test_working_memory_strategies.py b/V0/tests/test_working_memory_strategies.py similarity index 100% rename from tests/test_working_memory_strategies.py rename to V0/tests/test_working_memory_strategies.py diff --git a/tests/unit/test_factory_patterns.py b/V0/tests/unit/test_factory_patterns.py similarity index 100% rename from tests/unit/test_factory_patterns.py rename to V0/tests/unit/test_factory_patterns.py diff --git a/uv.lock b/V0/uv.lock similarity index 100% rename from uv.lock rename to V0/uv.lock diff --git a/workbench/.env.example b/V0/workbench/.env.example similarity index 100% rename from workbench/.env.example rename to V0/workbench/.env.example diff --git a/workbench/.gitignore b/V0/workbench/.gitignore similarity index 100% rename from workbench/.gitignore rename to V0/workbench/.gitignore diff --git a/workbench/README.md b/V0/workbench/README.md similarity index 100% rename from workbench/README.md rename to V0/workbench/README.md diff --git a/workbench/index.html b/V0/workbench/index.html similarity index 100% rename from workbench/index.html rename to V0/workbench/index.html diff --git a/workbench/package-lock.json b/V0/workbench/package-lock.json similarity index 100% rename from workbench/package-lock.json rename to V0/workbench/package-lock.json diff --git a/workbench/package.json b/V0/workbench/package.json similarity index 100% rename from workbench/package.json rename to V0/workbench/package.json diff --git a/workbench/postcss.config.js b/V0/workbench/postcss.config.js similarity index 100% rename from workbench/postcss.config.js rename to V0/workbench/postcss.config.js diff --git a/workbench/public/favicon.svg b/V0/workbench/public/favicon.svg similarity index 100% rename from workbench/public/favicon.svg rename to V0/workbench/public/favicon.svg diff --git a/workbench/src/App.tsx b/V0/workbench/src/App.tsx similarity index 100% rename from workbench/src/App.tsx rename to V0/workbench/src/App.tsx diff --git a/workbench/src/components/RedisLogo.tsx b/V0/workbench/src/components/RedisLogo.tsx similarity index 100% rename from workbench/src/components/RedisLogo.tsx rename to V0/workbench/src/components/RedisLogo.tsx diff --git a/workbench/src/components/layout/Header.tsx b/V0/workbench/src/components/layout/Header.tsx similarity index 100% rename from workbench/src/components/layout/Header.tsx rename to V0/workbench/src/components/layout/Header.tsx diff --git a/workbench/src/config/personas.ts b/V0/workbench/src/config/personas.ts similarity index 100% rename from workbench/src/config/personas.ts rename to V0/workbench/src/config/personas.ts diff --git a/workbench/src/context/BackendContext.tsx b/V0/workbench/src/context/BackendContext.tsx similarity index 100% rename from workbench/src/context/BackendContext.tsx rename to V0/workbench/src/context/BackendContext.tsx diff --git a/workbench/src/index.css b/V0/workbench/src/index.css similarity index 100% rename from workbench/src/index.css rename to V0/workbench/src/index.css diff --git a/workbench/src/lib/api.ts b/V0/workbench/src/lib/api.ts similarity index 100% rename from workbench/src/lib/api.ts rename to V0/workbench/src/lib/api.ts diff --git a/workbench/src/lib/chat.ts b/V0/workbench/src/lib/chat.ts similarity index 100% rename from workbench/src/lib/chat.ts rename to V0/workbench/src/lib/chat.ts diff --git a/workbench/src/lib/mcp-client.ts b/V0/workbench/src/lib/mcp-client.ts similarity index 100% rename from workbench/src/lib/mcp-client.ts rename to V0/workbench/src/lib/mcp-client.ts diff --git a/workbench/src/lib/openai.ts b/V0/workbench/src/lib/openai.ts similarity index 100% rename from workbench/src/lib/openai.ts rename to V0/workbench/src/lib/openai.ts diff --git a/workbench/src/lib/utils.ts b/V0/workbench/src/lib/utils.ts similarity index 100% rename from workbench/src/lib/utils.ts rename to V0/workbench/src/lib/utils.ts diff --git a/workbench/src/main.tsx b/V0/workbench/src/main.tsx similarity index 100% rename from workbench/src/main.tsx rename to V0/workbench/src/main.tsx diff --git a/workbench/src/pages/ChatPage.tsx b/V0/workbench/src/pages/ChatPage.tsx similarity index 100% rename from workbench/src/pages/ChatPage.tsx rename to V0/workbench/src/pages/ChatPage.tsx diff --git a/workbench/src/pages/ExplorerPage.tsx b/V0/workbench/src/pages/ExplorerPage.tsx similarity index 100% rename from workbench/src/pages/ExplorerPage.tsx rename to V0/workbench/src/pages/ExplorerPage.tsx diff --git a/workbench/src/vite-env.d.ts b/V0/workbench/src/vite-env.d.ts similarity index 100% rename from workbench/src/vite-env.d.ts rename to V0/workbench/src/vite-env.d.ts diff --git a/workbench/tsconfig.json b/V0/workbench/tsconfig.json similarity index 100% rename from workbench/tsconfig.json rename to V0/workbench/tsconfig.json diff --git a/workbench/vite.config.ts b/V0/workbench/vite.config.ts similarity index 100% rename from workbench/vite.config.ts rename to V0/workbench/vite.config.ts