From e093789dd2340d8a41ee7ac12341fb011f9ff86c Mon Sep 17 00:00:00 2001 From: oliver <97427849+flamboh@users.noreply.github.com> Date: Wed, 14 Oct 2026 10:49:18 -0700 Subject: [PATCH] fix(web): subagent lists in the composer banner no longer start lines with a comma (#19170) --- .../features/threads/thread-handoff-row.tsx | 13 ++++--- apps/web/src/components/ChatView.tsx | 36 ++++++++++++------- .../src/components/chat/V2LifecycleRow.tsx | 18 +++++----- 3 files changed, 41 insertions(+), 26 deletions(-) diff --git a/apps/mobile/src/features/threads/thread-handoff-row.tsx b/apps/mobile/src/features/threads/thread-handoff-row.tsx index 4b05662595f8f0fccc917781de352660f72aced0..cc36efe1dad07183ff99c612892d70300c27c340 100644 --- a/apps/mobile/src/features/threads/thread-handoff-row.tsx +++ b/apps/mobile/src/features/threads/thread-handoff-row.tsx @@ -9,7 +9,7 @@ import type { ServerProvider, } from "@t3tools/contracts"; import { Atom } from "effect/reactivity"; -import { Fragment, useMemo } from "react"; +import { useMemo } from "react"; import { Alert, Pressable, View, type ColorValue } from "react-native"; import { AppText as Text } from "../../components/AppText"; import { SymbolView } from "../../components/AppSymbol"; @@ -76,14 +76,17 @@ export function ThreadHandoffDivider(props: { > {endpoints.from.map((endpoint, index) => ( - - {index > 0 ? ( + + + {index < endpoints.from.length - 1 ? ( , ) : null} - - + ))} {endpoints.from.length > 0 ? ( diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index acd68260b9ad5bcc41c382f38c22e29a60bafdc0..ae891d75193ea69b3ecc58b86c8c66512564d430 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -7472,10 +7472,13 @@ export default function ChatView(props: ChatViewProps) { : `${childThreadInputs.length} subagents need input`, description: childThreadInputs.map((child, index) => ( - {index > 0 ? ", " : null} - onOpenRelatedThread(child.id)}> - {child.title} - + {index > 0 ? " " : null} + + onOpenRelatedThread(child.id)}> + {child.title} + + {index < childThreadInputs.length - 1 ? "," : null} + )), actions: ( @@ -7643,19 +7646,26 @@ export default function ChatView(props: ChatViewProps) { ? undefined : presentation.items.map((item, index) => { const childThreadId = item.childThreadId; + const separator = index < presentation.items.length - 1 ? "," : null; return ( - {index > 0 ? ", " : null} + {index > 0 ? " " : null} {childThreadId === undefined ? ( - item.label - ) : ( - onOpenRelatedThread(childThreadId)} - > + <> {item.label} - + {separator} + + ) : ( + + onOpenRelatedThread(childThreadId)} + > + {item.label} + + {separator} + )} ); diff --git a/apps/web/src/components/chat/V2LifecycleRow.tsx b/apps/web/src/components/chat/V2LifecycleRow.tsx index 40421a34e3b77fcbf40c0fafe821e4f032502e72..5206d33acde022fa8c42990743b613dd440b4ed0 100644 --- a/apps/web/src/components/chat/V2LifecycleRow.tsx +++ b/apps/web/src/components/chat/V2LifecycleRow.tsx @@ -15,7 +15,6 @@ import { type HandoffEndpoints, type HandoffTimelineRun, } from "@t3tools/client-runtime/handoff"; -import { Fragment } from "react"; import { formatSubagentDisplayTitle } from "@t3tools/client-runtime/state/subagent-display"; import { ProviderDriverKind, @@ -562,18 +561,21 @@ export function HandoffRow(props: { detail={ {fromEndpoints.map((endpoint, index) => ( - - {index > 0 ? ( - - ) : null} + - + {index < fromEndpoints.length - 1 ? ( + + ) : null} + ))} {fromEndpoints.length > 0 ? (