Skip to content

Commit cbc4b06

Browse files
authored
fix(openai): preserve websocket upgrade error messages (#29774)
1 parent 824ecf2 commit cbc4b06

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

packages/opencode/src/plugin/openai/ws.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import WebSocket from "ws"
55
import { ProviderError } from "@/provider/error"
6+
import { errorMessage } from "@/util/error"
67

78
export const PROTOCOL_HEADER = "responses_websockets=2026-02-06"
89

@@ -94,10 +95,10 @@ export function connectResponsesWebSocket(options: ConnectResponsesWebSocketOpti
9495
resolve(socket)
9596
}
9697

97-
function onError(error: Error) {
98+
function onError(error: unknown) {
9899
socket.on("error", () => {})
99100
cleanup()
100-
reject(error)
101+
reject(error instanceof Error ? error : new Error(errorMessage(error), { cause: error }))
101102
}
102103

103104
function onClose(code: number, reason: Buffer) {

packages/opencode/test/plugin/openai-ws.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,17 @@ describe("plugin.openai.ws", () => {
3939
).rejects.toThrow("WebSocket connect timed out")
4040
})
4141

42+
test("surfaces websocket upgrade rejection messages", async () => {
43+
await using server = await createRejectingWebSocketServer(() => {})
44+
45+
await expect(
46+
OpenAIWebSocket.connectResponsesWebSocket({
47+
url: server.wsUrl,
48+
headers: {},
49+
}),
50+
).rejects.toThrow("Expected 101 status code")
51+
})
52+
4253
test("enforces websocket send idle timeout", async () => {
4354
const socket = new (class extends EventEmitter {
4455
send(_data: string, _callback: (error?: Error) => void) {}

0 commit comments

Comments
 (0)