175 lines
4.6 KiB
Bash
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
|