feat(llm): llama.cpp/llama-swap aus der Diagnostic aktualisieren

Modell-Katalog → ⚙ llama.cpp zeigt je LLM-Box die installierte Version,
sucht nach Updates (Pruefsumme des Image-Tags in der Registry + letztes
llama-swap-Release) und aktualisiert auf Knopfdruck: altes Image sichern,
neues ziehen, Container per Compose neu anlegen, Selbsttest (llama.cpp
sieht die Karten, vorgeladene Modelle wieder bereit) — sonst automatisch
zurueck. Zuruecksetzen auf die Vorversion per Knopf.

Docker-Zugriff hat nur der neue llm-updater (feste Aktionen fuer
aria-llama-swap, kein Port nach aussen, Token in /models). Der llm-adapter
reicht llm_runtime weiter und meldet den Fortschritt. RVS-Allow-List um
llm_runtime/_result/_progress ergaenzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-01 12:39:52 +01:00
co-authored by Claude Opus 5.5
parent 3773178726
commit 68686de9dc
7 changed files with 671 additions and 1 deletions
+15
View File
@@ -1672,6 +1672,8 @@ function connectRVS(forcePlain) {
broadcast({ type: "rooms_info", payload: msg.payload || {} });
} else if (msg.type === "llm_openai_config_result") {
broadcast({ type: "llm_openai_config_result", payload: msg.payload || {} });
} else if (msg.type === "llm_runtime_result" || msg.type === "llm_runtime_progress") {
broadcast({ type: msg.type, payload: msg.payload || {} });
} else if (msg.type === "sat_result") {
// Ergebnis einer Satelliten-Aktion → an den Browser (z.B. APK-Rollout).
// Klartext-Kennwoerter (fritzbox.backup_password) nur an den Fragenden.
@@ -3693,6 +3695,19 @@ wss.on("connection", (ws) => {
},
timestamp: Date.now(),
});
} else if (msg.action === "llm_runtime") {
// llama-swap/llama.cpp einer Box: Version pruefen, aktualisieren, zuruecksetzen.
const op = String(msg.op || "status");
if (!["status", "check", "update", "rollback"].includes(op)) return;
sendToRVS_raw({
type: "llm_runtime",
payload: {
instanceId: String(msg.instanceId || ""),
op,
requestId: String(msg.requestId || ""),
},
timestamp: Date.now(),
});
} else if (msg.action === "agent_history_query") {
// Browser will die gespeicherte Historie eines Agenten — die Bridge
// antwortet mit agent_history_list (auf derselben rvsWs).