From 351c58e88e38564a2b2a0d4b229cdc9216df6090 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Wed, 13 May 2026 01:55:08 +0200 Subject: [PATCH] =?UTF-8?q?fix(diag):=20zwei=20Bugs=20=E2=80=94=20Memory-L?= =?UTF-8?q?iste=20nach=20Delete=20+=20Thinking-Indikator=20im=20RVS-Chat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug 1: Memory loeschen + Liste zeigt geloeschten Eintrag weiter deleteMemory rief loadBrainMemoryList — die fiel bei aktiver Such- Ansicht in den Cache-Pfad und renderte den geloeschten Eintrag aus brainMemoryCache/brainSearchIds wieder. Fix: nach Delete den Cache- Eintrag + brainSearchIds bereinigen und bei aktiver Suche re-search ausfuehren (single oder advanced), sonst Vollliste vom Server. Bug 2: "ARIA denkt..."-Indikator erscheint nicht mehr im Chat-Fenster Diagnostic-Server hatte fuer RVS-eingehende agent_activity-Events keinen Relay an die Browser-Clients. Bridge sendet die Events brav, Diagnostic schluckt sie still. Fix: agent_activity vom RVS an Browser broadcasten (mit dem gleichen settled-window-Schutz wie beim alten Gateway-Pfad — Trailing-Events nach chat:final werden weiter ignoriert). Co-Authored-By: Claude Opus 4.7 (1M context) --- diagnostic/index.html | 13 ++++++++++++- diagnostic/server.js | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/diagnostic/index.html b/diagnostic/index.html index 6e8ba17..89571fc 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -4120,7 +4120,18 @@ try { const r = await fetch('/api/brain/memory/delete/' + encodeURIComponent(id), { method: 'DELETE' }); if (!r.ok) throw new Error('HTTP ' + r.status); - loadBrainMemoryList(); + // Lokalen Cache + Such-State bereinigen damit die Liste nicht den Geist + // des geloeschten Eintrags weiterzeigt. + delete brainMemoryCache[id]; + if (Array.isArray(brainSearchIds)) { + brainSearchIds = brainSearchIds.filter(x => x !== id); + } + // Re-Render: bei aktiver Suche neu suchen (Filter respektieren), + // sonst die Vollliste neu vom Server holen. + const which = (typeof brainSearchActive === 'function') ? brainSearchActive() : null; + if (which === 'single') await runBrainSearch(); + else if (which === 'advanced') await runAdvancedSearch(); + else await loadBrainMemoryList(); loadBrainStatus(); } catch (e) { alert('Löschen fehlgeschlagen: ' + e.message); diff --git a/diagnostic/server.js b/diagnostic/server.js index ff15fcb..ddc7de9 100644 --- a/diagnostic/server.js +++ b/diagnostic/server.js @@ -617,6 +617,21 @@ function connectRVS(forcePlain) { // Mode-Broadcast von der Bridge → an Browser-Clients weiterreichen log("info", "rvs", `Mode-Broadcast: ${msg.payload?.mode} (${msg.payload?.name})`); broadcast({ type: "mode", payload: msg.payload }); + } else if (msg.type === "agent_activity") { + // Bridge meldet "ARIA denkt/schreibt/tool" oder "idle" — an Browser + // weiterreichen, damit der Thinking-Indikator im Chat erscheint. + // Wenn gerade ein chat:final vorbei ist, unterdruecken wir trailing + // 'thinking'-Events (gleiches Schema wie alter OpenClaw-Pfad). + const activity = msg.payload?.activity || msg.activity || "idle"; + if (activity !== "idle" && Date.now() - lastChatFinalAt < SETTLED_WINDOW_MS) { + // chat:final ist gerade durch — verstaubende thinking-Events ignorieren + } else { + broadcast({ + type: "agent_activity", + activity, + tool: msg.payload?.tool || msg.tool || "", + }); + } } else if (msg.type === "memory_saved") { // ARIA hat selber etwas in die Qdrant-DB gespeichert (via memory_save Tool). const m = msg.payload || {};