From ab16b18fdabcf4c5b0ce32a7d2c96eb84ea2ff56 Mon Sep 17 00:00:00 2001 From: yibo Date: Fri, 27 Mar 2026 02:06:42 +0800 Subject: [PATCH] fix: 拦截 Claude CLI 最终的错误 报文 --- packages/acp-core/protocol/ClaudeCliProtocol.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+), 0 deletions(-) diff --git a/packages/acp-core/protocol/ClaudeCliProtocol.js b/packages/acp-core/protocol/ClaudeCliProtocol.js index 4050653..165c807 100644 --- a/packages/acp-core/protocol/ClaudeCliProtocol.js +++ b/packages/acp-core/protocol/ClaudeCliProtocol.js @@ -298,6 +298,22 @@ class ClaudeCliProtocol extends EventEmitter { case 'result': this.sessionId = event.session_id || this.sessionId; + + // 【核心发现】Claude CLI 会在自己内部重试(长达3分钟),最后如果依然失败, + // 会输出 result 事件,但带有 "is_error": true,并且 result 字段放着错误信息。 + if (event.is_error) { + if (this._idleTimer) { clearTimeout(this._idleTimer); this._idleTimer = null; } + const err = new Error(`API 请求失败 (内部重试后放弃): ${event.result || 'Unknown HTTP/RateLimit Error'}`); + console.error(`[ClaudeCliProtocol] 收到错误 result:`, err.message); + if (this._promptReject) { + this._promptReject(err); + this._promptResolve = null; + this._promptReject = null; + } + // 不要再发送正常 result notification + break; + } + this.emit('acp_event', { type: 'notification', method: 'session/result', -- libgit2 0.21.4