From 10deb0ac2213ec2f507e2bb02c3ac5ec383aa5eb Mon Sep 17 00:00:00 2001 From: m4 Date: Wed, 12 Aug 2026 12:26:56 +0800 Subject: [PATCH] feat(webui): show pulsing running dot on busy thread-list rows --- src/app/components/ThreadList.tsx | 10 +++++++--- src/i18n/messages/en/threadList.ts | 1 + src/i18n/messages/zh/threadList.ts | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/app/components/ThreadList.tsx b/src/app/components/ThreadList.tsx index 3baeb98..150d6f0 100644 --- a/src/app/components/ThreadList.tsx +++ b/src/app/components/ThreadList.tsx @@ -34,12 +34,14 @@ import { cn } from "@/lib/utils"; import type { ThreadItem } from "@/app/hooks/useThreads"; import { useThreads, + useRunningThreadIds, deleteThread, renameThread, pinThread, exportThread, } from "@/app/hooks/useThreads"; import { useMemoryActivity } from "@/app/hooks/useMemoryActivity"; +import { RunningDot } from "@/app/components/RunningDot"; import { autoApprovesTools, getThreadReviewMode } from "@/lib/reviewMode"; import { Dialog, @@ -174,6 +176,7 @@ export function ThreadList({ status: statusFilter === "all" ? undefined : statusFilter, limit: 20, }); + const runningIds = useRunningThreadIds(); // Dedupe by id, keeping the first occurrence — page 0 wins, so the freshest // `updated_at` survives. Without this, a thread whose `updated_at` advances @@ -497,6 +500,9 @@ export function ThreadList({ aria-hidden="true" /> )} + {runningIds.has(thread.id) && ( + + )} {thread.title} @@ -808,9 +814,7 @@ export function ThreadList({ search.trim() && filtered.length === 0 && (
-

- {t("noMatch")} -

+

{t("noMatch")}

)} diff --git a/src/i18n/messages/en/threadList.ts b/src/i18n/messages/en/threadList.ts index f906017..a44bd56 100644 --- a/src/i18n/messages/en/threadList.ts +++ b/src/i18n/messages/en/threadList.ts @@ -19,6 +19,7 @@ export default { filterAttention: "Attention", filterInterrupted: "Interrupted", filterError: "Error", + running: "Running", closeNavigation: "Close navigation", closeResearch: "Close research", loadFailed: "Failed to load research", diff --git a/src/i18n/messages/zh/threadList.ts b/src/i18n/messages/zh/threadList.ts index 0cdfcb9..abe41e5 100644 --- a/src/i18n/messages/zh/threadList.ts +++ b/src/i18n/messages/zh/threadList.ts @@ -18,6 +18,7 @@ export default { filterAttention: "需要注意", filterInterrupted: "已中断", filterError: "错误", + running: "正在执行", closeNavigation: "关闭导航", closeResearch: "关闭研究", loadFailed: "加载研究失败",