From 4b3b581901d3cef67fe73876a8bb405481e0bf03 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 12 Dec 2025 23:05:53 +0900 Subject: [PATCH] fix(background-task): handle SDK response structure compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Handle both SDK response patterns: .data wrapper vs direct array - Add null/empty message checks for robustness - Improve type safety with explicit interface definitions - Prevent errors when messages array is undefined 🤖 GENERATED WITH ASSISTANCE OF [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode) --- src/tools/background-task/tools.ts | 45 ++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/src/tools/background-task/tools.ts b/src/tools/background-task/tools.ts index 7ebd1c6..4769dea 100644 --- a/src/tools/background-task/tools.ts +++ b/src/tools/background-task/tools.ts @@ -87,16 +87,51 @@ async function formatTaskResult(task: BackgroundTask, client: OpencodeClient): P return `Error fetching messages: ${messagesResult.error}` } - const messages = messagesResult.data + // Handle both SDK response structures: direct array or wrapped in .data + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const messages = ((messagesResult as any).data ?? messagesResult) as Array<{ + info?: { role?: string } + parts?: Array<{ type?: string; text?: string }> + }> + + if (!Array.isArray(messages) || messages.length === 0) { + return `Task Result + +Task ID: ${task.id} +Description: ${task.description} +Duration: ${formatDuration(task.startedAt, task.completedAt)} +Session ID: ${task.sessionID} + +--- + +(No messages found)` + } + const assistantMessages = messages.filter( - (m: any) => m.info?.role === "assistant" + (m) => m.info?.role === "assistant" ) + if (assistantMessages.length === 0) { + return `Task Result + +Task ID: ${task.id} +Description: ${task.description} +Duration: ${formatDuration(task.startedAt, task.completedAt)} +Session ID: ${task.sessionID} + +--- + +(No assistant response found)` + } + const lastMessage = assistantMessages[assistantMessages.length - 1] const textParts = lastMessage?.parts?.filter( - (p: any) => p.type === "text" + (p) => p.type === "text" ) ?? [] - const textContent = textParts.map((p: any) => p.text).join("\n") + const textContent = textParts + .map((p) => p.text ?? "") + .filter((text) => text.length > 0) + .join("\n") const duration = formatDuration(task.startedAt, task.completedAt) @@ -109,7 +144,7 @@ Session ID: ${task.sessionID} --- -${textContent || "(No output)"}` +${textContent || "(No text output)"}` } export function createBackgroundOutput(manager: BackgroundManager, client: OpencodeClient) {