fix: 状态指示器重叠与 Trace Viewer 状态丢失

1. StreamingIndicator: 最后一条是 assistant 消息时不显示'正在连接', 避免与 AssistantMessage 的'正在思考'重叠

2. useAgentStream: 跳过 INIT(iteration=0) 的 trace step, 引擎初始化无实际内容不应展示

3. useAgentStream: 状态转换追加到 states 数组而非覆盖 state 字段, 保留完整 THINKING->EXECUTING->OBSERVING 进度

4. TraceStep: header 显示状态进度链(如'思考 -> 执行 -> 观察')而非仅最终状态

5. agent-store: 旧数据兼容, 加载时为缺少 states 的 trace step 补全
This commit is contained in:
thzxx
2026-07-07 22:02:20 +08:00
parent 8718f5ac6f
commit 9b6bdaea32
4 changed files with 44 additions and 28 deletions
+32 -20
View File
@@ -265,29 +265,41 @@ export function useAgentStream(): void {
}
}
// --- Trace 步骤管理(每轮迭代一个步骤,状态转换时更新而非新建---
// --- Trace 步骤管理(每轮迭代一个步骤,状态转换时追加到 states 数组---
if (data.state && data.iteration != null) {
const traceSteps = store.traceSteps;
const lastStep = traceSteps[traceSteps.length - 1];
// 判断是否需要创建新步骤:同一迭代的首次状态(INIT/THINKING)创建新步骤
// 后续状态转换(EXECUTING/OBSERVING等)只更新当前步骤的 state 字段
const isSameIteration = lastStep && lastStep.iteration === data.iteration;
if (isSameIteration) {
// 同一迭代内的状态转换 → 更新当前步骤状态
store.updateLastTraceStep({ state: data.state });
// 跳过 INIT (iteration=0):引擎初始化阶段无实际内容,不创建 trace step
if (data.state === 'INIT' && data.iteration === 0) {
// 仍需更新 Agent 状态映射
} else {
// 新迭代 → 标记上一步完成,创建新步骤
if (lastStep && !lastStep.completedAt) {
store.updateLastTraceStep({ completedAt: Date.now() });
const traceSteps = store.traceSteps;
const lastStep = traceSteps[traceSteps.length - 1];
// 判断是否需要创建新步骤:同一迭代的首次状态创建新步骤
// 后续状态转换(EXECUTING/OBSERVING等)追加到 states 数组
const isSameIteration = lastStep && lastStep.iteration === data.iteration;
if (isSameIteration) {
// 同一迭代内的状态转换 → 追加状态到 states 数组,更新当前 state
const currentStates = lastStep.states ?? [lastStep.state];
if (currentStates[currentStates.length - 1] !== data.state) {
store.updateLastTraceStep({
state: data.state,
states: [...currentStates, data.state],
});
}
} else {
// 新迭代 → 标记上一步完成,创建新步骤
if (lastStep && !lastStep.completedAt) {
store.updateLastTraceStep({ completedAt: Date.now() });
}
store.addTraceStep({
id: `trace_${data.iteration}_${data.state}_${Date.now()}`,
iteration: data.iteration,
state: data.state,
states: [data.state],
startedAt: Date.now(),
});
}
store.addTraceStep({
id: `trace_${data.iteration}_${data.state}_${Date.now()}`,
iteration: data.iteration,
state: data.state,
startedAt: Date.now(),
});
}
// --- Agent 状态映射 ---