Skip to content

Commit 2d94fd2

Browse files
committed
Optimize message cache cleanup in ChatView
Improves the cleanup logic for the everVisibleMessagesTsRef cache by ensuring that only messages not present in current or recent viewport messages are deleted. Also updates event typing for suggestion clicks and minor refactoring for clarity.
1 parent 17b0cc0 commit 2d94fd2

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react"
1+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react"
22
import { useDeepCompareEffect, useEvent, useMount } from "react-use"
33
import debounce from "debounce"
44
import { Virtuoso, type VirtuosoHandle } from "react-virtuoso"
@@ -459,25 +459,28 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
459459
}, [isHidden])
460460

461461
useEffect(() => {
462+
const cache = everVisibleMessagesTsRef.current
462463
return () => {
463-
everVisibleMessagesTsRef.current.clear()
464+
cache.clear()
464465
}
465466
}, [])
466467

467468
useEffect(() => {
468469
const cleanupInterval = setInterval(() => {
469470
const cache = everVisibleMessagesTsRef.current
470471
const currentMessageIds = new Set(modifiedMessages.map((m: ClineMessage) => m.ts))
472+
const viewportMessages = visibleMessages.slice(Math.max(0, visibleMessages.length - 100))
473+
const viewportMessageIds = new Set(viewportMessages.map((m: ClineMessage) => m.ts))
471474

472-
cache.forEach((value: boolean, key: number) => {
473-
if (!currentMessageIds.has(key)) {
475+
cache.forEach((_value: boolean, key: number) => {
476+
if (!currentMessageIds.has(key) && !viewportMessageIds.has(key)) {
474477
cache.delete(key)
475478
}
476479
})
477480
}, 60000)
478481

479482
return () => clearInterval(cleanupInterval)
480-
}, [modifiedMessages])
483+
}, [modifiedMessages, visibleMessages])
481484

482485
useEffect(() => {
483486
const prev = prevExpandedRowsRef.current
@@ -966,6 +969,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
966969
const last1 = modifiedMessages.at(-1)
967970
const last2 = modifiedMessages.at(-2)
968971
if (last1?.ask === "resume_task" && last2 === message) {
972+
return true
969973
} else if (message !== last1) {
970974
return false
971975
}
@@ -1450,7 +1454,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
14501454
)
14511455

14521456
const handleSuggestionClickInRow = useCallback(
1453-
(suggestion: SuggestionItem, event?: MouseEvent) => {
1457+
(suggestion: SuggestionItem, event?: React.MouseEvent) => {
14541458
// Mark that user has responded if this is a manual click (not auto-approval)
14551459
if (event) {
14561460
userRespondedRef.current = true

0 commit comments

Comments
 (0)