feat: 升级至 v0.3.8 — Trace Viewer 叠加修复 + LLM 配置校验改造 + toast 反馈统一
- Trace Viewer 叠加渲染修复 - sendMessage 补 traceSteps/tokenUsage 重置(止血) - TraceStep 加 runId 字段,useAgentStream 按 runId 判定同迭代(稳健改造) - LLM 配置校验中等改造(SettingsModal LLMSettings) - 取消 onChange 实时落库,改为本地 state + Save 按钮统一提交 - 字段级 inline error:Base URL http(s):// 正则、Model 空格校验、contextWindow ≥ 4096 - Provider 切换清空 Model(之前只清 apiKey) - 保存结果改用 metona-toast(不再用 Alert) - toast 反馈机制全面统一(15 处问题修复) - ContextMenu: 原生 confirm/prompt 改 MUI Dialog(新增 useDialogStore + ContextMenuDialogHost) - ContextMenu: 抽 copyWithToast helper 替代散落 7 处静默失败 - OnboardingWizard: 配置保存失败静默改 toast.error - useKeyboardShortcuts: Ctrl+N / Ctrl+Shift+C 失败补 toast - SettingsModal: inheritFiles 失败 toast.warning、handleApply 失败 toast.error - LogsSettings: resultAlert Alert 改 toast(保留 Dialog 确认) - MemoryViewer: 删除失败改 toast(加载/搜索保留 Alert) - TaskList: create/update/delete/无会话改 toast - agent-store: sendMessage/session 失败补 toast(保留 system message) - 删除当前会话同步清空 ChatPanel/DetailPanel - Sidebar confirmDelete + ContextMenu delete 均补 agent-store 重置 - 修复 useSessionStore.removeSession 不触发 agent-store 同步的遗漏
This commit is contained in:
@@ -78,6 +78,11 @@ export interface TraceStep {
|
||||
thought?: string;
|
||||
toolCalls?: ToolCallInfo[];
|
||||
tokenUsage?: { promptTokens: number; completionTokens: number; totalTokens: number };
|
||||
/**
|
||||
* 创建该 step 的 runId,用于跨 run 隔离
|
||||
* 防御场景:abort 重发、并发 run、traceSteps 未清空时仍能正确识别新旧 step 边界
|
||||
*/
|
||||
runId?: string;
|
||||
}
|
||||
|
||||
// ===== Store 状态 =====
|
||||
@@ -242,6 +247,8 @@ export const useAgentStore = create<AgentState>((set, get) => ({
|
||||
content: `错误: 无法创建会话 — ${(err as Error).message}`,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
// 额外弹 toast 作为通知,确保用户感知(system message 仅在聊天流内可见)
|
||||
import('metona-toast').then((mod) => mod.default.error(`无法创建会话:${(err as Error).message}`)).catch(() => {});
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -260,6 +267,10 @@ export const useAgentStore = create<AgentState>((set, get) => ({
|
||||
isStreaming: true,
|
||||
currentRunId: null, // 将在首个 streamEvent 中由 runId 设置
|
||||
currentIteration: 0,
|
||||
// 重置 trace 状态:防止新消息在上一条消息的 trace 上面叠加渲染
|
||||
// 前一条消息的 trace 已在 done 事件中通过 saveTraceData() 持久化到 DB
|
||||
traceSteps: [],
|
||||
tokenUsage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
|
||||
}));
|
||||
|
||||
// 自动更新会话标题为用户第一条消息
|
||||
@@ -317,6 +328,8 @@ export const useAgentStore = create<AgentState>((set, get) => ({
|
||||
content: `错误: 消息发送失败 — ${(err as Error).message}`,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
// 额外弹 toast 作为通知,确保用户感知(system message 仅在聊天流内可见)
|
||||
import('metona-toast').then((mod) => mod.default.error(`消息发送失败:${(err as Error).message}`)).catch(() => {});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user