fix(ui): 修复 React key 警告和 forwardRef 问题

- ChatMessage/SessionItem 使用 forwardRef 支持 AnimatePresence
- useChat 为 message_received/done 事件生成唯一消息 ID
- sessions API 为历史消息添加 ID 字段
- cli 添加 @types/inquirer 依赖
This commit is contained in:
2025-12-15 10:24:45 +08:00
parent 842cf1a3e8
commit 9e55237dae
6 changed files with 139 additions and 97 deletions
+17 -9
View File
@@ -118,11 +118,11 @@ export function useChat({ sessionId, onError, onSessionNotFound, onSessionUpdate
case 'done':
setState((prev) => {
const newMessage: Message = message.payload || {
id: Date.now().toString(),
const newMessage: Message = {
id: message.payload?.id || `assistant-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
role: 'assistant',
content: prev.streamingContent,
timestamp: new Date().toISOString(),
content: message.payload?.content || prev.streamingContent,
timestamp: message.payload?.timestamp || new Date().toISOString(),
};
return {
...prev,
@@ -134,11 +134,19 @@ export function useChat({ sessionId, onError, onSessionNotFound, onSessionUpdate
break;
case 'message_received':
// 用户消息已确认
setState((prev) => ({
...prev,
messages: [...prev.messages, message.payload],
}));
// 用户消息已确认 - 构建完整的消息对象
setState((prev) => {
const userMessage: Message = {
id: `user-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
role: 'user',
content: message.payload?.content || '',
timestamp: new Date().toISOString(),
};
return {
...prev,
messages: [...prev.messages, userMessage],
};
});
break;
case 'error':