/
Targy
/
OpenGEA
Обзор
Документация
Войти
/
Targy
/
OpenGEA
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
scripts/install.sh
136 строк
5 KB
kotler
OpenGEA: усечённый релиз для opensource
14 мар 2026, 19:23
14 мар 2026, 19:23
cae5e88
Код
Авторство
О чём код?
#!/usr/bin/env bash # Установка/переустановка зависимостей OpenGEA: бэкенд, фронтенд, агенты. # Запуск из корня репозитория: ./scripts/install.sh [--all|--backend|--frontend|--agents] set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" BACKEND="$REPO_ROOT/backend" FRONTEND="$REPO_ROOT/frontend" VENV="${GEA_VENV:-$REPO_ROOT/.venv}" [ -d "$BACKEND/.venv" ] && [ ! -d "$VENV" ] && VENV="$BACKEND/.venv" usage() { echo "Usage: $0 [--all|--backend|--frontend|--agents]" echo " --all install backend + frontend + agents (default)" echo " --backend only backend (Python venv + api deps)" echo " --frontend only frontend (npm ci)" echo " --agents only agents (pip install per agent)" exit 0 } install_backend() { echo "=== Backend ===" if [ ! -d "$VENV" ]; then echo "Creating venv at $VENV..." # OpenGEA стандартизирован на Python 3.12 (бэкенд и агенты) # Проверяем PATH и типичные пути Homebrew (python@3.12 не всегда в PATH) PY_CANDIDATES=( python3.12 python3.11 python3.10 python3 /opt/homebrew/opt/python@3.12/bin/python3.12 /opt/homebrew/opt/python@3.11/bin/python3.11 /usr/local/opt/python@3.12/bin/python3.12 /usr/local/opt/python@3.11/bin/python3.11 ) for py in "${PY_CANDIDATES[@]}"; do _py="" if [ -x "$py" ]; then _py="$py" elif command -v "$py" &>/dev/null; then _py="$(command -v "$py")" fi if [ -n "$_py" ] && "$_py" -c 'import sys; exit(0 if sys.version_info >= (3, 10) else 1)' 2>/dev/null; then "$_py" -m venv "$VENV" break fi done if [ ! -f "${VENV}/bin/python" ]; then echo "ERROR: OpenGEA requires Python 3.12 (recommended) or 3.10+." echo " Install: brew install python@3.12" echo " If already installed, add to PATH: export PATH=\"/opt/homebrew/opt/python@3.12/bin:\$PATH\"" exit 1 fi fi echo "Upgrading pip..." "${VENV}/bin/python" -m pip install --upgrade pip echo "Installing backend packages..." "${VENV}/bin/pip" install -r "$BACKEND/requirements.txt" echo "Backend OK" } install_frontend() { echo "=== Frontend ===" node_ok() { command -v node &>/dev/null && [ "$(node -p "parseInt(process.versions.node.split('.')[0])" 2>/dev/null)" -ge 18 ] 2>/dev/null } node_install_hint() { case "$(uname -s)" in Darwin) echo " brew install node@20 && export PATH=\"/opt/homebrew/opt/node@20/bin:\$PATH\"" ;; Linux) echo " nvm install 18 && nvm use 18 # or: https://nodejs.org" ;; *) echo " Install Node 18+ from https://nodejs.org" ;; esac } if ! node_ok; then if [ "$(uname -s)" = "Darwin" ] && command -v brew &>/dev/null; then echo "Node.js 18+ required (current: $(node -v 2>/dev/null || echo 'none')). Installing Node 20 via Homebrew..." brew install node@20 || true NODE20_PREFIX=$(brew --prefix node@20 2>/dev/null) if [ -n "$NODE20_PREFIX" ] && [ -d "$NODE20_PREFIX/bin" ]; then export PATH="$NODE20_PREFIX/bin:$PATH" fi fi if ! node_ok; then echo "ERROR: Frontend requires Node.js 18+ (Vite 7). Current: $(node -v 2>/dev/null || echo 'none')." node_install_hint echo " Then re-run: $0 ${TARGET:---all}" exit 1 fi echo "Using Node: $(node -v)" fi echo "Installing frontend packages (npm ci)..." if ! (cd "$FRONTEND" && npm ci --no-audit --no-fund); then echo "npm ci failed (e.g. lockfileVersion 3 requires npm 7+). Falling back to npm install..." (cd "$FRONTEND" && npm install --no-audit --no-fund) fi echo "Frontend OK" } install_agents() { echo "=== Agents ===" GEA_VENV="$VENV" "$SCRIPT_DIR/setup-agents.sh" --all # Принудительно пин на fastmcp 2.x (оркестратор и все агенты пока на 2) "${VENV}/bin/pip" install 'fastmcp>=2.0.0,<3.0.0' -q # langchain-gigachat при инициализации импортирует gigachat — ставим явно для questions-agent и tests-agent "${VENV}/bin/pip" install 'gigachat>=0.1.39' -q 2>/dev/null || true # Патч key_value при fastmcp 3.x (идемпотентно) if [ -f "$SCRIPT_DIR/fix_key_value_wrappers.py" ]; then GEA_VENV="$VENV" "${VENV}/bin/python" "$SCRIPT_DIR/fix_key_value_wrappers.py" 2>/dev/null || true fi echo "Agents OK" } # Проверка критичных зависимостей (оркестратор и др.) verify_deps() { echo "Checking critical deps..." if ! "${VENV}/bin/python" -c " import fastapi import uvicorn import greenlet import sqlalchemy print(' fastapi, uvicorn, greenlet, sqlalchemy OK') " 2>/dev/null; then echo "WARNING: Some deps missing. Run: ${VENV}/bin/pip install -r backend/agents/orchestrator/requirements.txt" return 1 fi return 0 } TARGET="${1:---all}" case "$TARGET" in --all) install_backend; install_frontend; install_agents; verify_deps ;; --backend) install_backend ;; --frontend) install_frontend ;; --agents) install_agents; verify_deps ;; -h|--help) usage ;; *) echo "Unknown option: $TARGET"; usage ;; esac echo "Done."