diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 8e4babd61..41e2d4efc 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -956,7 +956,7 @@ export namespace MessageV2 { { cause: e }, ).toObject() case e instanceof Error: - return new NamedError.Unknown({ message: e.toString() }, { cause: e }).toObject() + return new NamedError.Unknown({ message: e instanceof Error ? e.message : String(e) }, { cause: e }).toObject() default: try { const parsed = ProviderError.parseStreamError(e) diff --git a/packages/opencode/src/session/processor.ts b/packages/opencode/src/session/processor.ts index 158b83865..8200dea75 100644 --- a/packages/opencode/src/session/processor.ts +++ b/packages/opencode/src/session/processor.ts @@ -210,7 +210,7 @@ export namespace SessionProcessor { state: { status: "error", input: value.input ?? match.state.input, - error: (value.error as any).toString(), + error: value.error instanceof Error ? value.error.message : String(value.error), time: { start: match.state.time.start, end: Date.now(), diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index 86c9254f1..0d5b89730 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -4,6 +4,7 @@ import { MessageV2 } from "../../src/session/message-v2" import type { Provider } from "../../src/provider/provider" import { ModelID, ProviderID } from "../../src/provider/schema" import { SessionID, MessageID, PartID } from "../../src/session/schema" +import { Question } from "../../src/question" const sessionID = SessionID.make("session") const providerID = ProviderID.make("test") @@ -915,4 +916,15 @@ describe("session.message-v2.fromError", () => { }, }) }) + + test("serializes tagged errors with their message", () => { + const result = MessageV2.fromError(new Question.RejectedError(), { providerID }) + + expect(result).toStrictEqual({ + name: "UnknownError", + data: { + message: "The user dismissed this question", + }, + }) + }) })