Paritosh Upadhyay
Sovereign Tiered Control (Two Buttons) & Stealth Hardening
2fd9130
#!/bin/bash
# ============================================================
# Project Jarvis β€” Start Script
# Cloud-First mode: Ollama is optional when OPENAI_API_KEY is set.
# ============================================================
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
BACKEND_DIR="$PROJECT_DIR/backend"
VENV_DIR="$BACKEND_DIR/venv"
PID_DIR="$PROJECT_DIR/.pids"
ENV_FILE="$PROJECT_DIR/.env"
export PATH="$PROJECT_DIR/bin:$PATH"
# Load env file if it exists
if [ -f "$ENV_FILE" ]; then
export $(grep -v '^#' "$ENV_FILE" | xargs)
fi
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
RED='\033[0;31m'
PURPLE='\033[0;35m'
NC='\033[0m'
mkdir -p "$PID_DIR"
echo ""
echo -e "${PURPLE}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${PURPLE}β•‘ PROJECT FRIDAY β€” Starting... β•‘${NC}"
echo -e "${PURPLE}β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•${NC}"
echo ""
# ── Step 1: Check API Key / Mode ─────────────────────────────
echo -e "${CYAN}[1/3] Checking AI backend mode...${NC}"
if [ -n "$OPENAI_API_KEY" ]; then
echo -e " ${GREEN}βœ“${NC} OpenAI API Key found β€” running in CLOUD mode πŸš€"
echo -e " ${GREEN}βœ“${NC} Ollama (local LLM) will NOT be started β€” saving your RAM!"
else
echo -e " ${YELLOW}⚠${NC} No OPENAI_API_KEY found β€” falling back to LOCAL mode (Ollama)"
if ! command -v ollama &>/dev/null; then
echo -e " ${RED}βœ— Ollama not installed. Run setup.sh first or add OPENAI_API_KEY to .env${NC}"
exit 1
fi
if ! pgrep -x "ollama" &>/dev/null; then
echo -e " ${YELLOW}Starting Ollama service...${NC}"
ollama serve &>/dev/null &
echo $! > "$PID_DIR/ollama.pid"
sleep 3
echo -e " ${GREEN}βœ“${NC} Ollama started"
else
echo -e " ${GREEN}βœ“${NC} Ollama already running"
fi
fi
# ── Step 2: Activate Virtual Environment ─────────────────────
echo ""
echo -e "${CYAN}[2/3] Activating Python environment...${NC}"
if [ ! -d "$VENV_DIR" ]; then
echo -e " ${RED}βœ— Virtual environment not found. Run setup.sh first.${NC}"
exit 1
fi
source "$VENV_DIR/bin/activate"
echo -e " ${GREEN}βœ“${NC} Virtual environment activated"
# ── Step 3: Start FastAPI Backend ────────────────────────────
echo ""
echo -e "${CYAN}[3/3] Starting Friday backend...${NC}"
# Kill any existing instance
if [ -f "$PID_DIR/backend.pid" ]; then
OLD_PID=$(cat "$PID_DIR/backend.pid")
if kill -0 "$OLD_PID" 2>/dev/null; then
echo -e " ${YELLOW}Stopping existing backend (PID: $OLD_PID)...${NC}"
kill "$OLD_PID" 2>/dev/null
sleep 1
fi
fi
# Start the backend
cd "$BACKEND_DIR"
"$VENV_DIR/bin/python" -m uvicorn main:app --host 0.0.0.0 --port 7777 --log-level info &
BACKEND_PID=$!
echo "$BACKEND_PID" > "$PID_DIR/backend.pid"
# Wait for it to be ready
echo -e " ${YELLOW}Waiting for backend to initialize...${NC}"
for i in {1..30}; do
if curl -s http://localhost:7777/health/ping &>/dev/null; then
break
fi
sleep 1
done
if curl -s http://localhost:7777/health/ping &>/dev/null; then
echo -e " ${GREEN}βœ“${NC} Backend started (PID: $BACKEND_PID)"
else
echo -e " ${YELLOW}⚠${NC} Backend is starting (may need a moment)"
fi
# ── Done ─────────────────────────────────────────────────────
echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}β•‘ F.R.I.D.A.Y. IS RUNNING! πŸš€ β•‘${NC}"
echo -e "${GREEN}β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•${NC}"
echo ""
echo -e " ${CYAN}Neural HUD:${NC} Launching locally..."
echo -e " ${CYAN}Dashboard:${NC} http://localhost:7777"
echo ""
# Launch the Sovereign HUD (The Local App)
echo -e "${YELLOW}Starting visual interface...${NC}"
"$VENV_DIR/bin/python" "$PROJECT_DIR/app/friday_gui.py" &
GUI_PID=$!
echo "$GUI_PID" > "$PID_DIR/gui.pid"
echo -e " ${GREEN}βœ“${NC} FRIDAY Sovereign HUD initialized."
echo -e " ${YELLOW}To stop:${NC} bash $SCRIPT_DIR/stop.sh"
echo ""
# Follow the backend logs in the background, but keep terminal open for GUI exit
wait $BACKEND_PID