Files
OpenQode/OpenQode.sh

175 lines
4.6 KiB
Bash

#!/bin/bash
# OpenQode v1.01 - Unified Launcher for macOS/Linux
# ===================================================
set -e
cd "$(dirname "$0")"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
echo ""
echo -e "${CYAN}========================================"
echo " OpenQode v1.01 - AI Coding Assistant"
echo -e "========================================${NC}"
echo ""
# Check Node.js
if ! command -v node &> /dev/null; then
echo -e "${RED}ERROR: Node.js is not installed!${NC}"
echo "Please run the install script first:"
echo " macOS: ./install-macos.sh"
echo " Linux: ./install-linux.sh"
exit 1
fi
echo -e "${GREEN}[OK]${NC} Node.js $(node --version) detected"
# Install dependencies if needed
if [ ! -d "node_modules" ]; then
echo -e "${YELLOW}[INFO]${NC} First run - Installing dependencies..."
npm install --legacy-peer-deps 2>/dev/null || npm install
fi
if [ ! -d "bin/goose-ultra-final/node_modules" ]; then
echo -e "${YELLOW}[INFO]${NC} Installing Goose Ultra dependencies..."
pushd bin/goose-ultra-final > /dev/null
npm install --legacy-peer-deps 2>/dev/null || npm install
popd > /dev/null
fi
echo -e "${GREEN}[OK]${NC} Dependencies ready"
show_menu() {
clear
echo ""
echo -e "${CYAN}========================================"
echo " OPENQODE v1.01 - LAUNCH MENU"
echo -e "========================================${NC}"
echo ""
echo " RECOMMENDED:"
echo " [1] *** GOOSE ULTRA *** (Full IDE Experience)"
echo " [2] GOOSE ULTRA DEV (Live Reload Mode)"
echo ""
echo " TERMINAL INTERFACES:"
echo " [3] Next-Gen TUI (Gen 5 - Ink)"
echo " [4] TUI Classic (Gen 4 - Node.js)"
echo ""
echo " TOOLS:"
echo " [5] Qwen Authentication (Login/Refresh)"
echo " [8] Smart Repair (Fix TUI crashes)"
echo " [9] Check Updates"
echo ""
echo " [0] Exit"
echo ""
}
launch_goose() {
echo ""
echo -e "${CYAN}========================================${NC}"
echo " GOOSE ULTRA - Production Mode"
echo -e "${CYAN}========================================${NC}"
echo ""
echo "Building Goose Ultra..."
pushd bin/goose-ultra-final > /dev/null
if ! npm run build; then
echo -e "${YELLOW}[WARNING]${NC} Build failed, attempting recovery..."
npm install --legacy-peer-deps
npm run build
fi
echo ""
echo "Starting Goose Ultra..."
npx electron . &
popd > /dev/null
echo ""
echo -e "${GREEN}Goose Ultra launched!${NC} Check for the window."
sleep 2
}
launch_goose_dev() {
echo ""
echo -e "${CYAN}========================================${NC}"
echo " GOOSE ULTRA DEV MODE"
echo -e "${CYAN}========================================${NC}"
echo ""
pushd bin/goose-ultra-final > /dev/null
npm run dev &
sleep 5
GOOSE_DEV=true npx electron . &
popd > /dev/null
echo ""
echo -e "${GREEN}Dev mode started!${NC} Edits will hot-reload."
sleep 2
}
launch_ink_tui() {
echo ""
echo "Starting Next-Gen TUI (Gen 5)..."
node bin/auth-check.mjs --quiet 2>/dev/null || true
node --experimental-require-module bin/opencode-ink.mjs
read -p "Press Enter to continue..."
}
launch_classic_tui() {
echo ""
echo "Starting TUI Classic (Gen 4)..."
node bin/opencode-tui.cjs
read -p "Press Enter to continue..."
}
qwen_auth() {
echo ""
echo -e "${CYAN}========================================${NC}"
echo " QWEN AUTHENTICATION"
echo -e "${CYAN}========================================${NC}"
echo ""
echo "Starting Qwen authentication flow..."
echo ""
node bin/auth.js
read -p "Press Enter to continue..."
}
smart_repair() {
echo ""
echo "Running Smart Repair..."
node bin/smart-repair.mjs
read -p "Press Enter to continue..."
}
check_updates() {
echo ""
echo "Checking for updates..."
if git pull 2>/dev/null; then
echo -e "${GREEN}[OK]${NC} Repository updated! Please restart the launcher."
else
echo -e "${YELLOW}[INFO]${NC} Git not available or not a git repository."
fi
read -p "Press Enter to continue..."
}
# Main loop
while true; do
show_menu
read -p "Enter choice (0-9): " choice
case $choice in
1) launch_goose ;;
2) launch_goose_dev ;;
3) launch_ink_tui ;;
4) launch_classic_tui ;;
5) qwen_auth ;;
8) smart_repair ;;
9) check_updates ;;
0) echo ""; echo "Goodbye!"; exit 0 ;;
*) echo "Invalid choice."; sleep 1 ;;
esac
done