Files
crumbmissions/missions/tools/terminal_dojo/02_opencode_setup.sh
Branko May Trinkwald 984202f2ba toooooltime 3
2026-01-06 21:25:02 +01:00

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 ""