import { useState } from "react" import { useQuery, useQueryClient } from "@tanstack/react-query" import { ExternalLink } from "lucide-react" import { Button } from "@/components/ui/button" import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "@/components/ui/sheet" import { api, post } from "@/lib/api" import { melden } from "@/lib/meldungen" interface GeheimnisStand { hf_token_gesetzt: boolean hf_token_aus_env: boolean schreibbar: boolean } export function Einstellungen({ offen, onSchliessen }: { offen: boolean; onSchliessen: () => void }) { const qc = useQueryClient() const stand = useQuery({ queryKey: ["geheimnisse"], queryFn: () => api("/api/maintenance/geheimnisse"), enabled: offen, }) const [token, setToken] = useState("") async function speichern(wert: string | null) { try { await post("/api/maintenance/geheimnisse", { schluessel: "hf_token", wert }) melden("erfolg", wert ? "Hugging-Face-Zugang gespeichert." : "Hugging-Face-Zugang gelöscht.") setToken("") qc.invalidateQueries({ queryKey: ["geheimnisse"] }) } catch (f) { melden("fehler", (f as Error).message) } } const s = stand.data return ( !o && onSchliessen()}> Einstellungen Was die Box sich merkt.

Hugging-Face-Zugang

{s?.hf_token_gesetzt ? "Ist hinterlegt." : "Fehlt."} Nötig für gesperrte Modelle und schnellere Downloads. {s?.hf_token_aus_env ? " Er kommt aus der Dienst-Einstellung und lässt sich hier nicht löschen." : ""}

{ e.preventDefault() if (token.trim()) speichern(token.trim()) }} > setToken(e.target.value)} placeholder="hf_…" className="h-11 min-w-0 flex-1 rounded-lg border border-linie-stark bg-erhaben px-3 text-[15px] outline-none focus:border-cyan" />
{s?.hf_token_gesetzt && !s.hf_token_aus_env && ( )}

Hinweise

Dringende Hinweise gehen zusätzlich per Telegram raus, alles andere bleibt hier. Einfache Probleme wie einen abgestürzten Dienst behebt der Wächter selbst und schreibt es in den Verlauf.

Hermes

Hermes-Dashboard öffnen

Chat, Sitzungen und Cron-Jobs verwaltet Hermes selbst. Es fragt nach seiner eigenen Anmeldung.

) }