From 99be7b892bbc344993edd94b5cfa6c1ded5cac51 Mon Sep 17 00:00:00 2001 From: rekram1-node Date: Thu, 20 Aug 2026 15:20:40 +0000 Subject: [PATCH] fix(opencode): narrow subagent error details --- packages/opencode/src/tool/task.ts | 6 +++++- packages/opencode/test/tool/task.test.ts | 7 ++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/opencode/src/tool/task.ts b/packages/opencode/src/tool/task.ts index ac2d9fa0812..74aabd7598a 100644 --- a/packages/opencode/src/tool/task.ts +++ b/packages/opencode/src/tool/task.ts @@ -211,8 +211,12 @@ export const TaskTool = Tool.define( parts, }) if (result.info.role === "assistant" && result.info.error) { + const message = + "message" in result.info.error.data && typeof result.info.error.data.message === "string" + ? result.info.error.data.message + : result.info.error.name return yield* Effect.fail( - new Error(`Subagent failed (task_id: ${nextSession.id}): ${result.info.error.data.message}`), + new Error(`Subagent failed (task_id: ${nextSession.id}): ${message}`), ) } return result.parts.findLast((item) => item.type === "text")?.text ?? "" diff --git a/packages/opencode/test/tool/task.test.ts b/packages/opencode/test/tool/task.test.ts index d82b7aa33ca..967dd046a42 100644 --- a/packages/opencode/test/tool/task.test.ts +++ b/packages/opencode/test/tool/task.test.ts @@ -300,9 +300,10 @@ describe("tool.task", () => { if (Exit.isSuccess(exit)) throw new Error("expected task failure") const child = (yield* sessions.children(chat.id))[0] expect(child).toBeDefined() - expect(Cause.squash(exit.cause).message).toBe( - `Subagent failed (task_id: ${child?.id}): Network connection lost`, - ) + const failure = Cause.squash(exit.cause) + expect(failure).toBeInstanceOf(Error) + if (!(failure instanceof Error)) throw new Error("expected Error defect") + expect(failure.message).toBe(`Subagent failed (task_id: ${child?.id}): Network connection lost`) }), )