diff --git a/src/components/chat/MessageList.tsx b/src/components/chat/MessageList.tsx index 7dc444a..3aa2717 100644 --- a/src/components/chat/MessageList.tsx +++ b/src/components/chat/MessageList.tsx @@ -2,6 +2,7 @@ import { useRef, useEffect } from 'react'; import { useTranslation } from '@/hooks/useTranslation'; +import { useStickToBottomContext } from 'use-stick-to-bottom'; import type { Message, PermissionRequestEvent } from '@/types'; import { Conversation, @@ -13,6 +14,24 @@ import { MessageItem } from './MessageItem'; import { StreamingMessage } from './StreamingMessage'; import { CodePilotLogo } from './CodePilotLogo'; +/** + * Scrolls to bottom when streaming starts. + * Must be rendered inside (StickToBottom provider). + */ +function ScrollOnStream({ isStreaming }: { isStreaming: boolean }) { + const { scrollToBottom } = useStickToBottomContext(); + const wasStreaming = useRef(false); + + useEffect(() => { + if (isStreaming && !wasStreaming.current) { + scrollToBottom(); + } + wasStreaming.current = isStreaming; + }, [isStreaming, scrollToBottom]); + + return null; +} + interface ToolUseInfo { id: string; name: string; @@ -97,6 +116,7 @@ export function MessageList({ return ( + {hasMore && (