Feat: Add manual updates check, Settings tab, direct model upgrades, logs password redirection, fix engine version detection, and expand AI agent Guide tab
This commit is contained in:
+449
-223
@@ -1,9 +1,10 @@
|
||||
import { useState, useEffect } from "react"
|
||||
import { BookOpen, Layers, Brain, Terminal, Code, RefreshCw, Cpu, Star } from "lucide-react"
|
||||
import { BookOpen, Layers, Brain, Terminal, Code, RefreshCw, Cpu, Star, Compass, Wrench, Shield, ArrowRight } from "lucide-react"
|
||||
import { api, type Health } from "@/lib/api"
|
||||
import { cn } from "@/lib/utils"
|
||||
|
||||
export function GuideView() {
|
||||
const [mainTab, setMainTab] = useState<"connect" | "concepts">("connect")
|
||||
const [activeTab, setActiveTab] = useState<"roocode" | "cursor" | "opencode">("roocode")
|
||||
const [health, setHealth] = useState<Health | null>(null)
|
||||
|
||||
@@ -42,267 +43,492 @@ export function GuideView() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Connection HUD Panel */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4">
|
||||
<div className="flex items-center gap-3">
|
||||
<span className={cn(
|
||||
"h-3 w-3 rounded-full ring-2 ring-black/40",
|
||||
testResult === "success" && "bg-emerald-500 animate-pulse",
|
||||
testResult === "partial" && "bg-amber-500",
|
||||
testResult === "fail" && "bg-red-500",
|
||||
!testResult && "bg-muted"
|
||||
)} />
|
||||
<div>
|
||||
<div className="text-xs font-bold uppercase tracking-wider text-foreground">Lokaler Verbindungs-Check</div>
|
||||
<div className="text-[10px] text-muted-foreground mt-0.5 font-mono">
|
||||
{testResult === "success" && `Erfolgreich! Dein PC hat Zugriff auf das Box-Gateway (v${health?.version || ""}).`}
|
||||
{testResult === "partial" && "Gateway erreichbar, aber die llama-cpp-Engine ist offline."}
|
||||
{testResult === "fail" && "Verbindung fehlgeschlagen. Ist die Box im selben LAN-Netzwerk?"}
|
||||
{!testResult && "Verbindung wird geprüft..."}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button
|
||||
onClick={checkConnection}
|
||||
disabled={testing}
|
||||
className="h-8 px-3 flex items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50 cursor-pointer self-start sm:self-auto shrink-0"
|
||||
{/* Main Mode Tabs */}
|
||||
<div className="flex gap-4 border-b border-border/40 pb-px">
|
||||
<button
|
||||
onClick={() => setMainTab("connect")}
|
||||
className={cn(
|
||||
"pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",
|
||||
mainTab === "connect"
|
||||
? "border-primary text-primary"
|
||||
: "border-transparent text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
<RefreshCw className={cn("h-3.5 w-3.5", testing && "animate-spin")} />
|
||||
<span>Testen</span>
|
||||
Editor-Anbindung
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setMainTab("concepts")}
|
||||
className={cn(
|
||||
"pb-3 text-xs font-bold uppercase tracking-wider border-b-2 px-1 transition-all",
|
||||
mainTab === "concepts"
|
||||
? "border-primary text-primary"
|
||||
: "border-transparent text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
KI-Wissensdatenbank (Juni 2026)
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Conceptual Explanation Grid */}
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center gap-2 px-1">
|
||||
<BookOpen className="h-4.5 w-4.5 text-primary" />
|
||||
<h2 className="text-xs font-bold uppercase tracking-wider text-foreground">Wie funktioniert mein Stack?</h2>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-4 sm:grid-cols-3">
|
||||
{/* Card 1: Dashboard */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Cpu className="h-4 w-4 text-cyan-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">1. Die Zentrale</h3>
|
||||
{mainTab === "connect" ? (
|
||||
<>
|
||||
{/* Connection HUD Panel */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex flex-col sm:flex-row justify-between sm:items-center gap-4">
|
||||
<div className="flex items-center gap-3">
|
||||
<span className={cn(
|
||||
"h-3 w-3 rounded-full ring-2 ring-black/40",
|
||||
testResult === "success" && "bg-emerald-500 animate-pulse",
|
||||
testResult === "partial" && "bg-amber-500",
|
||||
testResult === "fail" && "bg-red-500",
|
||||
!testResult && "bg-muted"
|
||||
)} />
|
||||
<div>
|
||||
<div className="text-xs font-bold uppercase tracking-wider text-foreground">Lokaler Verbindungs-Check</div>
|
||||
<div className="text-[10px] text-muted-foreground mt-0.5 font-mono">
|
||||
{testResult === "success" && `Erfolgreich! Dein PC hat Zugriff auf das Box-Gateway (v${health?.version || ""}).`}
|
||||
{testResult === "partial" && "Gateway erreichbar, aber die llama-cpp-Engine ist offline."}
|
||||
{testResult === "fail" && "Verbindung fehlgeschlagen. Ist die Box im selben LAN-Netzwerk?"}
|
||||
{!testResult && "Verbindung wird geprüft..."}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Dein Dashboard. Hier siehst du die CPU-/RAM- und GPU-Last der Box und siehst sofort, ob Updates anstehen.
|
||||
</p>
|
||||
|
||||
<button
|
||||
onClick={checkConnection}
|
||||
disabled={testing}
|
||||
className="h-8 px-3 flex items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50 cursor-pointer self-start sm:self-auto shrink-0"
|
||||
>
|
||||
<RefreshCw className={cn("h-3.5 w-3.5", testing && "animate-spin")} />
|
||||
<span>Testen</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Card 2: Llama Swap */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Layers className="h-4 w-4 text-violet-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">2. Modell-Zentrale</h3>
|
||||
{/* Conceptual Explanation Grid */}
|
||||
<div className="space-y-3">
|
||||
<div className="flex items-center gap-2 px-1">
|
||||
<BookOpen className="h-4.5 w-4.5 text-primary" />
|
||||
<h2 className="text-xs font-bold uppercase tracking-wider text-foreground">Wie funktioniert mein Stack?</h2>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Deine GGUF-Datenbank. Gesteuert von <strong>llama-swap</strong>. Lädt dein schnelles Alltags-Hirn (`fast`) oder dein schweres Logik-Hirn (`heavy`) vollautomatisch im VRAM.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Card 3: Memory */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Brain className="h-4 w-4 text-indigo-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">3. Das Gedächtnis</h3>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Dein geteiltes Langzeitgedächtnis (Memory-Pool). Hier merkt sich dein Agent Regeln, Projekt-Details und Vorlieben.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Editor Integration Guides */}
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center gap-2 px-1">
|
||||
<Code className="h-4.5 w-4.5 text-primary" />
|
||||
<h2 className="text-xs font-bold uppercase tracking-wider text-foreground">Vibe Coding auf dem PC einrichten</h2>
|
||||
</div>
|
||||
|
||||
{/* Editor Selector Tabs */}
|
||||
<div className="flex gap-1.5 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit">
|
||||
<button
|
||||
onClick={() => setActiveTab("roocode")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer flex items-center gap-1.5",
|
||||
activeTab === "roocode"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
<Star className="h-3.5 w-3.5 fill-amber-400/20" />
|
||||
Roo Code (VS Code)
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("cursor")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",
|
||||
activeTab === "cursor"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
Cursor IDE
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("opencode")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",
|
||||
activeTab === "opencode"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
OpenCode Desktop
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Guide Content */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10">
|
||||
{activeTab === "roocode" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">Roo Code Kopplung (Empfohlene Open-Source-Erweiterung)</h3>
|
||||
<p>Roo Code ist die beliebteste und flexibelste Vibe-Coding-Erweiterung für VS Code im Jahr 2026. Sie ermöglicht vollen Zugriff auf das Terminal und das MCP-Gedächtnis.</p>
|
||||
<div className="grid gap-4 sm:grid-cols-3">
|
||||
{/* Card 1: Dashboard */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Cpu className="h-4 w-4 text-cyan-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">1. Die Zentrale</h3>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Dein Dashboard. Hier siehst du die CPU-/RAM- und GPU-Last der Box und siehst sofort, ob Updates anstehen.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
Roo Code installieren
|
||||
</div>
|
||||
<p className="pl-6">Suche in VS Code nach der Erweiterung <strong>Roo Code</strong> und installiere sie.</p>
|
||||
{/* Card 2: Llama Swap */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Layers className="h-4 w-4 text-violet-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">2. Modell-Zentrale</h3>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Deine GGUF-Datenbank. Gesteuert von <strong>llama-swap</strong>. Lädt dein schnelles Alltags-Hirn (`fast`) oder dein schweres Logik-Hirn (`heavy`) vollautomatisch im VRAM.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
API-Anbindung konfigurieren
|
||||
{/* Card 3: Memory */}
|
||||
<div className="p-4 rounded-xl border border-border/60 bg-card/20 space-y-2">
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Brain className="h-4 w-4 text-indigo-400" />
|
||||
<h3 className="text-xs font-bold text-foreground">3. Das Gedächtnis</h3>
|
||||
</div>
|
||||
<p className="text-[11px] text-muted-foreground leading-relaxed">
|
||||
Dein geteiltes Langzeitgedächtnis (Memory-Pool). Hier merkt sich dein Agent Regeln, Projekt-Details und Vorlieben.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Editor Integration Guides */}
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center gap-2 px-1">
|
||||
<Code className="h-4.5 w-4.5 text-primary" />
|
||||
<h2 className="text-xs font-bold uppercase tracking-wider text-foreground">Vibe Coding auf dem PC einrichten</h2>
|
||||
</div>
|
||||
|
||||
{/* Editor Selector Tabs */}
|
||||
<div className="flex gap-1.5 bg-card/20 p-1 border border-border/40 rounded-xl max-w-fit">
|
||||
<button
|
||||
onClick={() => setActiveTab("roocode")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer flex items-center gap-1.5",
|
||||
activeTab === "roocode"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
<Star className="h-3.5 w-3.5 fill-amber-400/20" />
|
||||
Roo Code (VS Code)
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("cursor")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",
|
||||
activeTab === "cursor"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
Cursor IDE
|
||||
</button>
|
||||
<button
|
||||
onClick={() => setActiveTab("opencode")}
|
||||
className={cn(
|
||||
"rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",
|
||||
activeTab === "opencode"
|
||||
? "bg-primary text-primary-foreground shadow-md shadow-primary/10"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
)}
|
||||
>
|
||||
OpenCode Desktop
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Guide Content */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-6 space-y-4 shadow-lg shadow-black/10">
|
||||
{activeTab === "roocode" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">Roo Code Kopplung (Empfohlene Open-Source-Erweiterung)</h3>
|
||||
<p>Roo Code ist die beliebteste und flexibelste Vibe-Coding-Erweiterung für VS Code im Jahr 2026. Sie ermöglicht vollen Zugriff auf das Terminal und das MCP-Gedächtnis.</p>
|
||||
</div>
|
||||
<p className="pl-6">Klicke auf das Roo-Code-Symbol in der Sidebar, öffne die Einstellungen (Zahnrad) und stelle folgendes ein:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">API Provider:</span> OpenAI Compatible</div>
|
||||
<div><span className="text-muted-foreground/60">Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">API Key:</span> <span className="italic text-muted-foreground/50">beliebig (z.B. "local")</span></div>
|
||||
<div><span className="text-muted-foreground/60">Model ID:</span> auto</div>
|
||||
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
Roo Code installieren
|
||||
</div>
|
||||
<p className="pl-6">Suche in VS Code nach der Erweiterung <strong>Roo Code</strong> und installiere sie.</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
API-Anbindung konfigurieren
|
||||
</div>
|
||||
<p className="pl-6">Klicke auf das Roo-Code-Symbol in der Sidebar, öffne die Einstellungen (Zahnrad) und stelle folgendes ein:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">API Provider:</span> OpenAI Compatible</div>
|
||||
<div><span className="text-muted-foreground/60">Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">API Key:</span> <span className="italic text-muted-foreground/50">beliebig (z.B. "local")</span></div>
|
||||
<div><span className="text-muted-foreground/60">Model ID:</span> auto</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
MCP Gedächtnis verknüpfen (Optional, aber empfohlen)
|
||||
</div>
|
||||
<p className="pl-6">Damit Roo Code auf deinen <strong>Gedächtnis-Pool</strong> zugreifen kann, kopiere die MCP-Konfiguration aus dem Reiter <strong>Verbinden</strong> und füge sie in deine lokale Roo-Code-Konfigurationsdatei ein.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
MCP Gedächtnis verknüpfen (Optional, aber empfohlen)
|
||||
{activeTab === "cursor" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">Cursor IDE Kopplung (Proprietäre All-in-One IDE)</h3>
|
||||
<p>Cursor ist ein polierter, extrem schneller VS-Code-Fork mit hervorragenden, tief integrierten Autovervollständigungen (Tab-Completions).</p>
|
||||
</div>
|
||||
<p className="pl-6">Damit Roo Code auf deinen <strong>Gedächtnis-Pool</strong> zugreifen kann, kopiere die MCP-Konfiguration aus dem Reiter <strong>Verbinden</strong> und füge sie in deine lokale Roo-Code-Konfigurationsdatei ein.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{activeTab === "cursor" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">Cursor IDE Kopplung (Proprietäre All-in-One IDE)</h3>
|
||||
<p>Cursor ist ein polierter, extrem schneller VS-Code-Fork mit hervorragenden, tief integrierten Autovervollständigungen (Tab-Completions).</p>
|
||||
</div>
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
Einstellungen öffnen
|
||||
</div>
|
||||
<p className="pl-6">Öffne Cursor, klicke oben rechts auf das Zahnrad (Settings) und navigiere zu <strong>Models</strong>.</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
Einstellungen öffnen
|
||||
</div>
|
||||
<p className="pl-6">Öffne Cursor, klicke oben rechts auf das Zahnrad (Settings) und navigiere zu <strong>Models</strong>.</p>
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
OpenAI API überschreiben
|
||||
</div>
|
||||
<p className="pl-6">Deaktiviere die Standard-Cloudmodelle, klappe den Bereich <strong>OpenAI API</strong> auf und konfiguriere:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">Override Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">API Key:</span> <span className="italic text-muted-foreground/50">beliebig (z.B. "local")</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
OpenAI API überschreiben
|
||||
</div>
|
||||
<p className="pl-6">Deaktiviere die Standard-Cloudmodelle, klappe den Bereich <strong>OpenAI API</strong> auf und konfiguriere:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">Override Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">API Key:</span> <span className="italic text-muted-foreground/50">beliebig (z.B. "local")</span></div>
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
Modell hinzufügen
|
||||
</div>
|
||||
<p className="pl-6">Trage in der Modell-Liste ein neues Modell mit dem Namen <strong>auto</strong> ein und wähle es als aktives Modell aus. Cursor leitet ab jetzt alle deine Anfragen an die Box weiter.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
Modell hinzufügen
|
||||
{activeTab === "opencode" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">OpenCode Desktop Kopplung (Open-Source Vibe-Coding-App)</h3>
|
||||
<p>OpenCode ist eine standalone Desktop-App für ein ablenkungsfreies Coden über natürliche Sprache. Es trennt den KI-Prozess von deinem Editor.</p>
|
||||
</div>
|
||||
<p className="pl-6">Trage in der Modell-Liste ein neues Modell mit dem Namen <strong>auto</strong> ein und wähle es als aktives Modell aus. Cursor leitet ab jetzt alle deine Anfragen an die Box weiter.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{activeTab === "opencode" && (
|
||||
<div className="space-y-4 text-xs leading-relaxed text-muted-foreground">
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-sm font-bold text-foreground">OpenCode Desktop Kopplung (Open-Source Vibe-Coding-App)</h3>
|
||||
<p>OpenCode ist eine standalone Desktop-App für ein ablenkungsfreies Coden über natürliche Sprache. Es trennt den KI-Prozess von deinem Editor.</p>
|
||||
</div>
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
OpenCode Desktop herunterladen
|
||||
</div>
|
||||
<p className="pl-6">Lade die Desktop-Anwendung von der offiziellen Website (opencode.ai) herunter und starte sie.</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3.5 border-t border-border/20 pt-4">
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">1</span>
|
||||
OpenCode Desktop herunterladen
|
||||
</div>
|
||||
<p className="pl-6">Lade die Desktop-Anwendung von der offiziellen Website (opencode.ai) herunter und starte sie.</p>
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
Endpunkt auf Box-Gateway setzen
|
||||
</div>
|
||||
<p className="pl-6">Gehe in den Bereich Einstellungen ➔ Provider, deaktiviere die Cloud-Voreinstellungen und trage deinen lokalen Server ein:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">Model:</span> auto</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">2</span>
|
||||
Endpunkt auf Box-Gateway setzen
|
||||
</div>
|
||||
<p className="pl-6">Gehe in den Bereich Einstellungen ➔ Provider, deaktiviere die Cloud-Voreinstellungen und trage deinen lokalen Server ein:</p>
|
||||
<div className="pl-6 pt-1">
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] space-y-1 text-foreground">
|
||||
<div><span className="text-muted-foreground/60">Base URL:</span> http://{currentHost}:9001/v1</div>
|
||||
<div><span className="text-muted-foreground/60">Model:</span> auto</div>
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
Erster Vibe-Coding Test
|
||||
</div>
|
||||
<p className="pl-6">Starte eine neue Session und teste die Verbindung mit einem einfachen Prompt, z. B. *"Erstelle ein einfaches Skript, das die Fibonaccizahlen berechnet"*. Das Box-Gateway tauscht das Modell im Hintergrund vollautomatisch aus.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="space-y-1">
|
||||
<div className="font-semibold text-foreground flex items-center gap-1.5">
|
||||
<span className="h-4.5 w-4.5 rounded-full bg-primary/20 text-primary flex items-center justify-center font-mono text-[10px]">3</span>
|
||||
Erster Vibe-Coding Test
|
||||
</div>
|
||||
<p className="pl-6">Starte eine neue Session und teste die Verbindung mit einem einfachen Prompt, z. B. *"Erstelle ein einfaches Skript, das die Fibonaccizahlen berechnet"*. Das Box-Gateway tauscht das Modell im Hintergrund vollautomatisch aus.</p>
|
||||
{/* Diagnostic Tips Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 space-y-3 shadow-lg shadow-black/10">
|
||||
<div className="flex items-center gap-2">
|
||||
<Terminal className="h-4.5 w-4.5 text-primary" />
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">Was tun, wenn das Coden hakt?</h3>
|
||||
</div>
|
||||
|
||||
<ul className="text-[11px] text-muted-foreground space-y-2 list-disc pl-4 leading-relaxed">
|
||||
<li><strong>Keine Verbindung?</strong> Überprüfe im Live-Verbindungsprüfer oben, ob die Box-IP erreichbar ist. Stelle sicher, dass dein lokaler PC im selben WLAN/LAN-Netzwerk wie die Box eingeloggt ist.</li>
|
||||
<li><strong>Modell antwortet nicht?</strong> Schaue unter <strong>Diagnose</strong>, ob der Dienst `llama-swap` aktiv (grün) is. Wenn nicht, klicke daneben auf <strong>Restart</strong>.</li>
|
||||
<li><strong>Hermes Agent reagiert merkwürdig?</strong> Starte in der Hermes WebUI einfach eine frische Session (neuen Chat). Ältere Chats sammeln Kontext-Müll an.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
/* KI-Wissensdatenbank Concepts Tab */
|
||||
<div className="space-y-6">
|
||||
{/* Introduction */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 shadow-lg shadow-black/10 flex items-start gap-4">
|
||||
<Compass className="h-8 w-8 text-primary shrink-0 mt-0.5" />
|
||||
<div className="space-y-1">
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">Entwickler-Guide: Modernes Agentic Coding (2026)</h3>
|
||||
<p className="text-xs text-muted-foreground leading-normal">
|
||||
Willkommen im Wissenszentrum für dein Mission Control 2 Setup. Hier erfährst du, wie die verschiedenen Technologien (MoE, MCP, Skills, Hermes) zusammenarbeiten und wie du das Maximum aus deinen AI-Prozessabläufen herausholst.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Concepts Grid */}
|
||||
<div className="grid gap-6 md:grid-cols-2">
|
||||
|
||||
{/* MoE Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Layers className="h-5 w-5 text-cyan-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">1. Mixture of Experts (MoE)</h3>
|
||||
<span className="text-[9px] text-cyan-400 font-mono">Effizienz durch Spezialisierung</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-muted-foreground space-y-2 leading-normal">
|
||||
<p>
|
||||
<strong>Was ist das?</strong> Bei traditionellen LLMs wird für jedes Wort das gesamte neuronale Netz aktiviert. Bei MoE besteht das Modell aus mehreren spezialisierten Teilnetzwerken (den <em>Experts</em>). Ein intelligenter <em>Router</em> entscheidet pro Token (Wortteil), welche Experten zur Berechnung herangezogen werden.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Warum in MC2?</strong> So können extrem leistungsstarke Modelle (wie DeepSeek-V3, Mixtral oder Command R+) mit wesentlich geringeren Hardwarekosten ausgeführt werden. Es wird nur ein Bruchteil der Parameter geladen und aktiv berechnet, was Speicherplatz spart und die Inferenz beschleunigt.
|
||||
</p>
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] text-foreground">
|
||||
<span className="text-cyan-400">Vorteil:</span> GPT-4-Klasse Performance bei einem Bruchteil der aktiven VRAM-Last auf deinem Homelab!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Diagnostic Tips Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 backdrop-blur-md p-5 space-y-3 shadow-lg shadow-black/10">
|
||||
<div className="flex items-center gap-2">
|
||||
<Terminal className="h-4.5 w-4.5 text-primary" />
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">Was tun, wenn das Coden hakt?</h3>
|
||||
{/* MCP Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Compass className="h-5 w-5 text-violet-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">2. Model Context Protocol (MCP)</h3>
|
||||
<span className="text-[9px] text-violet-400 font-mono">Standardisierte Agenten-Tools</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-muted-foreground space-y-2 leading-normal">
|
||||
<p>
|
||||
<strong>Was ist das?</strong> MCP ist ein offenes Protokoll (initiiert von Anthropic), das festlegt, wie ein KI-Client (z.B. Roo Code auf deinem PC) mit externen Datenquellen und Tools kommuniziert. Es funktioniert wie ein USB-Standard für KI.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Warum in MC2?</strong> MCP trennt den AI-Kern von der Umgebung. Statt für jeden Editor eigene Tools zu schreiben, binden deine Agenten (Roo Code, Hermes) einfach MCP-Server an. Diese Server können Dateien lesen, Websuchen durchführen, Git bedienen oder mit deiner App interagieren.
|
||||
</p>
|
||||
<div className="p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[10px] text-foreground">
|
||||
<span className="text-violet-400">Prinzip:</span> Agent ➔ MCP Gateway ➔ Lokale Tools (Dateien, Terminal, Web)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Skills Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Brain className="h-5 w-5 text-emerald-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">3. Agent Skills</h3>
|
||||
<span className="text-[9px] text-emerald-400 font-mono">Modulbasierte Fähigkeiten</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-muted-foreground space-y-2 leading-normal">
|
||||
<p>
|
||||
<strong>Was ist das?</strong> Ein Skill ist ein Verzeichnis mit standardisierten Anweisungen, Scripten und Beispielen, das deine Agenten für spezifische Aufgaben trainiert (z.B. Test-Driven Development, Code-Vereinfachung, API-Design).
|
||||
</p>
|
||||
<p>
|
||||
<strong>Wie benutzt man sie?</strong> Lege einen Skill-Ordner unter <code>.agents/skills/<name></code> in deinem Projekt an. Das Herzstück ist die Datei <code>SKILL.md</code> mit folgendem Aufbau:
|
||||
</p>
|
||||
<pre className="p-2.5 bg-background/25 rounded-lg border border-border/30 font-mono text-[9px] text-foreground overflow-x-auto whitespace-pre">
|
||||
{`---
|
||||
name: tdd-pro
|
||||
description: Drive development with strict TDD practices
|
||||
---
|
||||
# Instructions
|
||||
...`}
|
||||
</pre>
|
||||
<p>
|
||||
Der Agent scannt diese Ordner automatisch und erweitert seine Systembefehle bei passenden Workflows. Gute Quellen sind dein lokales Mission Control Repository oder GitHub.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Hermes Card */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Cpu className="h-5 w-5 text-indigo-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">4. Arbeiten mit Hermes</h3>
|
||||
<span className="text-[9px] text-indigo-400 font-mono">Autonomer Box-Agent</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-muted-foreground space-y-2 leading-normal">
|
||||
<p>
|
||||
<strong>Was ist das?</strong> Hermes ist der auf der Box installierte, autonome Hintergrund-Agent. Er verwaltet das Dateisystem und kann über REST (Port 8642) oder eine interaktive ChatUI (Port 8787) gesteuert werden.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Best Practices für Hermes:</strong>
|
||||
</p>
|
||||
<ul className="list-disc pl-4 space-y-1">
|
||||
<li><strong>Chat-Kontext sauber halten:</strong> Starte regelmäßig neue Chats. Zu große Historien verlangsamen den Agenten und führen zu Halluzinationen.</li>
|
||||
<li><strong>Gehirn festlegen:</strong> Konfiguriere im Gateway die Modell-Rolle <code>brain</code> für Hermes, damit er automatisch das passende Modell per Llama Swap lädt.</li>
|
||||
<li><strong>Sandbox umgehen:</strong> Erweitere Hermes' System-Prompt (WebUI-Einstellungen), um Befehle über SSH an deinen Windows-PC zu leiten.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Tools Best Practices */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Wrench className="h-5 w-5 text-amber-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">5. Richtiges Arbeiten mit Tools (Dateien, Terminal, DevTools)</h3>
|
||||
<span className="text-[9px] text-amber-400 font-mono">Fehler vermeiden & Kosten senken</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid md:grid-cols-3 gap-4 text-xs text-muted-foreground leading-normal">
|
||||
<div className="space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30">
|
||||
<h4 className="font-bold text-foreground flex items-center gap-1">
|
||||
<Terminal className="h-3.5 w-3.5 text-primary" /> Terminal
|
||||
</h4>
|
||||
<p className="text-[11px]">
|
||||
Verwende nur non-interaktive Befehle. Hänge bei langen Tasks (wie dev-Servern) ein <code>&</code> an oder nutze die integrierte Job-Verwaltung. Verwende niemals interaktive Eingabeaufforderungen.
|
||||
</p>
|
||||
</div>
|
||||
<div className="space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30">
|
||||
<h4 className="font-bold text-foreground flex items-center gap-1">
|
||||
<Code className="h-3.5 w-3.5 text-cyan-400" /> Dateimanager
|
||||
</h4>
|
||||
<p className="text-[11px]">
|
||||
Überschreibe keine ganzen Dateien, wenn du nur eine Zeile ändern willst. Verwende gezielte Ersetzungs-Tools (wie <code>replace_file_content</code>). Das spart massiv Token-Kosten und beugt Fehlern vor.
|
||||
</p>
|
||||
</div>
|
||||
<div className="space-y-1.5 p-3 bg-background/10 rounded-xl border border-border/30">
|
||||
<h4 className="font-bold text-foreground flex items-center gap-1">
|
||||
<Wrench className="h-3.5 w-3.5 text-violet-400" /> Browser DevTools
|
||||
</h4>
|
||||
<p className="text-[11px]">
|
||||
Koppele deine Debug-Dienste mit dem Chrome-DevTools-Plugin. So kann der Agent Fehler in der Konsole live analysieren und das DOM verifizieren, anstatt blind zu raten.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Autonomie Erklärung */}
|
||||
<div className="rounded-2xl border border-border/60 bg-card/45 p-6 shadow-lg shadow-black/10 space-y-4 md:col-span-2">
|
||||
<div className="flex items-center gap-2 border-b border-border/20 pb-3">
|
||||
<Shield className="h-5 w-5 text-emerald-400" />
|
||||
<div>
|
||||
<h3 className="text-xs font-bold uppercase tracking-wider text-foreground">Wie autonom ist Mission Control 2 wirklich?</h3>
|
||||
<span className="text-[9px] text-emerald-400 font-mono">Die Grenze zwischen Automatisierung und Kontrolle</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="text-xs text-muted-foreground space-y-3 leading-normal">
|
||||
<p>
|
||||
Mission Control 2 ist als <strong>semi-autonomes Gateway</strong> konzipiert. Es besitzt die Fähigkeit, komplexe Workflows komplett selbstständig durchzuführen, unterliegt jedoch strikten Sicherheitsplanken:
|
||||
</p>
|
||||
<div className="grid sm:grid-cols-2 gap-4 pt-1">
|
||||
<div className="space-y-1.5">
|
||||
<h4 className="font-bold text-foreground flex items-center gap-1 text-[11px]">
|
||||
<ArrowRight className="h-3 w-3 text-emerald-400" /> Was läuft vollautomatisch?
|
||||
</h4>
|
||||
<ul className="list-disc pl-4 space-y-1 text-[11px]">
|
||||
<li>Modellaustausch (Routing) per llama-swap je nach Anfragetyp (z.B. Code vs. Reasoning).</li>
|
||||
<li>Hintergrund-Synchronisation und Speicherung von Gedächtniseinträgen (Memory).</li>
|
||||
<li>Modell-Installation und API-Key-Injektionen in Gateway-Verbindungen.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="space-y-1.5">
|
||||
<h4 className="font-bold text-foreground flex items-center gap-1 text-[11px]">
|
||||
<ArrowRight className="h-3 w-3 text-amber-400" /> Wo ist menschliche Freigabe nötig?
|
||||
</h4>
|
||||
<ul className="list-disc pl-4 space-y-1 text-[11px]">
|
||||
<li><strong>Systembefehle:</strong> Das Ausführen von Terminal-Kommandos auf deinem PC erfordert standardmäßig deine Bestätigung.</li>
|
||||
<li><strong>Kritische Systemeingriffe:</strong> OS-Updates, Engine-Rebuilds und Host-Reboots müssen manuell über das Dashboard ausgelöst werden.</li>
|
||||
<li><strong>Gedächtnis-Löschung:</strong> Permanentes Verwerfen von gesammelten Memorys wird von dir freigegeben.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p className="text-[11px] bg-background/25 p-3 rounded-xl border border-border/30 mt-2">
|
||||
<strong>Fazit:</strong> Der Stack erledigt die Kärrnerarbeit (Modelle tauschen, API-Adapter bereitstellen, Sandbox-Verbindungen herstellen) komplett im Hintergrund. Er agiert als dein persönlicher, treuer Copilot, ohne jemals ungefragt schädliche Operationen auf deinem Hauptsystem auszuführen.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul className="text-[11px] text-muted-foreground space-y-2 list-disc pl-4 leading-relaxed">
|
||||
<li><strong>Keine Verbindung?</strong> Überprüfe im Live-Verbindungsprüfer oben, ob die Box-IP erreichbar ist. Stelle sicher, dass dein lokaler PC im selben WLAN/LAN-Netzwerk wie die Box eingeloggt ist.</li>
|
||||
<li><strong>Modell antwortet nicht?</strong> Schaue unter <strong>Diagnose</strong>, ob der Dienst `llama-swap` aktiv (grün) ist. Wenn nicht, klicke daneben auf <strong>Restart</strong>.</li>
|
||||
<li><strong>Hermes Agent reagiert merkwürdig?</strong> Starte in der Hermes WebUI einfach eine frische Session (neuen Chat). Ältere Chats sammeln Kontext-Müll an.</li>
|
||||
</ul>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user