缺陷 / 高 / LLM 适配器
electron/harness/adapters/base-adapter.ts
getFetchSignal 创建 AbortSignal + setTimeout 实现超时控制:
private getFetchSignal(timeoutMs: number): AbortSignal { const controller = new AbortController(); setTimeout(() => controller.abort(), timeoutMs); return controller.signal; }
问题:
private async fetchWithTimeout(url: string, init: RequestInit, timeoutMs: number) { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { // 合并外部 signal 与超时 signal const externalSignal = init.signal; if (externalSignal) { if (externalSignal.aborted) controller.abort(); else externalSignal.addEventListener('abort', () => controller.abort()); } return await fetch(url, { ...init, signal: controller.signal }); } finally { clearTimeout(timer); // 关键:清理 timer } }
确保所有调用 getFetchSignal 的地方都最终清理 timer。
文件: electron/harness/adapters/base-adapter.ts + 4 个 Adapter
修复: 新增 fetchWithTimeout 方法(setTimeout + finally clearTimeout),确保请求完成后立即清理 timer。修改 deepseek/agnes/mimo/ollama 共 8 处 fetch + getFetchSignal 调用改用 fetchWithTimeout。
fetchWithTimeout
setTimeout
finally clearTimeout
fetch + getFetchSignal
验证: tsc --noEmit 类型检查通过。
tsc --noEmit
No dependencies set.
The note is not visible to the blocked user.
问题类型
缺陷 / 高 / LLM 适配器
文件位置
electron/harness/adapters/base-adapter.ts问题描述
getFetchSignal 创建 AbortSignal + setTimeout 实现超时控制:
问题:
影响
建议修复
确保所有调用 getFetchSignal 的地方都最终清理 timer。
修复说明
文件:
electron/harness/adapters/base-adapter.ts+ 4 个 Adapter修复: 新增
fetchWithTimeout方法(setTimeout+finally clearTimeout),确保请求完成后立即清理 timer。修改 deepseek/agnes/mimo/ollama 共 8 处fetch + getFetchSignal调用改用fetchWithTimeout。验证:
tsc --noEmit类型检查通过。