|
1 | | -import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react" |
| 1 | +import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react" |
2 | 2 | import { useDeepCompareEffect, useEvent, useMount } from "react-use" |
3 | 3 | import debounce from "debounce" |
4 | 4 | import { Virtuoso, type VirtuosoHandle } from "react-virtuoso" |
@@ -459,25 +459,28 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro |
459 | 459 | }, [isHidden]) |
460 | 460 |
|
461 | 461 | useEffect(() => { |
| 462 | + const cache = everVisibleMessagesTsRef.current |
462 | 463 | return () => { |
463 | | - everVisibleMessagesTsRef.current.clear() |
| 464 | + cache.clear() |
464 | 465 | } |
465 | 466 | }, []) |
466 | 467 |
|
467 | 468 | useEffect(() => { |
468 | 469 | const cleanupInterval = setInterval(() => { |
469 | 470 | const cache = everVisibleMessagesTsRef.current |
470 | 471 | 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)) |
471 | 474 |
|
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)) { |
474 | 477 | cache.delete(key) |
475 | 478 | } |
476 | 479 | }) |
477 | 480 | }, 60000) |
478 | 481 |
|
479 | 482 | return () => clearInterval(cleanupInterval) |
480 | | - }, [modifiedMessages]) |
| 483 | + }, [modifiedMessages, visibleMessages]) |
481 | 484 |
|
482 | 485 | useEffect(() => { |
483 | 486 | const prev = prevExpandedRowsRef.current |
@@ -966,6 +969,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro |
966 | 969 | const last1 = modifiedMessages.at(-1) |
967 | 970 | const last2 = modifiedMessages.at(-2) |
968 | 971 | if (last1?.ask === "resume_task" && last2 === message) { |
| 972 | + return true |
969 | 973 | } else if (message !== last1) { |
970 | 974 | return false |
971 | 975 | } |
@@ -1450,7 +1454,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro |
1450 | 1454 | ) |
1451 | 1455 |
|
1452 | 1456 | const handleSuggestionClickInRow = useCallback( |
1453 | | - (suggestion: SuggestionItem, event?: MouseEvent) => { |
| 1457 | + (suggestion: SuggestionItem, event?: React.MouseEvent) => { |
1454 | 1458 | // Mark that user has responded if this is a manual click (not auto-approval) |
1455 | 1459 | if (event) { |
1456 | 1460 | userRespondedRef.current = true |
|
0 commit comments