fix: 迭代计数修复 — stateChange 也携带迭代号,双通道同步
- IPC handler 将 stateChange 事件转发到渲染进程 - useAgentStream 同时监听 streamEvent 和 stateChange 更新迭代 - 切换会话/发消息时重置 currentIteration 为 0 - 添加 console.log 诊断日志
This commit is contained in:
@@ -84,9 +84,13 @@ export function registerAllIPCHandlers(
|
||||
}
|
||||
};
|
||||
|
||||
const onStateChange = (data: { previous: string; current: string }) => {
|
||||
const onStateChange = (data: { previous?: string; current?: string; sessionId?: string; iteration?: number; state?: string }) => {
|
||||
// AGENT 层:记录状态转换
|
||||
log.info(`[AGENT] State: ${data.previous} → ${data.current}`);
|
||||
if (data.previous) log.info(`[AGENT] State: ${data.previous} → ${data.current}`);
|
||||
// 转发到渲染进程(携带迭代号)
|
||||
if (!mainWindow.isDestroyed()) {
|
||||
mainWindow.webContents.send('agent:stateChange', data);
|
||||
}
|
||||
};
|
||||
|
||||
agentLoop.on('streamEvent', onStreamEvent);
|
||||
|
||||
@@ -39,7 +39,8 @@ export function useAgentStream(): void {
|
||||
const store = useAgentStore.getState();
|
||||
|
||||
// 每次收到迭代号时同步更新
|
||||
if (data.iteration != null) {
|
||||
if (data.iteration != null && data.iteration !== store.currentIteration) {
|
||||
console.log(`[useAgentStream] iteration: ${store.currentIteration} → ${data.iteration} (event: ${data.type})`);
|
||||
store.setCurrentIteration(data.iteration);
|
||||
}
|
||||
|
||||
@@ -195,12 +196,18 @@ export function useAgentStream(): void {
|
||||
};
|
||||
}, []);
|
||||
|
||||
// 监听状态变化事件
|
||||
// 监听状态变化事件(含迭代号)
|
||||
useEffect(() => {
|
||||
if (!window.metona?.agent?.onStateChange) return;
|
||||
|
||||
const unsubscribe = window.metona.agent.onStateChange((state: unknown) => {
|
||||
// 状态变化由主进程推送,UI 已通过 streamEvent 处理
|
||||
const data = state as { sessionId?: string; iteration?: number; state?: string; previous?: string; current?: string };
|
||||
if (data.iteration != null) {
|
||||
const store = useAgentStore.getState();
|
||||
if (data.iteration !== store.currentIteration) {
|
||||
store.setCurrentIteration(data.iteration);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return () => unsubscribe();
|
||||
|
||||
Reference in New Issue
Block a user