| # ============================================================ | |
| # Project Jarvis β Stop Script | |
| # Stops all Jarvis services. | |
| # ============================================================ | |
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | |
| PROJECT_DIR="$(dirname "$SCRIPT_DIR")" | |
| PID_DIR="$PROJECT_DIR/.pids" | |
| # Colors | |
| GREEN='\033[0;32m' | |
| YELLOW='\033[1;33m' | |
| CYAN='\033[0;36m' | |
| RED='\033[0;31m' | |
| NC='\033[0m' | |
| echo "" | |
| echo -e "${CYAN}Stopping Jarvis services...${NC}" | |
| echo "" | |
| # Stop backend | |
| if [ -f "$PID_DIR/backend.pid" ]; then | |
| PID=$(cat "$PID_DIR/backend.pid") | |
| if kill -0 "$PID" 2>/dev/null; then | |
| kill "$PID" 2>/dev/null | |
| echo -e " ${GREEN}β${NC} Backend stopped (PID: $PID)" | |
| else | |
| echo -e " ${YELLOW}β${NC} Backend was not running" | |
| fi | |
| rm -f "$PID_DIR/backend.pid" | |
| else | |
| # Try to find and kill by port | |
| PID=$(lsof -ti:7777 2>/dev/null) | |
| if [ -n "$PID" ]; then | |
| kill $PID 2>/dev/null | |
| echo -e " ${GREEN}β${NC} Backend stopped (PID: $PID)" | |
| else | |
| echo -e " ${YELLOW}β${NC} Backend was not running" | |
| fi | |
| fi | |
| # Stop GUI (HUD) | |
| if [ -f "$PID_DIR/gui.pid" ]; then | |
| PID=$(cat "$PID_DIR/gui.pid") | |
| if kill -0 "$PID" 2>/dev/null; then | |
| kill "$PID" 2>/dev/null | |
| echo -e " ${GREEN}β${NC} Sovereign HUD stopped (PID: $PID)" | |
| fi | |
| rm -f "$PID_DIR/gui.pid" | |
| else | |
| pkill -f "friday_gui.py" 2>/dev/null | |
| echo -e " ${GREEN}β${NC} Sovereign HUD cleared" | |
| fi | |
| # Definitive Cleanup | |
| pkill -f "main:app" 2>/dev/null | |
| pkill -f "uvicorn" 2>/dev/null | |
| echo "" | |
| echo -e "${GREEN}F.R.I.D.A.Y. is now Offline.${NC}" | |
| echo "" | |
| # Note: We don't stop Ollama as it might be used by other apps | |
| echo -e " ${YELLOW}βΉ${NC} Ollama left running (shared service)" | |
| echo "" | |
| echo -e "${GREEN}Jarvis stopped.${NC}" | |
| echo "" | |