refactor: message list optimizations and single messageLimit setting (#409)

* feat: message list refactoring and optimizations

* refactor: collapse 3 memory-limit settings into single messageLimit

- Replace memoryLimitHistorical/Viewport/ActiveSession with one `messageLimit` (default 200)
- Background trim derived automatically (limit * 0.6), not user-facing
- Fix stale historyLimit overriding current messageLimit on session reload
- Remove streaming cap that reduced fetch to VIEWPORT_MESSAGES during active streams
- Deduplicate detectTurns() call in TurnGroupingContext (reuse staticValue.turns)
- Zustand v3 migration: collapse old fields, preserve user-customized values
- Server: sanitize single messageLimit field (10-500)
This commit is contained in:
Bohdan Triapitsyn
2026-02-12 20:36:02 +02:00
committed by GitHub
parent 3bf0843ebb
commit 252d4bd5ab
13 changed files with 627 additions and 330 deletions
@@ -25,6 +25,8 @@ interface MessageListProps {
hasMoreAbove: boolean;
isLoadingOlder: boolean;
onLoadOlder: () => void;
hasRenderEarlier?: boolean;
onRenderEarlier?: () => void;
scrollToBottom?: (options?: { instant?: boolean; force?: boolean }) => void;
scrollRef?: React.RefObject<HTMLDivElement | null>;
}
@@ -198,6 +200,8 @@ const MessageList: React.FC<MessageListProps> = ({
hasMoreAbove,
isLoadingOlder,
onLoadOlder,
hasRenderEarlier,
onRenderEarlier,
scrollToBottom,
}) => {
React.useEffect(() => {
@@ -256,6 +260,18 @@ const MessageList: React.FC<MessageListProps> = ({
return (
<TurnGroupingProvider messages={displayMessages}>
<div>
{hasRenderEarlier && (
<div className="flex justify-center py-3">
<button
type="button"
onClick={onRenderEarlier}
className="text-xs uppercase tracking-wide text-muted-foreground/80 hover:text-foreground"
>
Render earlier messages
</button>
</div>
)}
{hasMoreAbove && (
<div className="flex justify-center py-3">
{isLoadingOlder ? (