Skip to content

Commit 2a6ffb1

Browse files
committed
Update reasoning row states
1 parent 59deb54 commit 2a6ffb1

File tree

4 files changed

+61
-8
lines changed

4 files changed

+61
-8
lines changed

src/features/messages/components/MessageRows.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,11 @@ export const ReasoningRow = memo(function ReasoningRow({
405405
const { summaryTitle, bodyText, hasBody } = parsed;
406406
const reasoningTone: StatusTone = hasBody ? "completed" : "processing";
407407
return (
408-
<div className="tool-inline reasoning-inline">
408+
<div
409+
className={`tool-inline reasoning-inline ${
410+
hasBody ? "reasoning-inline-with-body" : "reasoning-inline-title-only"
411+
}`}
412+
>
409413
<button
410414
type="button"
411415
className="tool-inline-bar-toggle"

src/features/messages/components/Messages.test.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ describe("Messages", () => {
335335
expect(useFileLinkOpenerMock).toHaveBeenCalledTimes(1);
336336
});
337337

338-
it("renders title-only reasoning rows and uses reasoning title for the working indicator", () => {
338+
it("renders title-only reasoning rows and keeps the working indicator generic", () => {
339339
const items: ConversationItem[] = [
340340
{
341341
id: "reasoning-1",
@@ -358,7 +358,8 @@ describe("Messages", () => {
358358
);
359359

360360
const workingText = container.querySelector(".working-text");
361-
expect(workingText?.textContent ?? "").toContain("Scanning repository");
361+
expect(workingText?.textContent ?? "").toContain("Working");
362+
expect(workingText?.textContent ?? "").not.toContain("Scanning repository");
362363
expect(container.querySelector(".reasoning-inline")).toBeTruthy();
363364
});
364365

@@ -388,7 +389,8 @@ describe("Messages", () => {
388389
const reasoningDetail = container.querySelector(".reasoning-inline-detail");
389390
expect(reasoningDetail?.textContent ?? "").toContain("Looking for entry points");
390391
const workingText = container.querySelector(".working-text");
391-
expect(workingText?.textContent ?? "").toContain("Scanning repository");
392+
expect(workingText?.textContent ?? "").toContain("Working");
393+
expect(workingText?.textContent ?? "").not.toContain("Scanning repository");
392394
});
393395

394396
it("uses content for the reasoning title when summary is empty", () => {
@@ -414,7 +416,8 @@ describe("Messages", () => {
414416
);
415417

416418
const workingText = container.querySelector(".working-text");
417-
expect(workingText?.textContent ?? "").toContain("Plan from content");
419+
expect(workingText?.textContent ?? "").toContain("Working");
420+
expect(workingText?.textContent ?? "").not.toContain("Plan from content");
418421
const reasoningDetail = container.querySelector(".reasoning-inline-detail");
419422
expect(reasoningDetail?.textContent ?? "").toContain("More detail here");
420423
expect(reasoningDetail?.textContent ?? "").not.toContain("Plan from content");
@@ -453,7 +456,7 @@ describe("Messages", () => {
453456
expect(workingText?.textContent ?? "").not.toContain("Old reasoning title");
454457
});
455458

456-
it("keeps the latest title-only reasoning label while rendering a reasoning row", () => {
459+
it("renders the title-only reasoning row and keeps the working indicator generic", () => {
457460
const items: ConversationItem[] = [
458461
{
459462
id: "reasoning-title-only",
@@ -485,7 +488,8 @@ describe("Messages", () => {
485488
);
486489

487490
const workingText = container.querySelector(".working-text");
488-
expect(workingText?.textContent ?? "").toContain("Indexing workspace");
491+
expect(workingText?.textContent ?? "").toContain("Working");
492+
expect(workingText?.textContent ?? "").not.toContain("Indexing workspace");
489493
expect(container.querySelector(".reasoning-inline")).toBeTruthy();
490494
});
491495

src/features/messages/components/Messages.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,25 @@ export const Messages = memo(function Messages({
207207
[items, reasoningMetaById],
208208
);
209209

210+
const hasVisibleReasoningInActiveTail = useMemo(() => {
211+
for (let index = visibleItems.length - 1; index >= 0; index -= 1) {
212+
const item = visibleItems[index];
213+
if (item.kind === "message") {
214+
break;
215+
}
216+
if (item.kind !== "reasoning") {
217+
continue;
218+
}
219+
if (reasoningMetaById.get(item.id)?.workingLabel) {
220+
return true;
221+
}
222+
}
223+
return false;
224+
}, [visibleItems, reasoningMetaById]);
225+
226+
const workingReasoningLabel =
227+
isThinking && hasVisibleReasoningInActiveTail ? null : latestReasoningLabel;
228+
210229
useEffect(() => {
211230
const itemsToExpand: string[] = [];
212231
for (let index = visibleItems.length - 1; index >= 0; index -= 1) {
@@ -517,7 +536,7 @@ export const Messages = memo(function Messages({
517536
processingStartedAt={processingStartedAt}
518537
lastDurationMs={lastDurationMs}
519538
hasItems={items.length > 0}
520-
reasoningLabel={latestReasoningLabel}
539+
reasoningLabel={workingReasoningLabel}
521540
/>
522541
{!items.length && !userInputNode && !isThinking && !isLoadingMessages && (
523542
<div className="empty messages-empty">

src/styles/messages.css

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,32 @@
815815
color: var(--text-muted);
816816
}
817817

818+
.reasoning-inline-title-only {
819+
margin: 6px 0 10px;
820+
padding-top: 4px;
821+
padding-bottom: 4px;
822+
}
823+
824+
.reasoning-inline-title-only .tool-inline-content {
825+
gap: 4px;
826+
}
827+
828+
.reasoning-inline-title-only .tool-inline-summary {
829+
font-size: 13px;
830+
line-height: 1.35;
831+
}
832+
833+
.reasoning-inline-title-only .tool-inline-value {
834+
font-weight: 600;
835+
white-space: normal;
836+
overflow: visible;
837+
text-overflow: clip;
838+
}
839+
840+
.reasoning-inline-title-only .tool-inline-icon.processing {
841+
color: var(--status-success);
842+
}
843+
818844
.tool-command {
819845
display: flex;
820846
flex-direction: column;

0 commit comments

Comments
 (0)