From ef04174194629aa833bb56a4c5326fae860b7113 Mon Sep 17 00:00:00 2001
From: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Tue, 21 Apr 2026 09:41:28 +0800
Subject: [PATCH] Fix invalid HTML nesting in reasoning trigger during complex
task rendering (#2382)
* Initial plan
* fix(frontend): avoid invalid paragraph nesting in reasoning trigger
Agent-Logs-Url: https://github.com/bytedance/deer-flow/sessions/4c9eb0c2-ff29-4629-a61c-4e33d736d918
Co-authored-by: WillemJiang <219644+WillemJiang@users.noreply.github.com>
* test(frontend): strengthen reasoning trigger DOM nesting assertion
Agent-Logs-Url: https://github.com/bytedance/deer-flow/sessions/4c9eb0c2-ff29-4629-a61c-4e33d736d918
Co-authored-by: WillemJiang <219644+WillemJiang@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: WillemJiang <219644+WillemJiang@users.noreply.github.com>
---
.../src/components/ai-elements/reasoning.tsx | 4 +--
.../tests/unit/core/reasoning-trigger.test.ts | 28 +++++++++++++++++++
2 files changed, 30 insertions(+), 2 deletions(-)
create mode 100644 frontend/tests/unit/core/reasoning-trigger.test.ts
diff --git a/frontend/src/components/ai-elements/reasoning.tsx b/frontend/src/components/ai-elements/reasoning.tsx
index 5f1d2321e..b8e0bfcbc 100644
--- a/frontend/src/components/ai-elements/reasoning.tsx
+++ b/frontend/src/components/ai-elements/reasoning.tsx
@@ -123,9 +123,9 @@ const defaultGetThinkingMessage = (isStreaming: boolean, duration?: number) => {
return
Thought for a few seconds
; + return Thought for a few seconds; } - returnThought for {duration} seconds
; + return Thought for {duration} seconds; }; export const ReasoningTrigger = memo( diff --git a/frontend/tests/unit/core/reasoning-trigger.test.ts b/frontend/tests/unit/core/reasoning-trigger.test.ts new file mode 100644 index 000000000..2fbe97977 --- /dev/null +++ b/frontend/tests/unit/core/reasoning-trigger.test.ts @@ -0,0 +1,28 @@ +import { createElement } from "react"; +import { renderToStaticMarkup } from "react-dom/server"; +import { expect, test, vi } from "vitest"; + +vi.mock("streamdown", () => ({ + Streamdown: ({ children }: { children: string }) => + createElement("div", null, children), +})); + +import { + Reasoning, + ReasoningContent, + ReasoningTrigger, +} from "@/components/ai-elements/reasoning"; + +test("ReasoningTrigger default message uses phrasing content", () => { + const html = renderToStaticMarkup( + createElement( + Reasoning, + { isStreaming: false, defaultOpen: false }, + createElement(ReasoningTrigger, null), + createElement(ReasoningContent, null, "test"), + ), + ); + + expect(html).toContain("Thought for a few seconds"); + expect(html).not.toMatch(/