269 lines
12 KiB
Bash
Executable File
269 lines
12 KiB
Bash
Executable File
#!/bin/bash
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
# 🥋 Terminal Dojo - Phase 2: OpenCode Setup
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
# Teil der Crumbmissions - https://github.com/kruemel/crumbmissions
|
|
# Lizenz: MIT + CKL (Children's Knowledge License)
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
|
|
set -e
|
|
|
|
# Farben
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m'
|
|
|
|
echo ""
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BOLD} 🥋 TERMINAL DOJO - Phase 2: OpenCode Setup${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Check if already installed
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
if command -v opencode &> /dev/null; then
|
|
CURRENT_VERSION=$(opencode --version 2>/dev/null | head -n1 || echo "unknown")
|
|
echo -e "${GREEN}✓ OpenCode ist bereits installiert: $CURRENT_VERSION${NC}"
|
|
echo ""
|
|
read -p "Möchtest du auf die neueste Version aktualisieren? [j/N] " -n 1 -r
|
|
echo ""
|
|
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
|
|
echo -e "${CYAN}→ Weiter mit Phase 3: ./03_ollama_setup.sh${NC}"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Load System Info
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
if [ -f /tmp/terminal_dojo_sysinfo.json ]; then
|
|
OS=$(jq -r '.os' /tmp/terminal_dojo_sysinfo.json)
|
|
ARCH=$(jq -r '.arch' /tmp/terminal_dojo_sysinfo.json)
|
|
PACKAGE_MANAGER=$(jq -r '.package_manager' /tmp/terminal_dojo_sysinfo.json)
|
|
else
|
|
echo -e "${YELLOW}⚠️ System-Info nicht gefunden. Bitte erst ./01_vorcheck.sh ausführen.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${BOLD}System: $OS / $ARCH${NC}"
|
|
echo ""
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Installation Methods
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
echo -e "${BOLD}📦 Installationsmethode wählen:${NC}"
|
|
echo ""
|
|
echo " 1) Auto-Install (empfohlen)"
|
|
echo " curl -fsSL https://opencode.ai/install | bash"
|
|
echo ""
|
|
echo " 2) npm global"
|
|
echo " npm install -g opencode-ai"
|
|
echo ""
|
|
echo " 3) Homebrew (nur macOS)"
|
|
echo " brew install opencode"
|
|
echo ""
|
|
echo " 4) Manual Download"
|
|
echo " https://github.com/sst/opencode/releases"
|
|
echo ""
|
|
echo " 0) Überspringen"
|
|
echo ""
|
|
|
|
read -p "Wähle [1-4, 0 zum Überspringen]: " -n 1 -r INSTALL_METHOD
|
|
echo ""
|
|
echo ""
|
|
|
|
case $INSTALL_METHOD in
|
|
1)
|
|
echo -e "${CYAN}🔧 Auto-Installation...${NC}"
|
|
echo ""
|
|
curl -fsSL https://opencode.ai/install | bash
|
|
;;
|
|
2)
|
|
echo -e "${CYAN}🔧 npm Installation...${NC}"
|
|
echo ""
|
|
if ! command -v npm &> /dev/null; then
|
|
echo -e "${RED}❌ npm nicht gefunden!${NC}"
|
|
echo -e " Installiere Node.js: $PACKAGE_MANAGER install nodejs"
|
|
exit 1
|
|
fi
|
|
npm install -g opencode-ai
|
|
;;
|
|
3)
|
|
if [[ "$OS" != "macos" ]]; then
|
|
echo -e "${RED}❌ Homebrew ist nur auf macOS verfügbar${NC}"
|
|
exit 1
|
|
fi
|
|
echo -e "${CYAN}🔧 Homebrew Installation...${NC}"
|
|
echo ""
|
|
brew install opencode
|
|
;;
|
|
4)
|
|
echo -e "${CYAN}Manual Download:${NC}"
|
|
echo " https://github.com/sst/opencode/releases"
|
|
echo ""
|
|
echo "Lade die passende Version für $OS/$ARCH herunter"
|
|
echo "und füge sie zu deinem PATH hinzu."
|
|
exit 0
|
|
;;
|
|
0)
|
|
echo -e "${YELLOW}Installation übersprungen.${NC}"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Ungültige Auswahl${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Verify Installation
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# Reload PATH
|
|
export PATH="$HOME/.local/bin:$HOME/.npm-global/bin:$PATH"
|
|
|
|
if command -v opencode &> /dev/null; then
|
|
VERSION=$(opencode --version 2>/dev/null | head -n1 || echo "installed")
|
|
echo -e "${GREEN}✓ OpenCode erfolgreich installiert: $VERSION${NC}"
|
|
else
|
|
echo -e "${RED}❌ OpenCode Installation fehlgeschlagen${NC}"
|
|
echo ""
|
|
echo "Versuche manuell:"
|
|
echo " curl -fsSL https://opencode.ai/install | bash"
|
|
echo ""
|
|
echo "Oder check die Dokumentation:"
|
|
echo " https://opencode.ai/docs"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Initial Configuration
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
echo -e "${BOLD}⚙️ Basis-Konfiguration${NC}"
|
|
echo -e "${CYAN}───────────────────────────────────────────────────────────────${NC}"
|
|
echo ""
|
|
|
|
OPENCODE_CONFIG_DIR="$HOME/.config/opencode"
|
|
mkdir -p "$OPENCODE_CONFIG_DIR"
|
|
|
|
echo -e "OpenCode kann verschiedene AI-Provider nutzen:"
|
|
echo ""
|
|
echo " 1) OpenRouter (empfohlen für Crumbforest)"
|
|
echo " → Viele Modelle, ein API-Key"
|
|
echo " → Unterstützt Claude, GPT-4, Gemini, Mistral..."
|
|
echo ""
|
|
echo " 2) Ollama (lokal, offline)"
|
|
echo " → Wird in Phase 3 konfiguriert"
|
|
echo " → Braucht keinen API-Key"
|
|
echo ""
|
|
echo " 3) Anthropic Claude direkt"
|
|
echo " → Wenn du einen Claude API-Key hast"
|
|
echo ""
|
|
echo " 4) Später konfigurieren"
|
|
echo ""
|
|
|
|
read -p "Welchen Provider möchtest du einrichten? [1-4]: " -n 1 -r PROVIDER_CHOICE
|
|
echo ""
|
|
echo ""
|
|
|
|
case $PROVIDER_CHOICE in
|
|
1)
|
|
echo -e "${CYAN}OpenRouter Setup:${NC}"
|
|
echo ""
|
|
echo "Hol dir einen API-Key von: https://openrouter.ai/keys"
|
|
echo "(Falls du schon einen für Crumbforest hast, nutze den!)"
|
|
echo ""
|
|
read -p "OpenRouter API-Key: " -r OPENROUTER_KEY
|
|
|
|
if [[ -n "$OPENROUTER_KEY" ]]; then
|
|
# Test the key
|
|
echo ""
|
|
echo -e "${CYAN}Teste API-Key...${NC}"
|
|
|
|
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
-H "Authorization: Bearer $OPENROUTER_KEY" \
|
|
"https://openrouter.ai/api/v1/models" 2>/dev/null || echo "000")
|
|
|
|
if [[ "$RESPONSE" == "200" ]]; then
|
|
echo -e "${GREEN}✓ API-Key funktioniert!${NC}"
|
|
|
|
# Save to environment
|
|
echo ""
|
|
echo "Speichere Key in ~/.bashrc..."
|
|
|
|
# Remove old entry if exists
|
|
sed -i.bak '/OPENROUTER_API_KEY/d' ~/.bashrc 2>/dev/null || true
|
|
|
|
echo "export OPENROUTER_API_KEY=\"$OPENROUTER_KEY\"" >> ~/.bashrc
|
|
export OPENROUTER_API_KEY="$OPENROUTER_KEY"
|
|
|
|
echo -e "${GREEN}✓ Gespeichert!${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ API-Key konnte nicht verifiziert werden (HTTP $RESPONSE)${NC}"
|
|
echo " Key wird trotzdem gespeichert - du kannst ihn später korrigieren."
|
|
fi
|
|
fi
|
|
;;
|
|
2)
|
|
echo -e "${CYAN}Ollama wird in Phase 3 eingerichtet.${NC}"
|
|
echo "Weiter mit: ./03_ollama_setup.sh"
|
|
;;
|
|
3)
|
|
echo -e "${CYAN}Anthropic Setup:${NC}"
|
|
echo ""
|
|
echo "Hol dir einen API-Key von: https://console.anthropic.com"
|
|
echo ""
|
|
read -p "Anthropic API-Key: " -r ANTHROPIC_KEY
|
|
|
|
if [[ -n "$ANTHROPIC_KEY" ]]; then
|
|
sed -i.bak '/ANTHROPIC_API_KEY/d' ~/.bashrc 2>/dev/null || true
|
|
echo "export ANTHROPIC_API_KEY=\"$ANTHROPIC_KEY\"" >> ~/.bashrc
|
|
export ANTHROPIC_API_KEY="$ANTHROPIC_KEY"
|
|
echo -e "${GREEN}✓ Gespeichert!${NC}"
|
|
fi
|
|
;;
|
|
4)
|
|
echo -e "${YELLOW}Provider-Setup übersprungen.${NC}"
|
|
echo "Du kannst später 'opencode auth login' ausführen."
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
# Summary
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo -e "${BOLD}✅ Phase 2 abgeschlossen!${NC}"
|
|
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
echo -e "${GREEN}OpenCode ist bereit!${NC}"
|
|
echo ""
|
|
echo "Schnellstart:"
|
|
echo -e " ${CYAN}opencode${NC} # TUI starten"
|
|
echo -e " ${CYAN}opencode \"Erkläre...\"${NC} # Direkte Frage"
|
|
echo ""
|
|
echo -e "${BOLD}Nächste Schritte:${NC}"
|
|
echo -e " 3. ${CYAN}./03_ollama_setup.sh${NC} - Lokale Modelle (optional)"
|
|
echo -e " 4. ${CYAN}./04_agents_setup.sh${NC} - Waldwächter konfigurieren"
|
|
echo ""
|
|
|
|
echo -e "${BLUE}🔧 Deepbit sagt:${NC}"
|
|
echo -e " \"OpenCode ist wie ein Schweizer Taschenmesser"
|
|
echo -e " für die Kommandozeile. Mächtig, aber braucht Übung!\""
|
|
echo ""
|