From de59f0e4d05ecbb60516fc6307a006d9198901bb Mon Sep 17 00:00:00 2001 From: Hibryda Date: Mon, 23 Mar 2026 21:46:16 +0100 Subject: [PATCH] fix(electrobun): replace tick() with requestAnimationFrame in AgentPane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tick() inside $effect triggers effect re-entry: flush_effects → tick → flushSync → flush_effects → infinite loop (effect_update_depth_exceeded). requestAnimationFrame defers DOM scroll to next frame outside the effect. --- ui-electrobun/src/mainview/AgentPane.svelte | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui-electrobun/src/mainview/AgentPane.svelte b/ui-electrobun/src/mainview/AgentPane.svelte index e0d20b7..e8b06b4 100644 --- a/ui-electrobun/src/mainview/AgentPane.svelte +++ b/ui-electrobun/src/mainview/AgentPane.svelte @@ -40,7 +40,8 @@ $effect(() => { void messages.length; - tick().then(() => { + // Use requestAnimationFrame instead of tick() to avoid effect re-entry cycle + requestAnimationFrame(() => { if (scrollEl) scrollEl.scrollTop = scrollEl.scrollHeight; }); });