From 7039eae9c76b3a07d2a4961290803c2c6b7ff703 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Sun, 7 Jun 2026 21:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(ai-chat):=20=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=8E=86=E5=8F=B2=E6=A8=A1=E5=BC=8F=E4=BC=9A=E8=AF=9D?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 面板内历史模式按最近更新时间优先展示会话 - 保持与历史侧栏一致的最近会话浏览体验 - 增加静态测试防止排序逻辑回退 --- .../src/components/AIChatPanel.message-boundary.test.tsx | 6 ++++++ frontend/src/components/AIChatPanel.tsx | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/AIChatPanel.message-boundary.test.tsx b/frontend/src/components/AIChatPanel.message-boundary.test.tsx index e557fd0..21e35be 100644 --- a/frontend/src/components/AIChatPanel.message-boundary.test.tsx +++ b/frontend/src/components/AIChatPanel.message-boundary.test.tsx @@ -27,4 +27,10 @@ describe('AIChatPanel message render isolation', () => { expect(source).toContain('以下是当前启用的 Skill'); expect(source).toContain('buildAvailableAIChatTools'); }); + + it('keeps the v2 history mode sorted by the latest updated session first', () => { + expect(source).toContain('const orderedAISessions = useMemo('); + expect(source).toContain('right.updatedAt - left.updatedAt'); + expect(source).toContain('const sessions = orderedAISessions.slice(0, 8);'); + }); }); diff --git a/frontend/src/components/AIChatPanel.tsx b/frontend/src/components/AIChatPanel.tsx index 0bf7554..9f94f9f 100644 --- a/frontend/src/components/AIChatPanel.tsx +++ b/frontend/src/components/AIChatPanel.tsx @@ -310,6 +310,10 @@ export const AIChatPanel: React.FC = ({ 'sendAIChatMessage', activeShortcutPlatform, )); + const orderedAISessions = useMemo( + () => [...aiChatSessions].sort((left, right) => right.updatedAt - left.updatedAt), + [aiChatSessions], + ); const getCurrentJVMPlanContext = useCallback((): JVMAIPlanContext | undefined => { const state = useStore.getState(); @@ -1850,7 +1854,7 @@ SELECT * FROM users WHERE status = 1; }, [contextTableNames, sqlLogs]); const renderPanelHistoryList = () => { - const sessions = aiChatSessions.slice(0, 8); + const sessions = orderedAISessions.slice(0, 8); if (sessions.length === 0) { return
暂无历史会话
; }