#!/bin/zsh # 神射手 本地版启动脚本 - 纯 shell,无 Python/tkinter 依赖 PROJECT="/Users/karuo/Documents/开发/2、私域银行/神射手" export PATH="/opt/homebrew/bin:/usr/local/bin:${HOME}/.volta/bin:${PATH}" [ -d "${HOME}/.fnm/current/bin" ] && export PATH="${HOME}/.fnm/current/bin:${PATH}" notify() { osascript -e "display notification \"$1\" with title \"神射手\"" 2>/dev/null; } open_url() { open "$1" 2>/dev/null || true; } cd "$PROJECT" || { notify "项目路径不存在"; exit 1; } # 1. Ollama notify "检查本地大模型..." if ! curl -s --connect-timeout 2 "http://localhost:11434/api/tags" >/dev/null 2>&1; then notify "正在启动 Ollama..." open -a Ollama 2>/dev/null || true for i in {1..45}; do curl -s --connect-timeout 2 "http://localhost:11434/api/tags" >/dev/null 2>&1 && break sleep 1 done fi notify "Ollama 就绪" # 2. Docker notify "检查 Docker..." open -a Docker 2>/dev/null || true for i in {1..60}; do docker info >/dev/null 2>&1 && break sleep 2 done notify "Docker 就绪" # 3. MongoDB notify "启动 MongoDB..." docker start datacenter_mongodb 2>/dev/null || true sleep 3 notify "MongoDB 就绪" # 4. 若 3117 已监听,直接打开 if lsof -i :3117 -sTCP:LISTEN >/dev/null 2>&1; then notify "服务已在运行,打开浏览器" open_url "http://localhost:3117" exit 0 fi # 5. 启动 pnpm dev(后台) notify "启动神射手开发服务..." if command -v pnpm >/dev/null 2>&1; then pnpm dev & else npm run dev & fi PID=$! trap "kill $PID 2>/dev/null; exit" EXIT INT TERM # 6. 等待 3117 for i in {1..90}; do lsof -i :3117 -sTCP:LISTEN >/dev/null 2>&1 && break sleep 1 done # 7. 打开浏览器 notify "神射手已启动" open_url "http://localhost:3117" echo "神射手已启动: http://localhost:3117" echo "关闭此窗口将停止服务" echo "" # 8. 保持运行 wait $PID