diff --git a/webui/src/components/thread/ThreadMessages.tsx b/webui/src/components/thread/ThreadMessages.tsx index 8ed3286d4..fcd516086 100644 --- a/webui/src/components/thread/ThreadMessages.tsx +++ b/webui/src/components/thread/ThreadMessages.tsx @@ -147,7 +147,7 @@ export function ThreadMessages({ unit.type === "activity" ? liveActivityClusterIndices.has(index) : isStreaming && ( - unit.message.turnId + unit.message.turnId && activeTurnId !== null ? unit.message.turnId === activeTurnId : index > currentTurnStartIndex ) diff --git a/webui/src/tests/thread-messages.test.tsx b/webui/src/tests/thread-messages.test.tsx index d2e48b19d..e9198d072 100644 --- a/webui/src/tests/thread-messages.test.tsx +++ b/webui/src/tests/thread-messages.test.tsx @@ -1171,6 +1171,27 @@ describe("ThreadMessages", () => { .not.toBeInTheDocument(); }); + it("falls back to the latest user boundary while the active turn id is pending", () => { + const { container } = render( + , + ); + + expect(container.querySelectorAll('[data-assistant-footer] [aria-label="Copy"]')) + .toHaveLength(1); + expect(container.querySelectorAll('[data-assistant-footer] [aria-label="Fork"]')) + .toHaveLength(1); + }); + it("shows copy on adjacent assistant text slices", () => { const messages: UIMessage[] = [ { id: "a1", role: "assistant", content: "part one", createdAt: 1 },