#!/bin/bash # X-Agents 一键启动脚本 # 启动 Web、Go 后端、Python Agent 三个服务 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 项目根目录 PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)" cd "$PROJECT_ROOT" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} X-Agents 一键启动${NC}" echo -e "${GREEN}========================================${NC}" # 检查命令是否存在 check_command() { if ! command -v $1 &> /dev/null; then echo -e "${RED}错误: $1 未安装${NC}" exit 1 fi } # 检查必要命令 check_command node check_command go check_command python3 # 启动 Go 后端 start_go_backend() { echo -e "${YELLOW}[1/3] 启动 Go 后端服务...${NC}" cd "$PROJECT_ROOT/../server/cmd/api" go run main.go & GO_PID=$! echo -e "${GREEN}Go 后端已启动 (PID: $GO_PID)${NC}" sleep 2 } # 启动 Python Agent start_python_agent() { echo -e "${YELLOW}[2/3] 启动 Python Agent 服务...${NC}" cd "$PROJECT_ROOT/core/agents" if [ -d "venv" ]; then source venv/bin/activate fi python main.py & PYTHON_PID=$! echo -e "${GREEN}Python Agent 已启动 (PID: $PYTHON_PID)${NC}" sleep 2 } # 启动 Web 前端 start_web_frontend() { echo -e "${YELLOW}[3/3] 启动 Web 前端...${NC}" cd "$PROJECT_ROOT/../web" npm run dev & WEB_PID=$! echo -e "${GREEN}Web 前端已启动 (PID: $WEB_PID)${NC}" sleep 3 } # 打印访问地址 print_info() { echo -e "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 所有服务已启动!${NC}" echo -e "${GREEN}========================================${NC}" echo -e " Web 前端: ${GREEN}http://localhost:5173${NC}" echo -e " Go 后端: ${GREEN}http://localhost:8080${NC}" echo -e " Python: ${GREEN}http://localhost:8001${NC}" echo -e "" echo -e "按 ${RED}Ctrl+C${NC} 停止所有服务" echo -e "" } # 清理函数 cleanup() { echo -e "\n${YELLOW}正在停止所有服务...${NC}" if [ ! -z "$GO_PID" ]; then kill $GO_PID 2>/dev/null || true; fi if [ ! -z "$PYTHON_PID" ]; then kill $PYTHON_PID 2>/dev/null || true; fi if [ ! -z "$WEB_PID" ]; then kill $WEB_PID 2>/dev/null || true; fi echo -e "${GREEN}所有服务已停止${NC}" exit 0 } # 捕获 Ctrl+C trap cleanup SIGINT # 启动服务 start_go_backend start_python_agent start_web_frontend # 打印信息 print_info # 等待 wait