diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d8ca555a7d..6a8fb90767d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ Docs: https://docs.openclaw.ai ### Fixes - Agents/image generation: allow distinct `image_generate` prompts to start separate session-backed background tasks while same-prompt retries still return the active task status. (#83614) Thanks @Elarwei001. +- Control UI: stop the chat reading indicator from sticking after an assistant response finishes. (#83515) Thanks @njuboy11. - Skills: reject empty or whitespace-only skill names and descriptions during quick validation. (#27061) - Sessions: skip trailing custom transcript entries when checking tail assistant replies so embedded CLI gap-fill does not duplicate canonical assistant output. (#83635) Thanks @yaoyi1222. - Memory Wiki: keep `wiki_lint` tool output path-safe by reporting vault-internal lint reports as relative paths in tool text and details while preserving absolute report paths for CLI/file callers. (#83439) Thanks @LLagoon3. diff --git a/ui/src/ui/views/chat.test.ts b/ui/src/ui/views/chat.test.ts index 4f4d2bc5e66..e5921a6aaff 100644 --- a/ui/src/ui/views/chat.test.ts +++ b/ui/src/ui/views/chat.test.ts @@ -503,6 +503,23 @@ describe("chat loading skeleton", () => { expect(container.querySelector(".chat-reading-indicator")).not.toBeNull(); }); + it("does not keep the reading indicator after an assistant response has rendered", () => { + const container = renderChatView({ + canAbort: true, + messages: [ + { + role: "assistant", + content: "Finished answer", + timestamp: 1, + }, + ], + stream: null, + }); + + expect(container.querySelector(".chat-reading-indicator")).toBeNull(); + expect(container.querySelector(".chat-group")?.textContent?.trim()).toBe("Finished answer"); + }); + it("keeps existing messages visible without the skeleton during a background reload", () => { const container = renderChatView({ loading: true,