fix(session): preserve tagged error messages (#18165)

This commit is contained in:
Kit Langton 2026-03-18 20:36:53 -04:00 committed by GitHub
parent a7ea93528b
commit 84e62fc662
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 14 additions and 2 deletions

View File

@ -956,7 +956,7 @@ export namespace MessageV2 {
{ cause: e }, { cause: e },
).toObject() ).toObject()
case e instanceof Error: 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: default:
try { try {
const parsed = ProviderError.parseStreamError(e) const parsed = ProviderError.parseStreamError(e)

View File

@ -210,7 +210,7 @@ export namespace SessionProcessor {
state: { state: {
status: "error", status: "error",
input: value.input ?? match.state.input, input: value.input ?? match.state.input,
error: (value.error as any).toString(), error: value.error instanceof Error ? value.error.message : String(value.error),
time: { time: {
start: match.state.time.start, start: match.state.time.start,
end: Date.now(), end: Date.now(),

View File

@ -4,6 +4,7 @@ import { MessageV2 } from "../../src/session/message-v2"
import type { Provider } from "../../src/provider/provider" import type { Provider } from "../../src/provider/provider"
import { ModelID, ProviderID } from "../../src/provider/schema" import { ModelID, ProviderID } from "../../src/provider/schema"
import { SessionID, MessageID, PartID } from "../../src/session/schema" import { SessionID, MessageID, PartID } from "../../src/session/schema"
import { Question } from "../../src/question"
const sessionID = SessionID.make("session") const sessionID = SessionID.make("session")
const providerID = ProviderID.make("test") 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",
},
})
})
}) })