diff --git a/packages/app/src/components/agent-stream-view.tsx b/packages/app/src/components/agent-stream-view.tsx index a0ff066f4..1d2b13def 100644 --- a/packages/app/src/components/agent-stream-view.tsx +++ b/packages/app/src/components/agent-stream-view.tsx @@ -89,20 +89,33 @@ const isSameAssistantBlockGroup = (params: { params.item.blockGroupId !== undefined && params.item.blockGroupId === params.other.blockGroupId; -const isAssistantBlockFragment = (params: { +const getAssistantBlockSpacing = (params: { item: StreamItem; aboveItem: StreamItem | null | undefined; belowItem: StreamItem | null | undefined; -}) => - params.item.kind === "assistant_message" && - (isSameAssistantBlockGroup({ +}): "default" | "compactTop" | "compactBottom" | "compactBoth" => { + if (params.item.kind !== "assistant_message") { + return "default"; + } + const compactTop = isSameAssistantBlockGroup({ item: params.item, other: params.aboveItem, - }) || - isSameAssistantBlockGroup({ - item: params.item, - other: params.belowItem, - })); + }); + const compactBottom = isSameAssistantBlockGroup({ + item: params.item, + other: params.belowItem, + }); + if (compactTop && compactBottom) { + return "compactBoth"; + } + if (compactTop) { + return "compactTop"; + } + if (compactBottom) { + return "compactBottom"; + } + return "default"; +}; export interface AgentStreamViewHandle { scrollToBottom(reason?: BottomAnchorLocalRequest["reason"]): void; prepareForViewportChange(): void; @@ -373,13 +386,11 @@ const AgentStreamViewComponent = forwardRef {content} - {isEndOfAssistantTurn ? ( - - ) : null} + {isEndOfAssistantTurn ? : null} ); }, @@ -636,7 +642,11 @@ const AgentStreamViewComponent = forwardRef {auxiliary.pendingPermissions} @@ -644,7 +654,13 @@ const AgentStreamViewComponent = forwardRef ); - }, [auxiliary.pendingPermissions, auxiliary.workingIndicator, boundary.hasLiveHead, looseGap]); + }, [ + auxiliary.pendingPermissions, + auxiliary.workingIndicator, + boundary.hasLiveHead, + looseGap, + streamRenderStrategy, + ]); const renderers = useMemo( () => ({ @@ -1049,9 +1065,6 @@ const stylesheet = StyleSheet.create((theme) => ({ listHeaderContent: { gap: theme.spacing[3], }, - assistantTurnCopyButton: { - marginTop: theme.spacing[3], - }, bottomBarWrapper: { flexDirection: "row", alignItems: "center", diff --git a/packages/app/src/components/message.tsx b/packages/app/src/components/message.tsx index 65012488d..42e64d56e 100644 --- a/packages/app/src/components/message.tsx +++ b/packages/app/src/components/message.tsx @@ -433,7 +433,7 @@ interface AssistantMessageProps { serverId?: string; client?: DaemonClient | null; disableOuterSpacing?: boolean; - spacing?: "default" | "compact"; + spacing?: "default" | "compactTop" | "compactBottom" | "compactBoth"; } export const assistantMessageStylesheet = StyleSheet.create((theme) => ({ @@ -441,8 +441,10 @@ export const assistantMessageStylesheet = StyleSheet.create((theme) => ({ paddingHorizontal: theme.spacing[2], paddingVertical: theme.spacing[3], }, - containerCompactVertical: { + containerCompactTop: { paddingTop: 0, + }, + containerCompactBottom: { paddingBottom: 0, }, containerSpacing: { @@ -1107,7 +1109,7 @@ export const AssistantMessage = memo(function AssistantMessage({ }: AssistantMessageProps) { const { theme } = useUnistyles(); const resolvedDisableOuterSpacing = useDisableOuterSpacing( - disableOuterSpacing ?? spacing === "compact", + disableOuterSpacing ?? spacing !== "default", ); const markdownStyles = useMemo(() => createMarkdownStyles(theme), [theme]); @@ -1309,7 +1311,10 @@ export const AssistantMessage = memo(function AssistantMessage({ testID="assistant-message" style={[ assistantMessageStylesheet.container, - spacing === "compact" && assistantMessageStylesheet.containerCompactVertical, + (spacing === "compactTop" || spacing === "compactBoth") && + assistantMessageStylesheet.containerCompactTop, + (spacing === "compactBottom" || spacing === "compactBoth") && + assistantMessageStylesheet.containerCompactBottom, !resolvedDisableOuterSpacing && assistantMessageStylesheet.containerSpacing, ]} >