From 078cf39313a531748a84891322df56438c0872b1 Mon Sep 17 00:00:00 2001 From: Hizome <18071447006@163.com> Date: Sat, 3 Jan 2026 16:14:12 +0800 Subject: [PATCH] fix: implement navigation in agent mode (#12238) fix: add navigation in agentm mode Co-authored-by: harry --- src/renderer/src/pages/home/Chat.tsx | 1 + .../home/Messages/AgentSessionMessages.tsx | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/pages/home/Chat.tsx b/src/renderer/src/pages/home/Chat.tsx index 01bd12377c..fb24d55d65 100644 --- a/src/renderer/src/pages/home/Chat.tsx +++ b/src/renderer/src/pages/home/Chat.tsx @@ -233,6 +233,7 @@ const Chat: FC = (props) => { ) : ( )} + {messageNavigation === 'buttons' && } )} diff --git a/src/renderer/src/pages/home/Messages/AgentSessionMessages.tsx b/src/renderer/src/pages/home/Messages/AgentSessionMessages.tsx index 611216919a..d32e9bdf8b 100644 --- a/src/renderer/src/pages/home/Messages/AgentSessionMessages.tsx +++ b/src/renderer/src/pages/home/Messages/AgentSessionMessages.tsx @@ -2,13 +2,17 @@ import { loggerService } from '@logger' import ContextMenu from '@renderer/components/ContextMenu' import { useSession } from '@renderer/hooks/agents/useSession' import { useTopicMessages } from '@renderer/hooks/useMessageOperations' +import useScrollPosition from '@renderer/hooks/useScrollPosition' +import { useSettings } from '@renderer/hooks/useSettings' +import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { getGroupedMessages } from '@renderer/services/MessagesService' import { type Topic, TopicType } from '@renderer/types' import { buildAgentSessionTopicId } from '@renderer/utils/agentSession' import { Spin } from 'antd' -import { memo, useMemo } from 'react' +import { memo, useCallback, useEffect, useMemo, useRef } from 'react' import styled from 'styled-components' +import MessageAnchorLine from './MessageAnchorLine' import MessageGroup from './MessageGroup' import NarrowLayout from './NarrowLayout' import PermissionModeDisplay from './PermissionModeDisplay' @@ -26,6 +30,10 @@ const AgentSessionMessages: React.FC = ({ agentId, sessionId }) => { const sessionTopicId = useMemo(() => buildAgentSessionTopicId(sessionId), [sessionId]) // Use the same hook as Messages.tsx for consistent behavior const messages = useTopicMessages(sessionTopicId) + const { messageNavigation } = useSettings() + const scrollContainerRef = useRef(null) + + const { handleScroll: handleScrollPosition } = useScrollPosition(`agent-session-${sessionId}`) const displayMessages = useMemo(() => { if (!messages || messages.length === 0) return [] @@ -60,8 +68,31 @@ const AgentSessionMessages: React.FC = ({ agentId, sessionId }) => { messageCount: messages.length }) + // Scroll to bottom function + const scrollToBottom = useCallback(() => { + if (scrollContainerRef.current) { + requestAnimationFrame(() => { + if (scrollContainerRef.current) { + scrollContainerRef.current.scrollTo({ top: 0 }) + } + }) + } + }, [scrollContainerRef]) + + // Listen for send message events to auto-scroll to bottom + useEffect(() => { + const unsubscribes = [ + EventEmitter.on(EVENT_NAMES.SEND_MESSAGE, scrollToBottom) + ] + return () => unsubscribes.forEach((unsub) => unsub()) + }, [scrollToBottom]) + return ( - + @@ -79,6 +110,7 @@ const AgentSessionMessages: React.FC = ({ agentId, sessionId }) => { + {messageNavigation === 'anchor' && } ) }