diff --git a/src/components/WorkFlow/node.tsx b/src/components/WorkFlow/node.tsx index c787944fb..cd3208952 100644 --- a/src/components/WorkFlow/node.tsx +++ b/src/components/WorkFlow/node.tsx @@ -280,18 +280,30 @@ export function Node({ id, data }: NodeProps) { const toolkits = selectedTask?.toolkits; const lastToolkit = toolkits?.[toolkits.length - 1]; - const toolkitChangeKey = `${selectedTask?.id ?? ''}:${toolkits?.length ?? 0}:${lastToolkit?.toolkitId ?? ''}:${lastToolkit?.toolkitStatus ?? ''}`; + const toolkitChangeKey = `${selectedTask?.id ?? ''}:${toolkits?.length ?? 0}:${lastToolkit?.toolkitId ?? ''}:${lastToolkit?.toolkitStatus ?? ''}:${lastToolkit?.message?.slice(-30) ?? ''}`; useEffect(() => { if (!isExpanded || !toolkits?.length) return; scrollLogToBottom(); }, [isExpanded, toolkits?.length, toolkitChangeKey, scrollLogToBottom]); - // Reset scroll-to-bottom flag when switching tasks so new task always starts at bottom + // Scroll to bottom when a report appears + useEffect(() => { + if (!isExpanded || !selectedTask?.report) return; + scrollLogToBottom(); + }, [isExpanded, selectedTask?.report, scrollLogToBottom]); + + // Reset scroll-to-bottom flag when switching tasks or when panel opens useEffect(() => { wasAtBottomRef.current = true; }, [selectedTask?.id]); + useEffect(() => { + if (isExpanded) { + wasAtBottomRef.current = true; + } + }, [isExpanded]); + // Track whether user has scrolled up so we don't override manual reading useEffect(() => { const el = logRef.current; @@ -413,17 +425,17 @@ export function Node({ id, data }: NodeProps) { : 'w-[342px]' } ${ data.isEditMode ? 'h-full' : 'max-h-[calc(100vh-200px)]' - } flex overflow-hidden rounded-xl border border-solid border-worker-border-default bg-worker-surface-primary ${ + } rounded-xl border-worker-border-default bg-worker-surface-primary flex overflow-hidden border border-solid ${ getCurrentTask()?.activeAgent === id ? `${agentMap[data.type]?.borderColor} z-50` - : 'z-10 border-worker-border-default' - } transition-all duration-300 ease-in-out ${ + : 'border-worker-border-default z-10' + } ease-in-out transition-all duration-300 ${ (data.agent?.tasks?.length ?? 0) === 0 && 'opacity-30' }`} > -