1
0
shell/scripts/setup.sh
2025-06-01 23:35:22 +09:00

148 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# ai.shell setup script for macOS
# Sets up Python venv environment in ~/.config/ai-shell
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Directories
CONFIG_DIR="$HOME/.config/ai-shell"
VENV_DIR="$CONFIG_DIR/venv"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo -e "${BLUE}🚀 Setting up ai.shell environment...${NC}"
# Create config directory
echo -e "${YELLOW}📁 Creating config directory...${NC}"
mkdir -p "$CONFIG_DIR"
# Check Python version
echo -e "${YELLOW}🐍 Checking Python version...${NC}"
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ Python 3 is not installed. Please install Python 3.9 or later.${NC}"
exit 1
fi
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
echo -e "${GREEN}✓ Found Python $PYTHON_VERSION${NC}"
# Create virtual environment
if [ ! -d "$VENV_DIR" ]; then
echo -e "${YELLOW}🔧 Creating virtual environment...${NC}"
python3 -m venv "$VENV_DIR"
echo -e "${GREEN}✓ Virtual environment created${NC}"
else
echo -e "${GREEN}✓ Virtual environment already exists${NC}"
fi
# Activate virtual environment
echo -e "${YELLOW}🔌 Activating virtual environment...${NC}"
source "$VENV_DIR/bin/activate"
# Upgrade pip
echo -e "${YELLOW}📦 Upgrading pip...${NC}"
pip install --upgrade pip
# Install Python dependencies
echo -e "${YELLOW}📦 Installing Python dependencies...${NC}"
pip install -r "$PROJECT_DIR/requirements.txt"
# Copy MCP server to config directory
echo -e "${YELLOW}📄 Copying MCP server...${NC}"
cp "$PROJECT_DIR/mcp_server.py" "$CONFIG_DIR/"
# Create config file if it doesn't exist
if [ ! -f "$CONFIG_DIR/config.toml" ]; then
echo -e "${YELLOW}⚙️ Creating default config...${NC}"
cp "$PROJECT_DIR/config/default.toml" "$CONFIG_DIR/config.toml"
fi
# Create bin directory for scripts
mkdir -p "$CONFIG_DIR/bin"
# Create MCP server startup script
cat > "$CONFIG_DIR/bin/mcp-server" << 'EOF'
#!/bin/bash
# MCP Server startup script
CONFIG_DIR="$HOME/.config/ai-shell"
VENV_DIR="$CONFIG_DIR/venv"
# Activate virtual environment
source "$VENV_DIR/bin/activate"
# Start MCP server
cd "$CONFIG_DIR"
python mcp_server.py "$@"
EOF
chmod +x "$CONFIG_DIR/bin/mcp-server"
# Create ai-shell wrapper script
cat > "$CONFIG_DIR/bin/ai-shell" << EOF
#!/bin/bash
# ai-shell wrapper script
CONFIG_DIR="\$HOME/.config/ai-shell"
PROJECT_DIR="$PROJECT_DIR"
# Check if MCP server is running
if ! curl -s http://localhost:8765/health > /dev/null 2>&1; then
echo "Starting MCP server..."
"\$CONFIG_DIR/bin/mcp-server" > /dev/null 2>&1 &
# Wait for server to start
for i in {1..10}; do
if curl -s http://localhost:8765/health > /dev/null 2>&1; then
break
fi
sleep 0.5
done
fi
# Run ai-shell CLI
cd "\$PROJECT_DIR"
cargo run --release -- "\$@"
EOF
chmod +x "$CONFIG_DIR/bin/ai-shell"
# Check if Ollama is installed
echo -e "${YELLOW}🦙 Checking Ollama...${NC}"
if ! command -v ollama &> /dev/null; then
echo -e "${YELLOW}⚠️ Ollama is not installed.${NC}"
echo -e " Please install Ollama from: https://ollama.ai"
echo -e " Then run: ollama pull qwen2.5-coder:7b"
else
echo -e "${GREEN}✓ Ollama is installed${NC}"
# Check if model is available
if ! ollama list | grep -q "qwen2.5-coder:7b"; then
echo -e "${YELLOW}📥 Pulling qwen2.5-coder:7b model...${NC}"
echo -e " This may take a while..."
ollama pull qwen2.5-coder:7b
else
echo -e "${GREEN}✓ Model qwen2.5-coder:7b is available${NC}"
fi
fi
# Build Rust project
echo -e "${YELLOW}🔨 Building Rust CLI...${NC}"
cd "$PROJECT_DIR"
cargo build --release
echo -e "\n${GREEN}✨ Setup complete!${NC}"
echo -e "\n${BLUE}To use ai.shell:${NC}"
echo -e "1. Add to your PATH: ${YELLOW}export PATH=\"\$HOME/.config/ai-shell/bin:\$PATH\"${NC}"
echo -e "2. Run: ${YELLOW}ai-shell${NC}"
echo -e "\nOr use the full path: ${YELLOW}~/.config/ai-shell/bin/ai-shell${NC}"
# Deactivate virtual environment
deactivate