From 9f38d35b1e6c0594ee2402c084c0316e5d05261d Mon Sep 17 00:00:00 2001 From: Metona Dev Date: Fri, 24 Apr 2026 12:43:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20agent-engine=20?= =?UTF-8?q?=E4=B8=AD=20abortController=20=E5=9C=A8=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E5=89=8D=E6=9C=AA=E5=AE=9A=E4=B9=89=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=20ReferenceError=20=E7=9A=84=E4=B8=A5=E9=87=8D=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit compressWithLLM() 调用时引用的 abortController 变量在 while 循环内才定义, 但自动压缩逻辑在 while 循环之前执行,导致运行时 ReferenceError。 修复方式:使用 state 中已有的 AbortController 或创建新的实例。 --- src/renderer/services/agent-engine.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/renderer/services/agent-engine.ts b/src/renderer/services/agent-engine.ts index cfaa817..4ad5ba2 100644 --- a/src/renderer/services/agent-engine.ts +++ b/src/renderer/services/agent-engine.ts @@ -500,8 +500,9 @@ export async function runAgentLoop( // 自动压缩:当上下文 token 超过 context window 的 50% 时,调用 LLM 摘要压缩 if (shouldAutoCompress(messages, numCtx)) { logInfo(`自动上下文压缩触发: tokens≈${estimateTokens(messages.map(m => m.content || '').join(''))} > ${Math.floor(numCtx * AUTO_COMPRESS_THRESHOLD)} (50% of ${numCtx})`); + const compressAC = state.get(KEYS.ABORT_CONTROLLER) || new AbortController(); try { - const compressed = await compressWithLLM(messages, api, model, { abortController }); + const compressed = await compressWithLLM(messages, api, model, { abortController: compressAC }); if (compressed.length < messages.length || estimateTokens(compressed.map(m => m.content || '').join('')) < estimateTokens(messages.map(m => m.content || '').join(''))) { messages.length = 0; messages.push(...compressed);