openai-ws-opencode 0.1.34 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,480 @@
1
+ import WebSocket from "ws";
2
+ import { OPENAI_REALTIME_WS_URL, REALTIME_OAUTH_ORIGINATOR } from "../constants.js";
3
+ import { OPENAI_REALTIME_MODELS } from "../models/defaults.js";
4
+ const REALTIME_MODEL_ID = /^gpt-realtime(?:[.-]|$)/i;
5
+ const DEFAULT_HANDSHAKE_TIMEOUT_MS = 10_000;
6
+ const DEFAULT_IDLE_TIMEOUT_MS = 120_000;
7
+ const DEFAULT_INSTRUCTIONS = "You are a helpful assistant.";
8
+ export function isRealtimeModelID(modelID) {
9
+ return typeof modelID === "string" && REALTIME_MODEL_ID.test(modelID);
10
+ }
11
+ export function realtimeWebSocketURL(modelID, base = OPENAI_REALTIME_WS_URL) {
12
+ const url = new URL(base);
13
+ url.searchParams.set("model", modelID);
14
+ return url.toString();
15
+ }
16
+ export function realtimeWebSocketHeaders(auth) {
17
+ if (auth.type === "api") {
18
+ return { authorization: `Bearer ${auth.apiKey}` };
19
+ }
20
+ return {
21
+ authorization: `Bearer ${auth.accessToken}`,
22
+ ...(auth.accountId ? { "chatgpt-account-id": auth.accountId } : {}),
23
+ originator: REALTIME_OAUTH_ORIGINATOR,
24
+ };
25
+ }
26
+ function isRecord(value) {
27
+ return typeof value === "object" && value !== null && !Array.isArray(value);
28
+ }
29
+ function realtimeRole(role) {
30
+ if (role === "assistant")
31
+ return "assistant";
32
+ if (role === "system" || role === "developer")
33
+ return "system";
34
+ return "user";
35
+ }
36
+ function textPartType(role) {
37
+ return role === "assistant" ? "output_text" : "input_text";
38
+ }
39
+ function realtimeMessageContent(content, role) {
40
+ const parts = typeof content === "string" ? [{ type: "text", text: content }] : Array.isArray(content) ? content : [];
41
+ const mapped = [];
42
+ for (const part of parts) {
43
+ if (!isRecord(part))
44
+ continue;
45
+ if (typeof part.text !== "string")
46
+ continue;
47
+ const type = part.type;
48
+ if (type === undefined || type === "text" || type === "input_text" || type === "output_text") {
49
+ mapped.push({ type: textPartType(role), text: part.text });
50
+ }
51
+ }
52
+ return mapped;
53
+ }
54
+ function realtimeItemsFromInput(input) {
55
+ const source = typeof input === "string" ? [{ type: "message", role: "user", content: input }] : Array.isArray(input) ? input : [];
56
+ const items = [];
57
+ for (const raw of source) {
58
+ if (!isRecord(raw))
59
+ continue;
60
+ const type = raw.type ?? ("role" in raw ? "message" : undefined);
61
+ if (type === "message") {
62
+ const role = realtimeRole(raw.role);
63
+ const content = realtimeMessageContent(raw.content, role);
64
+ if (content.length > 0)
65
+ items.push({ type: "message", role, content });
66
+ continue;
67
+ }
68
+ if (type === "function_call") {
69
+ if (typeof raw.call_id !== "string" || typeof raw.name !== "string")
70
+ continue;
71
+ items.push({
72
+ type: "function_call",
73
+ call_id: raw.call_id,
74
+ name: raw.name,
75
+ arguments: typeof raw.arguments === "string" ? raw.arguments : JSON.stringify(raw.arguments ?? {}),
76
+ });
77
+ continue;
78
+ }
79
+ if (type === "function_call_output") {
80
+ if (typeof raw.call_id !== "string")
81
+ continue;
82
+ items.push({
83
+ type: "function_call_output",
84
+ call_id: raw.call_id,
85
+ output: typeof raw.output === "string" ? raw.output : JSON.stringify(raw.output ?? ""),
86
+ });
87
+ }
88
+ }
89
+ return items;
90
+ }
91
+ function realtimeTools(tools) {
92
+ if (!Array.isArray(tools))
93
+ return undefined;
94
+ const mapped = [];
95
+ for (const tool of tools) {
96
+ if (!isRecord(tool))
97
+ continue;
98
+ if (tool.type !== "function" && tool.type !== undefined)
99
+ continue;
100
+ const name = tool.name ?? (isRecord(tool.function) ? tool.function.name : undefined);
101
+ const description = tool.description ?? (isRecord(tool.function) ? tool.function.description : undefined);
102
+ const parameters = tool.parameters ?? (isRecord(tool.function) ? tool.function.parameters : undefined);
103
+ if (typeof name !== "string" || !name)
104
+ continue;
105
+ mapped.push({
106
+ type: "function",
107
+ name,
108
+ description: typeof description === "string" ? description : "",
109
+ parameters: isRecord(parameters) ? parameters : { type: "object", properties: {} },
110
+ });
111
+ }
112
+ return mapped.length > 0 ? mapped : undefined;
113
+ }
114
+ export function realtimePlanFromResponsesBody(body) {
115
+ const session = {
116
+ type: "realtime",
117
+ output_modalities: ["text"],
118
+ instructions: typeof body.instructions === "string" && body.instructions ? body.instructions : DEFAULT_INSTRUCTIONS,
119
+ };
120
+ const tools = realtimeTools(body.tools);
121
+ if (tools)
122
+ session.tools = tools;
123
+ const toolChoice = body.tool_choice;
124
+ if (toolChoice === "auto" || toolChoice === "none" || toolChoice === "required") {
125
+ session.tool_choice = toolChoice;
126
+ }
127
+ else if (isRecord(toolChoice) && toolChoice.type === "function" && typeof toolChoice.name === "string") {
128
+ session.tool_choice = { type: "function", name: toolChoice.name };
129
+ }
130
+ const response = { output_modalities: ["text"] };
131
+ const model = typeof body.model === "string" ? OPENAI_REALTIME_MODELS[body.model] : undefined;
132
+ const reasoning = isRecord(body.reasoning) ? body.reasoning : undefined;
133
+ const effort = reasoning?.effort;
134
+ if (typeof effort === "string" && model?.variants[effort]) {
135
+ response.reasoning = { effort };
136
+ }
137
+ const maxOutput = body.max_output_tokens ?? body.max_tokens;
138
+ if (typeof maxOutput === "number" && Number.isFinite(maxOutput) && maxOutput > 0) {
139
+ response.max_output_tokens = Math.floor(maxOutput);
140
+ }
141
+ return { session, items: realtimeItemsFromInput(body.input), response };
142
+ }
143
+ function mapRealtimeUsage(usage) {
144
+ const value = isRecord(usage) ? usage : {};
145
+ const inputTokens = typeof value.input_tokens === "number" ? value.input_tokens : 0;
146
+ const outputTokens = typeof value.output_tokens === "number" ? value.output_tokens : 0;
147
+ const totalTokens = typeof value.total_tokens === "number" ? value.total_tokens : inputTokens + outputTokens;
148
+ const inputDetails = isRecord(value.input_token_details) ? value.input_token_details : {};
149
+ const outputDetails = isRecord(value.output_token_details) ? value.output_token_details : {};
150
+ return {
151
+ input_tokens: inputTokens,
152
+ output_tokens: outputTokens,
153
+ total_tokens: totalTokens,
154
+ input_tokens_details: {
155
+ cached_tokens: typeof inputDetails.cached_tokens === "number" ? inputDetails.cached_tokens : 0,
156
+ },
157
+ output_tokens_details: {
158
+ reasoning_tokens: typeof outputDetails.reasoning_tokens === "number" ? outputDetails.reasoning_tokens : 0,
159
+ },
160
+ };
161
+ }
162
+ function translateDoneEvent(modelID, event) {
163
+ const response = isRecord(event.response) ? { ...event.response } : {};
164
+ const status = typeof response.status === "string" ? response.status : "completed";
165
+ response.object = "response";
166
+ response.model = modelID;
167
+ response.status = status;
168
+ response.usage = mapRealtimeUsage(response.usage);
169
+ const eventType = status === "completed" ? "response.completed" : status === "failed" ? "response.failed" : "response.incomplete";
170
+ return { eventType, response };
171
+ }
172
+ /**
173
+ * Translate one realtime server event into zero or one Responses-API SSE payloads.
174
+ * Session bookkeeping frames (session.*, conversation.*, rate_limits.*) are dropped;
175
+ * response.* frames pass through nearly verbatim because the realtime event family
176
+ * matches the Responses streaming event family, with response.done reshaped into
177
+ * response.completed/failed/incomplete carrying Responses-shaped usage.
178
+ */
179
+ export function translateRealtimeEvent(modelID, event) {
180
+ const type = event.type;
181
+ if (typeof type !== "string")
182
+ return undefined;
183
+ if (type === "error") {
184
+ const error = isRecord(event.error) ? event.error : {};
185
+ return {
186
+ type: "error",
187
+ code: typeof error.code === "string" ? error.code : "realtime_error",
188
+ message: typeof error.message === "string" ? error.message : "realtime transport error",
189
+ param: typeof error.param === "string" ? error.param : null,
190
+ };
191
+ }
192
+ if (type === "response.done") {
193
+ const { eventType, response } = translateDoneEvent(modelID, event);
194
+ return { type: eventType, response };
195
+ }
196
+ if (type === "response.created") {
197
+ const response = isRecord(event.response) ? { ...event.response } : {};
198
+ response.object = "response";
199
+ response.model = modelID;
200
+ return { type: "response.created", response };
201
+ }
202
+ if (type.startsWith("response."))
203
+ return event;
204
+ return undefined;
205
+ }
206
+ let webSocketConstructor = WebSocket;
207
+ export function supportsRealtimeUnexpectedResponseEvent(constructorName, bunVersion = process.versions.bun) {
208
+ return bunVersion === undefined || constructorName !== "WebSocket";
209
+ }
210
+ export function setRealtimeWebSocketConstructorForTesting(ctor) {
211
+ webSocketConstructor = ctor ?? WebSocket;
212
+ }
213
+ const encoder = new TextEncoder();
214
+ function sseChunk(payload) {
215
+ return encoder.encode(`event: ${String(payload.type)}\ndata: ${JSON.stringify(payload)}\n\n`);
216
+ }
217
+ /**
218
+ * Bridge one Responses-API request body onto a realtime WebSocket session.
219
+ * Streams Responses-shaped SSE back to the caller; when the caller asked for a
220
+ * non-streaming response (body.stream === false) the final response object is
221
+ * aggregated and returned as JSON instead.
222
+ */
223
+ export async function bridgeRealtimeWebSocket(options) {
224
+ const modelID = typeof options.body.model === "string" ? options.body.model : "gpt-realtime";
225
+ const plan = realtimePlanFromResponsesBody(options.body);
226
+ const handshakeTimeoutMs = options.handshakeTimeoutMs ?? DEFAULT_HANDSHAKE_TIMEOUT_MS;
227
+ const idleTimeoutMs = options.idleTimeoutMs ?? DEFAULT_IDLE_TIMEOUT_MS;
228
+ const signal = options.signal;
229
+ if (signal?.aborted)
230
+ throw abortError(signal);
231
+ const connection = await connectRealtime(options.url, options.headers, handshakeTimeoutMs, signal);
232
+ if (connection.kind === "http")
233
+ return connection.response;
234
+ const ws = connection.ws;
235
+ ws.send(JSON.stringify({ type: "session.update", session: plan.session }));
236
+ for (const item of plan.items) {
237
+ ws.send(JSON.stringify({ type: "conversation.item.create", item }));
238
+ }
239
+ ws.send(JSON.stringify({ type: "response.create", response: plan.response }));
240
+ if (options.body.stream === false) {
241
+ return aggregateRealtimeResponse(ws, modelID, idleTimeoutMs, signal);
242
+ }
243
+ return streamRealtimeResponse(ws, modelID, idleTimeoutMs, signal);
244
+ }
245
+ function abortError(signal) {
246
+ const reason = signal?.reason;
247
+ if (reason instanceof Error)
248
+ return reason;
249
+ const error = new Error(typeof reason === "string" ? reason : "Request aborted");
250
+ error.name = "AbortError";
251
+ return error;
252
+ }
253
+ function connectRealtime(url, headers, handshakeTimeoutMs, signal) {
254
+ return new Promise((resolve, reject) => {
255
+ const ws = new webSocketConstructor(url, { headers });
256
+ let settled = false;
257
+ const settle = (fn) => {
258
+ if (settled)
259
+ return;
260
+ settled = true;
261
+ clearTimeout(timer);
262
+ signal?.removeEventListener("abort", onAbort);
263
+ fn();
264
+ };
265
+ const timer = setTimeout(() => {
266
+ settle(() => {
267
+ try {
268
+ ws.terminate();
269
+ }
270
+ catch { }
271
+ reject(new Error("realtime websocket handshake timeout"));
272
+ });
273
+ }, handshakeTimeoutMs);
274
+ const onAbort = () => {
275
+ settle(() => {
276
+ try {
277
+ ws.terminate();
278
+ }
279
+ catch { }
280
+ reject(abortError(signal));
281
+ });
282
+ };
283
+ signal?.addEventListener("abort", onAbort, { once: true });
284
+ ws.once("open", () => settle(() => resolve({ kind: "ws", ws })));
285
+ ws.once("error", (error) => settle(() => reject(error instanceof Error ? error : new Error(String(error)))));
286
+ if (supportsRealtimeUnexpectedResponseEvent(webSocketConstructor.name)) {
287
+ ws.once("unexpected-response", (_request, response) => {
288
+ const chunks = [];
289
+ response.on("data", (chunk) => chunks.push(chunk));
290
+ response.on("end", () => {
291
+ settle(() => {
292
+ try {
293
+ ws.terminate();
294
+ }
295
+ catch { }
296
+ resolve({
297
+ kind: "http",
298
+ response: new Response(Buffer.concat(chunks).toString("utf8") || undefined, {
299
+ status: response.statusCode ?? 500,
300
+ headers: { "content-type": response.headers["content-type"] ?? "text/plain" },
301
+ }),
302
+ });
303
+ });
304
+ });
305
+ });
306
+ }
307
+ });
308
+ }
309
+ function parseEvent(data) {
310
+ try {
311
+ const parsed = JSON.parse(String(data));
312
+ return isRecord(parsed) ? parsed : undefined;
313
+ }
314
+ catch {
315
+ return undefined;
316
+ }
317
+ }
318
+ function closeQuietly(ws) {
319
+ try {
320
+ ws.close(1000, "done");
321
+ }
322
+ catch { }
323
+ // Guarantee teardown even when the server never acknowledges the close.
324
+ const killer = setTimeout(() => {
325
+ try {
326
+ ws.terminate();
327
+ }
328
+ catch { }
329
+ }, 2_000);
330
+ if (typeof killer.unref === "function")
331
+ killer.unref();
332
+ ws.once("close", () => clearTimeout(killer));
333
+ }
334
+ function streamRealtimeResponse(ws, modelID, idleTimeoutMs, signal) {
335
+ let finished = false;
336
+ const stream = new ReadableStream({
337
+ start(controller) {
338
+ let idleTimer;
339
+ const clearIdle = () => {
340
+ if (idleTimer)
341
+ clearTimeout(idleTimer);
342
+ idleTimer = undefined;
343
+ };
344
+ const armIdle = () => {
345
+ clearIdle();
346
+ idleTimer = setTimeout(() => fail(new Error("realtime stream idle timeout")), idleTimeoutMs);
347
+ };
348
+ const finish = () => {
349
+ if (finished)
350
+ return;
351
+ finished = true;
352
+ clearIdle();
353
+ signal?.removeEventListener("abort", onAbort);
354
+ closeQuietly(ws);
355
+ try {
356
+ controller.close();
357
+ }
358
+ catch { }
359
+ };
360
+ const fail = (error) => {
361
+ if (finished)
362
+ return;
363
+ finished = true;
364
+ clearIdle();
365
+ signal?.removeEventListener("abort", onAbort);
366
+ try {
367
+ ws.terminate();
368
+ }
369
+ catch { }
370
+ try {
371
+ controller.error(error);
372
+ }
373
+ catch { }
374
+ };
375
+ const onAbort = () => fail(abortError(signal));
376
+ signal?.addEventListener("abort", onAbort, { once: true });
377
+ ws.on("message", (data) => {
378
+ armIdle();
379
+ const event = parseEvent(data);
380
+ if (!event)
381
+ return;
382
+ const translated = translateRealtimeEvent(modelID, event);
383
+ if (!translated)
384
+ return;
385
+ try {
386
+ controller.enqueue(sseChunk(translated));
387
+ }
388
+ catch {
389
+ fail(new Error("realtime stream consumer rejected chunk"));
390
+ return;
391
+ }
392
+ if (translated.type === "response.completed" || translated.type === "response.failed" || translated.type === "response.incomplete") {
393
+ finish();
394
+ }
395
+ else if (translated.type === "error") {
396
+ finish();
397
+ }
398
+ });
399
+ ws.on("error", (error) => fail(error instanceof Error ? error : new Error(String(error))));
400
+ ws.on("close", () => finish());
401
+ armIdle();
402
+ },
403
+ cancel() {
404
+ finished = true;
405
+ try {
406
+ ws.terminate();
407
+ }
408
+ catch { }
409
+ },
410
+ });
411
+ return new Response(stream, {
412
+ status: 200,
413
+ headers: {
414
+ "content-type": "text/event-stream; charset=utf-8",
415
+ "cache-control": "no-cache",
416
+ },
417
+ });
418
+ }
419
+ async function aggregateRealtimeResponse(ws, modelID, idleTimeoutMs, signal) {
420
+ const finalEvent = await new Promise((resolve, reject) => {
421
+ let idleTimer;
422
+ let settled = false;
423
+ const settle = (fn) => {
424
+ if (settled)
425
+ return;
426
+ settled = true;
427
+ if (idleTimer)
428
+ clearTimeout(idleTimer);
429
+ signal?.removeEventListener("abort", onAbort);
430
+ fn();
431
+ };
432
+ const armIdle = () => {
433
+ if (idleTimer)
434
+ clearTimeout(idleTimer);
435
+ idleTimer = setTimeout(() => settle(() => {
436
+ try {
437
+ ws.terminate();
438
+ }
439
+ catch { }
440
+ reject(new Error("realtime response idle timeout"));
441
+ }), idleTimeoutMs);
442
+ };
443
+ const onAbort = () => settle(() => {
444
+ try {
445
+ ws.terminate();
446
+ }
447
+ catch { }
448
+ reject(abortError(signal));
449
+ });
450
+ signal?.addEventListener("abort", onAbort, { once: true });
451
+ ws.on("message", (data) => {
452
+ armIdle();
453
+ const event = parseEvent(data);
454
+ if (!event)
455
+ return;
456
+ if (event.type === "response.done" || event.type === "error") {
457
+ settle(() => {
458
+ closeQuietly(ws);
459
+ resolve(event);
460
+ });
461
+ }
462
+ });
463
+ ws.on("error", (error) => settle(() => reject(error instanceof Error ? error : new Error(String(error)))));
464
+ ws.on("close", () => settle(() => reject(new Error("realtime websocket closed before response.done"))));
465
+ armIdle();
466
+ });
467
+ if (finalEvent.type === "error") {
468
+ const error = isRecord(finalEvent.error) ? finalEvent.error : {};
469
+ return new Response(JSON.stringify({ error }), {
470
+ status: 500,
471
+ headers: { "content-type": "application/json" },
472
+ });
473
+ }
474
+ const { response } = translateDoneEvent(modelID, finalEvent);
475
+ return new Response(JSON.stringify(response), {
476
+ status: 200,
477
+ headers: { "content-type": "application/json" },
478
+ });
479
+ }
480
+ //# sourceMappingURL=realtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/transport/realtime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openai-ws-opencode",
3
- "version": "0.1.34",
3
+ "version": "0.2.1",
4
4
  "description": "OpenCode plugin for OpenAI Responses WebSocket transport.",
5
5
  "type": "module",
6
6
  "license": "MIT",