From 37b3c08baa6556ac4d93e7e6e18a23c23b3001db Mon Sep 17 00:00:00 2001 From: Vaayne Date: Mon, 29 Sep 2025 17:14:13 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20improve=20asyn?= =?UTF-8?q?c=20processing=20and=20error=20handling=20in=20ClaudeCodeServic?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agents/services/claudecode/index.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/services/agents/services/claudecode/index.ts b/src/main/services/agents/services/claudecode/index.ts index 61ccc8c945..63523b8288 100644 --- a/src/main/services/agents/services/claudecode/index.ts +++ b/src/main/services/agents/services/claudecode/index.ts @@ -147,8 +147,18 @@ class ClaudeCodeService implements AgentServiceInterface { resume: options.resume }) - // Start async processing - this.processSDKQuery(prompt, options, aiStream, errorChunks) + // Start async processing on the next tick so listeners can subscribe first + setImmediate(() => { + this.processSDKQuery(prompt, options, aiStream, errorChunks).catch((error) => { + logger.error('Unhandled Claude Code stream error', { + error: error instanceof Error ? { name: error.name, message: error.message } : String(error) + }) + aiStream.emit('data', { + type: 'error', + error: error instanceof Error ? error : new Error(String(error)) + }) + }) + }) return aiStream } @@ -251,6 +261,11 @@ class ClaudeCodeService implements AgentServiceInterface { errorChunks.push(errorObj instanceof Error ? errorObj.message : String(errorObj)) const errorMessage = errorChunks.join('\n\n') + logger.error('SDK query failed', { + duration, + error: errorObj instanceof Error ? { name: errorObj.name, message: errorObj.message } : String(errorObj), + stderr: errorChunks + }) // Emit error event stream.emit('data', { type: 'error',