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..76653682 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,259 +1,9 @@ -# 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 -``` - -### 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 -```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` +The repository root is a thin landing layer — see [`README.md`](./README.md). 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..ddb470ae 100644 --- a/README.md +++ b/README.md @@ -1,311 +1,53 @@ -
-# 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 -``` +This repository contains **V0**, the original open source research foundation and reference architecture for agent memory. While it remains a useful reference and resource, Redis’s official supported path for production use is now **Redis Agent Memory** in **Redis Iris**, our production-ready agent memory service. -```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" - } -]) +Where V0 gives you the original open-source research foundation, 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.). A copy +is provided at both the repository root ([`LICENSE`](./LICENSE)) and inside +[`V0/LICENSE`](./V0/LICENSE). 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..a4d912b2 --- /dev/null +++ b/V0/AGENTS.md @@ -0,0 +1,259 @@ +# 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 +```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` 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/agent-memory-client/LICENSE b/V0/LICENSE similarity index 100% rename from agent-memory-client/LICENSE rename to V0/LICENSE 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..2c1f39a1 --- /dev/null +++ b/V0/README.md @@ -0,0 +1,311 @@ + +
+ +# 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)** + +
+ +## 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/V0/agent-memory-client/LICENSE b/V0/agent-memory-client/LICENSE new file mode 100644 index 00000000..0fab2dd6 --- /dev/null +++ b/V0/agent-memory-client/LICENSE @@ -0,0 +1,202 @@ +Copyright (c) 2025 Redis, Inc. Released under the Apache License 2.0: + + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 Metal Technologies Inc + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the 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