Files
deep_research/scripts/setup.sh
T
2026-04-21 12:31:58 +08:00

148 lines
5.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# Deep Research - Environment setup (macOS + Debian/Ubuntu, using uv)
# Usage: bash scripts/setup.sh
set -euo pipefail
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
CYAN='\033[0;36m'
RST='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${PROJECT_ROOT}"
echo -e "${CYAN}============================================${RST}"
echo -e "${CYAN} Deep Research - Setup (uv)${RST}"
echo -e "${CYAN} Project root: ${PROJECT_ROOT}${RST}"
echo -e "${CYAN}============================================${RST}"
# -------- OS detection --------
OS="unknown"
case "$(uname -s)" in
Darwin) OS="macos" ;;
Linux)
if [[ -f /etc/debian_version ]]; then
OS="debian"
elif [[ -f /etc/redhat-release ]]; then
OS="rhel"
else
OS="linux"
fi
;;
esac
echo -e "${YELLOW}Detected OS: ${OS}${RST}"
# -------- [1/4] uv check / install --------
echo ""
echo -e "${CYAN}[1/4] Checking uv...${RST}"
if ! command -v uv >/dev/null 2>&1; then
echo -e " ${YELLOW}uv not found. Installing...${RST}"
echo -e " ${YELLOW}(uv = fast Python package manager written in Rust, by Astral)${RST}"
echo ""
read -r -p " Auto-install uv? [Y/n] " REPLY
echo ""
if [[ ! ${REPLY} =~ ^[Nn]$ ]]; then
curl -LsSf https://astral.sh/uv/install.sh | sh
# bring uv into current PATH
[[ -f "${HOME}/.local/bin/uv" ]] && export PATH="${HOME}/.local/bin:${PATH}"
if ! command -v uv >/dev/null 2>&1; then
echo -e " ${RED}ERROR: uv still not found after install.${RST}"
echo " Add ~/.local/bin to PATH, then re-run:"
echo " export PATH=\"\${HOME}/.local/bin:\${PATH}\""
exit 1
fi
else
echo -e " ${RED}Manual install:${RST}"
echo " macOS: brew install uv"
echo " all: curl -LsSf https://astral.sh/uv/install.sh | sh"
echo " pip: pip install --user uv"
exit 1
fi
fi
UV_VER="$(uv --version 2>&1 | head -1)"
echo -e " ${GREEN}OK: ${UV_VER}${RST}"
# -------- [2/4] Python info --------
echo ""
echo -e "${CYAN}[2/4] Python check...${RST}"
if command -v python3 >/dev/null 2>&1; then
SYS_PY="$(python3 --version 2>&1)"
echo -e " ${GREEN}System: ${SYS_PY} (uv manages its own Python 3.10+ automatically)${RST}"
else
echo -e " ${YELLOW}python3 not found in PATH (uv will download Python automatically)${RST}"
fi
# -------- [3/4] uv sync --------
echo ""
echo -e "${CYAN}[3/4] Syncing Python dependencies (uv sync)...${RST}"
echo -e " ${YELLOW}First run may take a moment to download Python + packages.${RST}"
uv sync
echo -e " ${GREEN}OK: .venv/ ready${RST}"
# -------- [4/4] System binaries --------
echo ""
echo -e "${CYAN}[4/4] Checking system binaries...${RST}"
check_bin() {
local name="${1}"
local install_macos="${2}"
local install_debian="${3}"
if command -v "${name}" >/dev/null 2>&1; then
local ver
ver="$("${name}" --version 2>&1 | head -1)"
echo -e " ${GREEN}OK: ${name} - ${ver}${RST}"
else
echo -e " ${YELLOW}MISSING: ${name}${RST}"
case "${OS}" in
macos) echo " Install: ${install_macos}" ;;
debian) echo " Install: ${install_debian}" ;;
*) echo " Install ${name} for your OS" ;;
esac
fi
}
check_bin "pandoc" "brew install pandoc" "sudo apt install pandoc"
check_bin "opencode" "curl -fsSL https://opencode.ai/install | bash" "curl -fsSL https://opencode.ai/install | bash"
check_bin "curl" "pre-installed" "sudo apt install curl"
# -------- Summary --------
echo ""
echo -e "${CYAN}============================================${RST}"
echo -e "${CYAN} Setup complete${RST}"
echo -e "${CYAN}============================================${RST}"
echo ""
if [[ -f secrets.env ]]; then
echo -e "${GREEN}OK: secrets.env found${RST}"
else
echo -e "${YELLOW}TODO: create secrets.env${RST}"
echo " cp secrets.env.example secrets.env"
echo " # fill in ZENMUX_API_KEY etc."
fi
FONT_COUNT="$(find .opencode/templates/fonts -maxdepth 1 \( -name "*.otf" -o -name "*.ttf" \) 2>/dev/null | wc -l | tr -d ' ')"
if [[ "${FONT_COUNT}" -ge 7 ]]; then
echo -e "${GREEN}OK: fonts ready (${FONT_COUNT} files)${RST}"
else
echo -e "${YELLOW}TODO: download fonts (${FONT_COUNT}/7 present)${RST}"
echo " bash .opencode/templates/fonts/download-fonts.sh"
fi
echo ""
echo "Next steps:"
echo " 1. source scripts/activate.sh"
echo " 2. bash .opencode/templates/fonts/download-fonts.sh"
echo " 3. bash scripts/verify-zenmux.sh"
echo " 4. opencode"
echo ""
echo "Tips:"
echo " Run a script directly: uv run python .opencode/templates/report-template.py ..."
echo " Add a package: uv add <package>"
echo " Upgrade all: uv lock --upgrade && uv sync"
echo " Full rebuild: rm -rf .venv && bash scripts/setup.sh"