claude-os/setup.sh
Bob Roberts bb3f468dd4 Add setup.sh and fix database path consistency across services
Add comprehensive one-command setup.sh script that handles:
- Prerequisites validation (Python 3, Git)
- Virtual environment creation and dependency installation
- Ollama installation and model download (llama3.1, nomic-embed-text)
- Redis installation and startup
- Directory and database initialization
- Frontend npm dependencies
- Clear progress output and next steps

Fix critical database path issues:
- Use absolute path calculation in config.py to ensure consistency
- Export SQLITE_DB_PATH environment variable in startup scripts
- Prevents database separation between app and MCP server

Fix document metadata field naming:
- Change metadata field from 'source' to 'filename' in MCP ingest
- Ensures consistency with existing document format
- Fixes document visibility issue in API endpoints

Update startup scripts to support environment-based database configuration.

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 20:08:32 -05:00

310 lines
12 KiB
Bash
Executable file

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Banner
clear
echo -e "${CYAN}"
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ 🚀 Claude OS Setup Script ║"
echo "║ ║"
echo "║ This script will set up Claude OS with all dependencies ║"
echo "║ and prepare it for development ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo -e "${NC}\n"
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$PROJECT_DIR"
# Step 1: Check prerequisites
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 1: Checking Prerequisites${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
# Check Python
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ Python 3 is not installed${NC}"
echo "Install Python 3 from https://www.python.org/downloads/"
exit 1
fi
PYTHON_VERSION=$(python3 --version | awk '{print $2}')
echo -e "${GREEN}✅ Python ${PYTHON_VERSION} found${NC}"
# Check Git
if ! command -v git &> /dev/null; then
echo -e "${RED}❌ Git is not installed${NC}"
echo "Install Git from https://git-scm.com/"
exit 1
fi
echo -e "${GREEN}✅ Git found${NC}"
# Check if in git repo
if ! git rev-parse --git-dir > /dev/null 2>&1; then
echo -e "${YELLOW}⚠️ Not in a git repository${NC}"
echo "Make sure to run this from the Claude OS project directory"
else
echo -e "${GREEN}✅ In Claude OS git repository${NC}"
fi
echo ""
# Step 2: Create virtual environment
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 2: Setting Up Python Environment${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if [ ! -d "venv" ]; then
echo "Creating virtual environment..."
python3 -m venv venv
echo -e "${GREEN}✅ Virtual environment created${NC}"
else
echo -e "${YELLOW}⚠️ Virtual environment already exists${NC}"
fi
echo "Activating virtual environment..."
source venv/bin/activate
echo -e "${GREEN}✅ Virtual environment activated${NC}"
echo "Upgrading pip, setuptools, and wheel..."
pip install -q --upgrade pip setuptools wheel
echo -e "${GREEN}✅ Pip upgraded${NC}"
echo ""
# Step 3: Install Python dependencies
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 3: Installing Python Dependencies${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if [ -f "requirements.txt" ]; then
echo "Installing requirements from requirements.txt..."
pip install -q -r requirements.txt
echo -e "${GREEN}✅ Python dependencies installed${NC}"
else
echo -e "${RED}❌ requirements.txt not found${NC}"
exit 1
fi
echo ""
# Step 4: Check Ollama
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 4: Setting Up Ollama (LLM Engine)${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if ! command -v ollama &> /dev/null; then
echo -e "${YELLOW}⚠️ Ollama not found${NC}"
echo "Installing Ollama..."
if [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
if ! command -v brew &> /dev/null; then
echo -e "${RED}❌ Homebrew not found (required for macOS)${NC}"
echo "Install from https://brew.sh"
exit 1
fi
brew install ollama
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
else
echo -e "${RED}❌ Unsupported OS${NC}"
echo "Please install Ollama manually from https://ollama.ai"
exit 1
fi
fi
echo -e "${GREEN}✅ Ollama is available${NC}"
echo "Checking if Ollama is running..."
if curl -s http://localhost:11434/api/tags &> /dev/null; then
echo -e "${GREEN}✅ Ollama is running${NC}"
else
echo -e "${YELLOW}⚠️ Ollama is not running${NC}"
echo "Starting Ollama..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew services start ollama &> /dev/null || true
else
ollama serve &> /dev/null &
fi
echo "Waiting for Ollama to start..."
sleep 5
if ! curl -s http://localhost:11434/api/tags &> /dev/null; then
echo -e "${YELLOW}⚠️ Could not verify Ollama is running${NC}"
echo "You may need to start it manually"
else
echo -e "${GREEN}✅ Ollama started successfully${NC}"
fi
fi
echo "Ensuring required models are available..."
for model in llama3.1:latest nomic-embed-text:latest; do
if curl -s http://localhost:11434/api/tags | grep -q "\"name\":\"$model\""; then
echo -e "${GREEN}✅ Model $model is installed${NC}"
else
echo "Downloading model $model (this may take a few minutes)..."
ollama pull $model > /dev/null 2>&1 || true
echo -e "${GREEN}✅ Model $model downloaded${NC}"
fi
done
echo ""
# Step 5: Check Redis
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 5: Setting Up Redis (Cache & Queue System)${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if ! command -v redis-cli &> /dev/null; then
echo -e "${YELLOW}⚠️ Redis not found${NC}"
echo "Installing Redis..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew install redis
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
sudo apt-get install -y redis-server
else
echo -e "${RED}❌ Unsupported OS${NC}"
echo "Please install Redis manually from https://redis.io"
exit 1
fi
fi
echo -e "${GREEN}✅ Redis is available${NC}"
echo "Checking if Redis is running..."
if redis-cli ping &> /dev/null; then
echo -e "${GREEN}✅ Redis is running${NC}"
else
echo -e "${YELLOW}⚠️ Redis is not running${NC}"
echo "Starting Redis..."
if [[ "$OSTYPE" == "darwin"* ]]; then
brew services start redis > /dev/null 2>&1 || true
else
redis-server --daemonize yes > /dev/null 2>&1 || true
fi
sleep 2
if redis-cli ping &> /dev/null; then
echo -e "${GREEN}✅ Redis started successfully${NC}"
else
echo -e "${YELLOW}⚠️ Could not verify Redis is running${NC}"
echo "You may need to start it manually"
fi
fi
echo ""
# Step 6: Create directories
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 6: Creating Required Directories${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
mkdir -p data
mkdir -p logs
mkdir -p frontend
echo -e "${GREEN}✅ Directories created:${NC}"
echo " • data/ (SQLite database)"
echo " • logs/ (Service logs)"
echo " • frontend/ (React UI)"
echo ""
# Step 7: Install Node/npm if needed
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 7: Checking Frontend Dependencies${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if [ -f "frontend/package.json" ]; then
if ! command -v npm &> /dev/null; then
echo -e "${RED}❌ npm not found (required for frontend)${NC}"
echo "Install Node.js from https://nodejs.org/"
exit 1
fi
echo "Installing frontend dependencies..."
cd frontend
npm install -q
cd ..
echo -e "${GREEN}✅ Frontend dependencies installed${NC}"
else
echo -e "${YELLOW}⚠️ frontend/package.json not found${NC}"
fi
echo ""
# Step 8: Initialize database
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}Step 8: Initializing Database${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}\n"
if [ ! -f "data/claude-os.db" ]; then
echo "Creating SQLite database..."
python3 << 'EOF'
from app.core.sqlite_manager import get_sqlite_manager
db = get_sqlite_manager()
print("✅ Database initialized")
EOF
echo -e "${GREEN}✅ Database created${NC}"
else
echo -e "${GREEN}✅ Database already exists${NC}"
fi
echo ""
# Step 9: Summary and next steps
echo -e "${CYAN}"
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ ✨ Claude OS Setup Complete! ✨ ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo -e "${NC}\n"
echo -e "${GREEN}✅ All components are ready:${NC}"
echo " ✓ Python environment"
echo " ✓ Dependencies installed"
echo " ✓ Ollama (LLM engine)"
echo " ✓ Redis (cache & queues)"
echo " ✓ Database"
echo " ✓ Directories"
echo ""
echo -e "${BLUE}Next Steps:${NC}"
echo ""
echo "1. Start all services:"
echo -e " ${CYAN}./start_all_services.sh${NC}"
echo ""
echo "2. Access the services:"
echo -e " ${CYAN}Frontend: http://localhost:5173${NC}"
echo -e " ${CYAN}MCP API: http://localhost:8051${NC}"
echo -e " ${CYAN}API Docs: http://localhost:8051/docs${NC}"
echo ""
echo "3. Initialize your first project:"
echo -e " ${CYAN}Create a project in the UI, then run:${NC}"
echo -e " ${CYAN}/initialize-project [project-id]${NC}"
echo ""
echo "4. Register MCPs with Claude Code:"
echo -e " ${CYAN}claude mcp add --transport http [mcp-name] http://localhost:8051/mcp/kb/[KB-name]${NC}"
echo ""
echo -e "${YELLOW}💡 Tips:${NC}"
echo " • Run './start_all_services.sh' to start everything"
echo " • Run './stop_all_services.sh' to stop everything"
echo " • Run './restart_services.sh' to restart everything"
echo " • Check logs with: tail -f logs/mcp_server.log"
echo ""
echo -e "${CYAN}Documentation:${NC}"
echo " • WHAT_IS_CLAUDE_OS.md (learn what Claude OS does)"
echo " • CLAUDE_OS_DEVELOPER_GUIDE.md (detailed development guide)"
echo ""
echo -e "${GREEN}Ready to get started! 🚀${NC}\n"