hermes-erkenntnisse/bridges/2026-07-20-PWA-Bridges-repariert.md

4.7 KiB

PWA-Bridges repariert — Mammouth, Suno, Qolaba, Gemini, Nimbus

Datum: 2026-07-20 · Host: Hub (jump.panel1.de), Container keys-bridges Ergebnis: Alle fuenf Bridges wieder verbunden. Vorher lieferten alle leere Antworten.


Die Ursachenkette

Ein einziger veralteter Eintrag hat vier Tunnel und drei Dienste gekillt:

1. gpu-pc bekam eine neue Tailscale-IP:  100.82.179.51  ->  100.109.177.88
2. Vier systemd-Dienste zeigten weiter auf die tote Adresse
3. Drei davon nutzten Schluessel-Anmeldung, die gpu-pc ablehnt
4. -> SOCKS5-Proxy (Port 1080) tot
5. -> Firefox im Container konnte mammouth.ai nicht laden
6. -> Firefox fror auf der Fehlerseite ein und lud nie nach
7. -> alle Bridges lieferten 0 Token / leeren Inhalt

Trugschluss unterwegs: /status meldete "mammouth": {"logged_in": true}, obwohl nichts ging. Die Pruefung schaut nur, ob /login in der URL steht — eine Firefox-Fehlerseite enthaelt das nicht. Merke: logged_in allein ist kein Beweis. Immer einen echten Chat-Aufruf machen.

Fix 1 — Veraltete IP in vier Diensten

sed -i "s/100.82.179.51/100.109.177.88/g" \
  /etc/systemd/system/{ssh-tunnel-gpupc,gpupc-socks-tunnel,shadow-ollama-tunnel,suno-pwa-cdp-tunnel}.service
systemctl daemon-reload

Die echte Adresse findet man mit tailscale status | grep gpu-pc.

Fix 2 — gpu-pc akzeptiert KEINE SSH-Schluessel, nur Passwort

Alle Hub-Schluessel (id_ed25519, id_rsa, barby-gitlab) werden abgelehnt: Permission denied (publickey,password,keyboard-interactive).

Der einzige funktionierende Dienst (shadow-ollama-tunnel) zeigte die Loesung — Passwort-Auth:

Environment=SSHPASS=<passwort>
ExecStart=/usr/bin/sshpass -e /usr/bin/ssh <forward> -N \
  -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -o ServerAliveCountMax=3 \
  -o ExitOnForwardFailure=yes \
  -o PreferredAuthentications=password,keyboard-interactive -o PubkeyAuthentication=no \
  matthias@100.109.177.88

Auf alle drei uebertragen. Danach: alle vier Tunnel active, Port 1080 und 9223 lauschen.

Fix 3 — Firefox-Seite war eingefroren

Firefox laedt eine einmal gescheiterte Seite nicht von selbst nach. docker restart keys-bridges -> https://mammouth.ai/app/a/default statt "Problem loading page". Nebeneffekt: Gemini, Qolaba und Nimbus meldeten vorher BrowserContext has been closed — das loeste sich von selbst, sobald der Proxy zurueck war.

Fix 4 — Suno-Bridge zeigte auf die falsche Adresse UND den falschen Port

/app/bridges/suno.py:

CDP_URL = "http://100.91.98.15:9222"   # FALSCH: das ist jump, und Port 9222
CDP_URL = "http://172.16.8.1:9223"     # RICHTIG: Docker-Gateway -> gpu-pc-Tunnel

Warum nicht host.docker.internal: Chrome DevTools lehnt das mit Host header is specified and is not an IP address or localhost ab. Es muss eine IP sein. Die richtige findet man mit:

docker inspect keys-bridges --format '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}'

(hier 172.16.8.1 — NICHT die 172.16.1.1, zu der host.docker.internal aufloest)

Endstand

Bridge Status
mammouth verbunden — Abo abgelaufen ("No active subscription")
suno verbunden (https://suno.com/)
gemini liefert nachweislich: "Jitter bezeichnet die schwankende Zeitverzoegerung..."
qolaba verbunden — Antwort-Erfassung laeuft in Zeitueberschreitung (Selektor)
nimbus verbunden

Wichtige Nebenbefunde

  • Virtueller LiteLLM-Schluessel gesperrt: sk-4iPCRTWuGmLxnfCX4io9WQ aus hermes-desktop-keys-consoro.md liefert "Key is blocked". Master-Key steht in der Container-Umgebung: docker exec litellm-public printenv LITELLM_MASTER_KEY
  • Gateway listet 284 Modelle, aber /v1/images/generations weist jedes ab. Modell-Liste und Routing sind auseinandergelaufen. Chat funktioniert.
  • Mammouth hat 84 Modelle inkl. sora, veo, kling, flux, elevenlabs, claude-opus-4.8 — alle haengen am Abo.
  • Qolaba hat im Gateway NUR Chat-Modelle (30), keine Bild-/Video-Endpunkte, entgegen qolaba-bridge-plan.md.
  • Alibaba (dashscope) = 75 Modelle, Chat funktioniert — guenstigste Bahn.

Diagnose-Rezept fuer naechstes Mal

curl -s http://127.0.0.1:4003/status | python3 -m json.tool   # 1. Bridge-Sicht
systemctl is-active gpupc-socks-tunnel suno-pwa-cdp-tunnel     # 2. Tunnel
ss -tln | grep -E ':(1080|9223) '                              # 3. Ports
docker exec keys-bridges sh -c 'curl -s --socks5 host.docker.internal:1080 -o /dev/null -w "%{http_code}" https://mammouth.ai/'
curl -s -X POST http://127.0.0.1:4003/mammouth/chat -d '{"prompt":"Test"}' -H "Content-Type: application/json"

Schritt 5 ist der einzige echte Beweis — alles davor kann gruen sein, waehrend nichts geht.