From 4ae2c4382da97d84e0343230c1da84393433afac Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 13 Mar 2026 17:32:43 +0100 Subject: [PATCH 1/4] fix: working time render --- apps/web/src/components/ChatView.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 9f625762c..bfea9aded 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -1900,14 +1900,15 @@ export default function ChatView({ threadId }: ChatViewProps) { : "local"; useEffect(() => { - if (phase !== "running") return; + if (!isWorking) return; + setNowTick(Date.now()); const timer = window.setInterval(() => { setNowTick(Date.now()); }, 1000); return () => { window.clearInterval(timer); }; - }, [phase]); + }, [isWorking]); const beginSendPhase = useCallback((nextPhase: Exclude) => { setSendStartedAt((current) => current ?? new Date().toISOString()); From f3b53d5def35641968cd87a841e9f097453a4c69 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 13 Mar 2026 17:37:19 +0100 Subject: [PATCH 2/4] keep semantics --- apps/web/src/components/ChatView.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index bfea9aded..5b75fc6c4 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -1900,7 +1900,7 @@ export default function ChatView({ threadId }: ChatViewProps) { : "local"; useEffect(() => { - if (!isWorking) return; + if (phase !== "running") return; setNowTick(Date.now()); const timer = window.setInterval(() => { setNowTick(Date.now()); @@ -1908,7 +1908,7 @@ export default function ChatView({ threadId }: ChatViewProps) { return () => { window.clearInterval(timer); }; - }, [isWorking]); + }, [phase]); const beginSendPhase = useCallback((nextPhase: Exclude) => { setSendStartedAt((current) => current ?? new Date().toISOString()); From 54e97a25ffd597a2e8e431544160c784aa7b4134 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 13 Mar 2026 17:49:33 +0100 Subject: [PATCH 3/4] Keep working timer running until latest turn settles - derive `shouldTickNow` from `isWorking` or unsettled latest turn - update tick effect to depend on `shouldTickNow` instead of send phase --- apps/web/src/components/ChatView.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 5b75fc6c4..8f8cd8c99 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -1899,8 +1899,10 @@ export default function ChatView({ threadId }: ChatViewProps) { ? (draftThread?.envMode ?? "local") : "local"; + const shouldTickNow = isWorking || !latestTurnSettled; + useEffect(() => { - if (phase !== "running") return; + if (!shouldTickNow) return; setNowTick(Date.now()); const timer = window.setInterval(() => { setNowTick(Date.now()); @@ -1908,7 +1910,7 @@ export default function ChatView({ threadId }: ChatViewProps) { return () => { window.clearInterval(timer); }; - }, [phase]); + }, [shouldTickNow]); const beginSendPhase = useCallback((nextPhase: Exclude) => { setSendStartedAt((current) => current ?? new Date().toISOString()); From a1e99358126194a48b04f402990d81008f52f920 Mon Sep 17 00:00:00 2001 From: neriousy Date: Fri, 13 Mar 2026 18:00:04 +0100 Subject: [PATCH 4/4] cleaner --- apps/web/src/components/ChatView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 8f8cd8c99..53424e24e 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -1899,7 +1899,7 @@ export default function ChatView({ threadId }: ChatViewProps) { ? (draftThread?.envMode ?? "local") : "local"; - const shouldTickNow = isWorking || !latestTurnSettled; + const shouldTickNow = !!activeWorkStartedAt && (isWorking || !latestTurnSettled); useEffect(() => { if (!shouldTickNow) return;