#!/bin/bash # SenSu 无头启动脚本 (Linux/macOS/Termux) # 自动检测依赖完整性后启动 set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" # ── Python 路径: 优先 venv ── if [ -f "$SCRIPT_DIR/.venv/bin/python3" ]; then PYTHON="$SCRIPT_DIR/.venv/bin/python3" elif [ -f "$SCRIPT_DIR/.venv/bin/python" ]; then PYTHON="$SCRIPT_DIR/.venv/bin/python" elif command -v python3 &>/dev/null; then PYTHON="python3" else PYTHON="python" fi # ── 颜色 ── RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'; NC='\033[0m' pass=0; fail=0 check() { if command -v "$1" &>/dev/null || "$PYTHON" -c "$2" 2>/dev/null; then echo -e " ${GREEN}✓${NC} $3" pass=$((pass+1)) else echo -e " ${RED}✗${NC} $3 ${YELLOW}(缺失)${NC}" fail=$((fail+1)) fi } echo "🐱 SenSu 依赖检测..." echo "" # ── 系统依赖 ── check "" "" "Python 3.11+" "$PYTHON" -c "import sys; assert sys.version_info >= (3,11)" 2>/dev/null || { echo -e " ${YELLOW}⚠ Python 版本过低,需要 3.11+${NC}" fail=$((fail+1)) } # ── Python 核心依赖 ── check "" "import aiohttp" "aiohttp (Web 服务)" check "" "import yaml" "PyYAML (配置文件)" check "" "import textual" "Textual (TUI)" check "" "import watchdog" "watchdog (热重载)" check "" "import psutil" "psutil (系统监控)" check "" "import rich" "rich (终端美化)" check "" "import websockets" "websockets (WebSocket)" # ── 配置文件 ── if [ -f "config/framework/base_config.yaml" ]; then echo -e " ${GREEN}✓${NC} base_config.yaml" pass=$((pass+1)) elif [ -f "config/framework/base_config.yaml.example" ]; then cp config/framework/base_config.yaml.example config/framework/base_config.yaml echo -e " ${GREEN}✓${NC} 从模板创建 base_config.yaml" pass=$((pass+1)) else echo -e " ${RED}✗${NC} 配置文件缺失 (无模板可用)" fail=$((fail+1)) fi echo "" if [ "$fail" -gt 0 ]; then echo -e "${YELLOW}⚠ $fail 项缺失,自动安装...${NC}" "$PYTHON" -m pip install -r requirements.txt if [ $? -ne 0 ]; then echo -e "${RED}❌ 安装失败,请手动执行: python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt${NC}" exit 1 fi echo -e "${GREEN}✅ 依赖安装完成${NC}" fi echo -e "${GREEN}✅ 所有依赖就绪 ($pass 项)${NC}" echo "" echo "🚀 启动 SenSu (无头模式)..." echo " Web 面板: http://0.0.0.0:4200/SenSu" echo "" "$PYTHON" main.py --headless