fix(ui): 5 项 E2E 测试 Bug 修复 — Agent 502 / 错误持久化 / 模型标记 / 侧面板 / 记忆页
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

- BUG-01: createFromTemplate 在 saas-relay 模式下 try-catch 跳过本地 Kernel
- BUG-02: upsertActiveConversation 持久化前剥离 error/streaming/optimistic 字段
- BUG-04: ModelSelector 添加 available 标记,ChatArea 追踪失败模型 ID
- BUG-05: VikingPanel 移除 status?.available 门控,不可用时 disabled + 重连按钮
- BUG-06: 侧面板 tooltip 改为"查看产物文件",空状态增加图标和说明
This commit is contained in:
iven
2026-04-16 19:12:21 +08:00
parent 7db9eb29a0
commit a0d1392371
7 changed files with 219 additions and 131 deletions

View File

@@ -326,8 +326,16 @@ export const useConversationStore = create<ConversationState>()(
upsertActiveConversation: (currentMessages: ChatMessage[]) => {
const state = get();
const currentId = state.currentConversationId || null;
// Strip transient fields (error, streaming, optimistic) before persistence
// so old errors don't permanently show "重试" buttons on reload
const cleanMessages = currentMessages.map(m => ({
...m,
error: undefined,
streaming: undefined,
optimistic: undefined,
}));
const conversations = upsertActiveConversation(
[...state.conversations], currentMessages, state.sessionKey,
[...state.conversations], cleanMessages, state.sessionKey,
state.currentConversationId, state.currentAgent,
);
// If this was a new conversation (no prior currentConversationId),