fix: 工作流完整性和协调性修复
修复 6 个问题: 1. 新一轮对话清理上轮工具卡片和终端输出(避免越积越多) 2. 中止 Agent Loop 时保留已执行的工具记录(不再丢失) 3. 切换历史会话时清理工作空间状态 4. handleRetry 保存 think 内容(之前丢失) 5. 中止流程统一:agent-engine 抛出 AbortError 由消费方处理(消除重复消息风险) 6. 导出 clearToolCardsExternal/clearTerminalExternal 供外部调用
This commit is contained in:
@@ -518,8 +518,10 @@ export async function runAgentLoop(
|
||||
// 检查是否已中止
|
||||
if (state.get<AbortController | null>(KEYS.ABORT_CONTROLLER)?.signal.aborted) {
|
||||
logInfo('ReAct Agent Loop 已中止');
|
||||
callbacks.onDone(content, allToolRecords.length > 0 ? allToolRecords : undefined, makeStats());
|
||||
return;
|
||||
if (allToolRecords.length > 0) {
|
||||
state.set('_abortToolRecords', allToolRecords);
|
||||
}
|
||||
throw new DOMException('Aborted', 'AbortError');
|
||||
}
|
||||
|
||||
logAgentLoop(loopCount, maxLoops);
|
||||
@@ -591,11 +593,11 @@ export async function runAgentLoop(
|
||||
} catch (err) {
|
||||
if (abortController.signal.aborted) {
|
||||
logInfo('流式调用已中止');
|
||||
if (content || thinking) {
|
||||
messages.push({ role: 'assistant', content, ...(thinking && { thinking }) });
|
||||
// 保存工具记录到 state,供消费方的 catch 处理中止消息
|
||||
if (allToolRecords.length > 0) {
|
||||
state.set('_abortToolRecords', allToolRecords);
|
||||
}
|
||||
callbacks.onDone(content, allToolRecords.length > 0 ? allToolRecords : undefined, makeStats());
|
||||
return;
|
||||
throw err; // 抛出 AbortError,由消费方统一处理
|
||||
}
|
||||
logError('流式调用异常', (err as Error).message);
|
||||
// 清理预算警告临时消息
|
||||
|
||||
Reference in New Issue
Block a user