openai-ws-opencode 0.1.4 → 0.1.6

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.
package/README.md CHANGED
@@ -101,7 +101,7 @@ Then point OpenCode at the packed tarball through the plugin array:
101
101
 
102
102
  ```jsonc
103
103
  {
104
- "plugin": ["openai-ws-opencode@file:/absolute/path/openai-ws-opencode-0.1.4.tgz"]
104
+ "plugin": ["openai-ws-opencode@file:/absolute/path/openai-ws-opencode-0.1.5.tgz"]
105
105
  }
106
106
  ```
107
107
 
package/bin/setup.js CHANGED
@@ -166,20 +166,28 @@ function applyJsonPatch(text, jsonPath, value) {
166
166
  }));
167
167
  }
168
168
  function pluginPackageName(specifier) {
169
- if (specifier.startsWith("file://"))
170
- return path.basename(new URL(specifier).pathname).replace(/\.[cm]?[jt]s$/, "");
169
+ if (specifier.startsWith("file:")) {
170
+ const filePath = specifier.startsWith("file://") ? new URL(specifier).pathname : specifier.slice("file:".length);
171
+ const base = path.basename(filePath);
172
+ if (base === PACKAGE_NAME || base.startsWith(`${PACKAGE_NAME}-`) || base.startsWith(`${PACKAGE_NAME}@`))
173
+ return PACKAGE_NAME;
174
+ return base.replace(/(?:\.tgz|\.[cm]?[jt]s)$/, "");
175
+ }
171
176
  const lastAt = specifier.lastIndexOf("@");
172
177
  return lastAt > 0 ? specifier.slice(0, lastAt) : specifier;
173
178
  }
174
- function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC) {
179
+ function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC, replacePluginSpec = false) {
175
180
  let text = input.trim() ? input : "{}";
176
181
  const config = parse(text) ?? {};
177
182
  if (!config.$schema)
178
183
  text = applyJsonPatch(text, ["$schema"], SCHEMA);
179
184
  const current = (parse(text) ?? {}).plugin;
180
185
  const plugins = Array.isArray(current) ? [...current] : [];
181
- if (!plugins.some((plugin) => typeof plugin === "string" && pluginPackageName(plugin) === PACKAGE_NAME)) {
186
+ const existingPluginIndex = plugins.findIndex((plugin) => typeof plugin === "string" && pluginPackageName(plugin) === PACKAGE_NAME);
187
+ if (existingPluginIndex === -1) {
182
188
  plugins.push(pluginSpec);
189
+ } else if (replacePluginSpec) {
190
+ plugins[existingPluginIndex] = pluginSpec;
183
191
  }
184
192
  text = applyJsonPatch(text, ["plugin"], plugins);
185
193
  const next = parse(text) ?? {};
@@ -192,6 +200,123 @@ function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC) {
192
200
  `
193
201
  }));
194
202
  }
203
+ function isNotFound(error) {
204
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
205
+ }
206
+ function cacheHomePath(cacheHome = process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), ".cache")) {
207
+ return cacheHome;
208
+ }
209
+ function openCodeLatestCachePath(cacheHome) {
210
+ return path.join(cacheHomePath(cacheHome), "opencode", "packages", `${PACKAGE_NAME}@latest`);
211
+ }
212
+ async function pathExists(file) {
213
+ try {
214
+ await fs.access(file);
215
+ return true;
216
+ } catch (error) {
217
+ if (isNotFound(error))
218
+ return false;
219
+ throw error;
220
+ }
221
+ }
222
+ async function readPackageVersion(packageJsonPath) {
223
+ try {
224
+ const text = await fs.readFile(packageJsonPath, "utf8");
225
+ const parsed = JSON.parse(text);
226
+ return typeof parsed.version === "string" ? parsed.version : undefined;
227
+ } catch (error) {
228
+ if (isNotFound(error))
229
+ return;
230
+ throw error;
231
+ }
232
+ }
233
+ async function setupPackageVersion() {
234
+ const packageJsonPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "package.json");
235
+ const version = await readPackageVersion(packageJsonPath);
236
+ if (!version)
237
+ throw new Error(`Unable to read setup package version from ${packageJsonPath}`);
238
+ return version;
239
+ }
240
+ function semverParts(version) {
241
+ const match = /^(\d+)\.(\d+)\.(\d+)/.exec(version);
242
+ if (!match)
243
+ return;
244
+ return [Number(match[1]), Number(match[2]), Number(match[3])];
245
+ }
246
+ function compareSemver(left, right) {
247
+ const leftParts = semverParts(left);
248
+ const rightParts = semverParts(right);
249
+ if (!leftParts || !rightParts)
250
+ return 0;
251
+ for (let index = 0;index < leftParts.length; index++) {
252
+ if (leftParts[index] !== rightParts[index])
253
+ return leftParts[index] < rightParts[index] ? -1 : 1;
254
+ }
255
+ return 0;
256
+ }
257
+ var SOURCE_EXTENSIONS = new Set([".cjs", ".js", ".mjs", ".ts"]);
258
+ var BAD_OAUTH_PORT = /\bOAUTH_PORT\b\s*[:=]\s*1456\b/;
259
+ var BAD_CODEX_ORIGINATOR = /\bCODEX_ORIGINATOR\b\s*[:=]\s*["']codex_cli_rs["']/;
260
+ async function hasKnownBadConstants(packageRoot) {
261
+ const directories = [packageRoot];
262
+ let checkedFiles = 0;
263
+ while (directories.length > 0 && checkedFiles < 500) {
264
+ const current = directories.pop();
265
+ let entries;
266
+ try {
267
+ entries = await fs.readdir(current, { withFileTypes: true });
268
+ } catch (error) {
269
+ if (isNotFound(error))
270
+ continue;
271
+ throw error;
272
+ }
273
+ for (const entry of entries) {
274
+ const entryPath = path.join(current, entry.name);
275
+ if (entry.isDirectory()) {
276
+ if (entry.name !== "node_modules" && entry.name !== ".git")
277
+ directories.push(entryPath);
278
+ continue;
279
+ }
280
+ if (!entry.isFile() || !SOURCE_EXTENSIONS.has(path.extname(entry.name)))
281
+ continue;
282
+ checkedFiles += 1;
283
+ const source = await fs.readFile(entryPath, "utf8");
284
+ if (BAD_OAUTH_PORT.test(source) || BAD_CODEX_ORIGINATOR.test(source))
285
+ return true;
286
+ if (checkedFiles >= 500)
287
+ break;
288
+ }
289
+ }
290
+ return false;
291
+ }
292
+ function timestampForPath(date) {
293
+ return date.toISOString().replace(/[:.]/g, "-");
294
+ }
295
+ async function staleDestination(cachePath, now) {
296
+ const base = `${cachePath}.stale-${timestampForPath(now)}`;
297
+ let candidate = base;
298
+ let suffix = 1;
299
+ while (await pathExists(candidate)) {
300
+ candidate = `${base}-${suffix}`;
301
+ suffix += 1;
302
+ }
303
+ return candidate;
304
+ }
305
+ async function repairStaleOpenCodeLatestCache(options = {}) {
306
+ const cachePath = openCodeLatestCachePath(options.cacheHome);
307
+ if (!await pathExists(cachePath))
308
+ return { cachePath, repaired: false };
309
+ const packageRoot = path.join(cachePath, "node_modules", PACKAGE_NAME);
310
+ const cachedVersion = await readPackageVersion(path.join(packageRoot, "package.json"));
311
+ const currentVersion = options.packageVersion ?? await setupPackageVersion();
312
+ const staleVersion = cachedVersion ? compareSemver(cachedVersion, currentVersion) < 0 : false;
313
+ const staleConstants = await hasKnownBadConstants(packageRoot);
314
+ if (!staleVersion && !staleConstants)
315
+ return { cachePath, repaired: false };
316
+ const movedTo = await staleDestination(cachePath, options.now?.() ?? new Date);
317
+ await fs.rename(cachePath, movedTo);
318
+ return { cachePath, movedTo, repaired: true };
319
+ }
195
320
  async function setupOpenCodeConfig(options = {}) {
196
321
  const file = targetPath(options);
197
322
  let existing = "";
@@ -201,11 +326,19 @@ async function setupOpenCodeConfig(options = {}) {
201
326
  if (error?.code !== "ENOENT")
202
327
  throw error;
203
328
  }
204
- const updated = patchConfigText(existing, options.pluginSpec ?? DEFAULT_PLUGIN_SPEC);
329
+ const updated = patchConfigText(existing, options.pluginSpec ?? DEFAULT_PLUGIN_SPEC, Boolean(options.pluginSpec));
205
330
  await fs.mkdir(path.dirname(file), { recursive: true });
206
331
  await fs.writeFile(file, updated.endsWith(`
207
332
  `) ? updated : `${updated}
208
333
  `, "utf8");
334
+ if (options.cacheRepair !== false) {
335
+ try {
336
+ await repairStaleOpenCodeLatestCache();
337
+ } catch (error) {
338
+ const message = error instanceof Error ? error.message : String(error);
339
+ console.warn(`Warning: could not repair OpenCode cache at ${openCodeLatestCachePath()}. Remove it manually if OpenCode keeps loading stale plugin code. ${message}`);
340
+ }
341
+ }
209
342
  return file;
210
343
  }
211
344
  function parseArgs(argv) {
@@ -220,8 +353,10 @@ function parseArgs(argv) {
220
353
  options.configPath = argv[++index];
221
354
  else if (arg === "--plugin")
222
355
  options.pluginSpec = argv[++index];
356
+ else if (arg === "--no-cache-repair")
357
+ options.cacheRepair = false;
223
358
  else if (arg === "--help" || arg === "-h") {
224
- console.log("Usage: openai-ws-opencode setup [--global|--project] [--path <opencode.json>] [--plugin <specifier>]");
359
+ console.log("Usage: openai-ws-opencode setup [--global|--project] [--path <opencode.json>] [--plugin <specifier>] [--no-cache-repair]");
225
360
  process.exit(0);
226
361
  }
227
362
  }
@@ -247,6 +382,8 @@ if (isDirectExecution()) {
247
382
  }
248
383
  export {
249
384
  setupOpenCodeConfig,
385
+ repairStaleOpenCodeLatestCache,
250
386
  patchConfigText,
387
+ parseArgs,
251
388
  isDirectExecution
252
389
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAkBpD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,gBAAqB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAyDV"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAkBpD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,gBAAqB,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,QAAQ,CAsDV"}
@@ -1,5 +1,5 @@
1
1
  import { prepareBody } from "./body.js";
2
- import { acquireConnection, closeConnections } from "./pool.js";
2
+ import { acquireConnection, closeConnections, sendPending } from "./pool.js";
3
3
  function abortPending(conn, error) {
4
4
  const pending = conn.pending;
5
5
  if (!pending || pending.done)
@@ -52,10 +52,7 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
52
52
  }
53
53
  if (signal)
54
54
  signal.addEventListener("abort", onAbort, { once: true });
55
- if (conn.ws?.readyState === 1) {
56
- conn.ws.send(JSON.stringify({ type: "response.create", ...wsBody }));
57
- conn.pending.sent = true;
58
- }
55
+ sendPending(conn);
59
56
  },
60
57
  cancel() {
61
58
  if (finalized)
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"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"}
@@ -35,9 +35,15 @@ export interface PooledConnection {
35
35
  lastStablePrefixHash?: string;
36
36
  generation: number;
37
37
  reconnectAttempts: number;
38
+ lastActivityAt: number;
39
+ lastCloseCode?: number;
40
+ lastCloseReason?: string;
41
+ lastErrorMessage?: string;
38
42
  idleTimer: ReturnType<typeof setTimeout> | null;
39
43
  connectTimer: ReturnType<typeof setTimeout> | null;
40
44
  retryTimer: ReturnType<typeof setTimeout> | null;
45
+ heartbeatTimer: ReturnType<typeof setTimeout> | null;
46
+ pongTimer: ReturnType<typeof setTimeout> | null;
41
47
  detach: (() => void) | null;
42
48
  }
43
49
  export declare const connectionPool: PooledConnection[];
@@ -47,6 +53,7 @@ export declare const readyState: {
47
53
  readonly CLOSING: 2;
48
54
  readonly CLOSED: 3;
49
55
  };
56
+ export declare function sendPending(conn: PooledConnection): boolean;
50
57
  export declare function acquireConnection(wsUrl: string, headers: Record<string, string>, context: TransportContext): PooledConnection;
51
58
  export declare function closeConnections(predicate?: (conn: PooledConnection) => boolean): void;
52
59
  export declare function resetPoolForTesting(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/transport/pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/transport/pool.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,9 @@ const DEFAULT_CONNECT_TIMEOUT_MS = 10_000;
4
4
  const MAX_RECONNECT_ATTEMPTS = 3;
5
5
  const RECONNECT_DELAY_MS = 100;
6
6
  const IDLE_EVICT_MS = 120_000;
7
+ const STALE_REUSE_MS = 60_000;
8
+ const HEARTBEAT_INTERVAL_MS = 30_000;
9
+ const PONG_TIMEOUT_MS = 10_000;
7
10
  let WebSocketImpl = WebSocket;
8
11
  export const connectionPool = [];
9
12
  export const readyState = {
@@ -36,6 +39,19 @@ function clearTimer(timer) {
36
39
  if (timer)
37
40
  clearTimeout(timer);
38
41
  }
42
+ function unrefTimer(timer) {
43
+ if (typeof timer === "object" && timer !== null && "unref" in timer) {
44
+ ;
45
+ timer.unref?.();
46
+ }
47
+ return timer;
48
+ }
49
+ function clearHeartbeat(conn) {
50
+ clearTimer(conn.heartbeatTimer);
51
+ clearTimer(conn.pongTimer);
52
+ conn.heartbeatTimer = null;
53
+ conn.pongTimer = null;
54
+ }
39
55
  function detach(conn) {
40
56
  if (conn.detach) {
41
57
  conn.detach();
@@ -44,6 +60,7 @@ function detach(conn) {
44
60
  clearTimer(conn.connectTimer);
45
61
  clearTimer(conn.idleTimer);
46
62
  clearTimer(conn.retryTimer);
63
+ clearHeartbeat(conn);
47
64
  conn.connectTimer = null;
48
65
  conn.idleTimer = null;
49
66
  conn.retryTimer = null;
@@ -54,6 +71,49 @@ function remove(conn) {
54
71
  connectionPool.splice(index, 1);
55
72
  detach(conn);
56
73
  }
74
+ function scheduleHeartbeat(conn) {
75
+ clearHeartbeat(conn);
76
+ if (conn.busy || conn.pending)
77
+ return;
78
+ const ws = conn.ws;
79
+ if (!ws || ws.readyState !== readyState.OPEN)
80
+ return;
81
+ if (typeof ws.ping !== "function")
82
+ return;
83
+ const generation = conn.generation;
84
+ conn.heartbeatTimer = unrefTimer(setTimeout(() => {
85
+ conn.heartbeatTimer = null;
86
+ if (generation !== conn.generation || conn.busy || !conn.ws)
87
+ return;
88
+ if (conn.ws.readyState !== readyState.OPEN)
89
+ return;
90
+ try {
91
+ conn.ws.ping?.();
92
+ }
93
+ catch {
94
+ remove(conn);
95
+ try {
96
+ conn.ws?.terminate?.();
97
+ }
98
+ catch { }
99
+ return;
100
+ }
101
+ conn.pongTimer = unrefTimer(setTimeout(() => {
102
+ conn.pongTimer = null;
103
+ if (generation !== conn.generation || conn.busy)
104
+ return;
105
+ remove(conn);
106
+ try {
107
+ conn.ws?.terminate?.();
108
+ }
109
+ catch { }
110
+ try {
111
+ conn.ws?.close(1001, "pong timeout");
112
+ }
113
+ catch { }
114
+ }, PONG_TIMEOUT_MS));
115
+ }, HEARTBEAT_INTERVAL_MS));
116
+ }
57
117
  function release(conn) {
58
118
  conn.lastSessionID = conn.activeSessionID;
59
119
  conn.lastAgent = conn.activeAgent;
@@ -62,15 +122,25 @@ function release(conn) {
62
122
  conn.activeAgent = undefined;
63
123
  conn.busy = false;
64
124
  conn.reconnectAttempts = 0;
65
- const timer = setTimeout(() => {
125
+ conn.idleTimer = unrefTimer(setTimeout(() => {
126
+ conn.idleTimer = null;
66
127
  if (!conn.busy) {
67
128
  remove(conn);
68
- conn.ws?.close(1000, "idle eviction");
129
+ try {
130
+ conn.ws?.close(1000, "idle eviction");
131
+ }
132
+ catch { }
69
133
  }
70
- }, IDLE_EVICT_MS);
71
- if (typeof timer === "object" && "unref" in timer)
72
- timer.unref();
73
- conn.idleTimer = timer;
134
+ }, IDLE_EVICT_MS));
135
+ scheduleHeartbeat(conn);
136
+ }
137
+ function formatFailureMessage(conn, reason) {
138
+ const code = conn.lastCloseCode !== undefined ? conn.lastCloseCode : "unknown";
139
+ const closeReason = JSON.stringify(conn.lastCloseReason ?? "");
140
+ const lastError = conn.lastErrorMessage ? JSON.stringify(conn.lastErrorMessage) : "none";
141
+ return (`WebSocket closed before response completed; cannot retry because ${reason}; ` +
142
+ `reconnectAttempts=${conn.reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS}; ` +
143
+ `closeCode=${code}; closeReason=${closeReason}; lastError=${lastError}`);
74
144
  }
75
145
  function fail(conn, error, closeSocket) {
76
146
  const pending = conn.pending;
@@ -89,6 +159,9 @@ function fail(conn, error, closeSocket) {
89
159
  remove(conn);
90
160
  try {
91
161
  conn.ws?.terminate?.();
162
+ }
163
+ catch { }
164
+ try {
92
165
  conn.ws?.close(1000, "aborted");
93
166
  }
94
167
  catch { }
@@ -118,15 +191,53 @@ function enqueueSSE(conn, frame) {
118
191
  return;
119
192
  const eventType = typeof frame.type === "string" ? frame.type : "message";
120
193
  const encoded = new TextEncoder().encode(`event: ${eventType}\ndata: ${JSON.stringify(frame)}\n\n`);
194
+ try {
195
+ pending.controller.enqueue(encoded);
196
+ }
197
+ catch {
198
+ return;
199
+ }
121
200
  pending.forwarded = true;
122
- pending.controller.enqueue(encoded);
123
201
  if (["response.completed", "response.failed", "response.incomplete", "error"].includes(eventType)) {
124
202
  pending.done = true;
125
- pending.controller.close();
203
+ try {
204
+ pending.controller.close();
205
+ }
206
+ catch { }
126
207
  release(conn);
127
208
  }
128
209
  }
210
+ export function sendPending(conn) {
211
+ const pending = conn.pending;
212
+ if (!pending || pending.done || pending.sent)
213
+ return false;
214
+ const ws = conn.ws;
215
+ if (!ws || ws.readyState !== readyState.OPEN)
216
+ return false;
217
+ try {
218
+ ws.send(JSON.stringify({ type: "response.create", ...pending.body }));
219
+ }
220
+ catch (error) {
221
+ conn.lastErrorMessage = error instanceof Error ? error.message : String(error);
222
+ queueMicrotask(() => handleSocketLoss(conn));
223
+ return false;
224
+ }
225
+ pending.sent = true;
226
+ return true;
227
+ }
228
+ function normalizeCloseReason(reason) {
229
+ if (reason === undefined || reason === null)
230
+ return undefined;
231
+ if (typeof reason === "string")
232
+ return reason;
233
+ if (Buffer.isBuffer(reason))
234
+ return reason.toString("utf8");
235
+ if (reason instanceof Uint8Array)
236
+ return Buffer.from(reason).toString("utf8");
237
+ return String(reason);
238
+ }
129
239
  function connect(conn) {
240
+ clearHeartbeat(conn);
130
241
  const ws = new WebSocketImpl(conn.wsUrl, { headers: conn.headers });
131
242
  const generation = ++conn.generation;
132
243
  conn.ws = ws;
@@ -138,42 +249,57 @@ function connect(conn) {
138
249
  return;
139
250
  fail(conn, new Error("WebSocket connection timed out"), true);
140
251
  }, DEFAULT_CONNECT_TIMEOUT_MS);
141
- if (typeof connectTimer === "object" && "unref" in connectTimer)
142
- connectTimer.unref();
143
- conn.connectTimer = connectTimer;
252
+ conn.connectTimer = unrefTimer(connectTimer);
144
253
  const handleOpen = () => {
145
254
  if (generation !== conn.generation)
146
255
  return;
147
256
  clearTimer(conn.connectTimer);
148
257
  conn.connectTimer = null;
149
- if (conn.pending && !conn.pending.done) {
150
- ws.send(JSON.stringify({ type: "response.create", ...conn.pending.body }));
151
- conn.pending.sent = true;
152
- }
258
+ conn.lastActivityAt = Date.now();
259
+ sendPending(conn);
153
260
  };
154
261
  const handleMessage = (data) => {
155
262
  if (generation !== conn.generation)
156
263
  return;
264
+ conn.lastActivityAt = Date.now();
157
265
  for (const frame of parseFrames(data))
158
266
  enqueueSSE(conn, frame);
159
267
  };
160
- const handleError = () => {
268
+ const handlePong = () => {
269
+ if (generation !== conn.generation)
270
+ return;
271
+ conn.lastActivityAt = Date.now();
272
+ clearTimer(conn.pongTimer);
273
+ conn.pongTimer = null;
274
+ if (!conn.busy && !conn.pending)
275
+ scheduleHeartbeat(conn);
276
+ };
277
+ const handleError = (error) => {
161
278
  if (generation !== conn.generation)
162
279
  return;
280
+ conn.lastErrorMessage =
281
+ error instanceof Error ? error.message : error !== undefined && error !== null ? String(error) : undefined;
163
282
  handleSocketLoss(conn);
164
283
  };
165
- const handleClose = () => {
284
+ const handleClose = (code, reason) => {
166
285
  if (generation !== conn.generation)
167
286
  return;
287
+ if (typeof code === "number")
288
+ conn.lastCloseCode = code;
289
+ const normalizedReason = normalizeCloseReason(reason);
290
+ if (normalizedReason !== undefined)
291
+ conn.lastCloseReason = normalizedReason;
168
292
  handleSocketLoss(conn);
169
293
  };
170
294
  on(ws, "open", handleOpen);
171
295
  on(ws, "message", handleMessage);
296
+ on(ws, "pong", handlePong);
172
297
  on(ws, "error", handleError);
173
298
  on(ws, "close", handleClose);
174
299
  conn.detach = () => {
175
300
  off(ws, "open", handleOpen);
176
301
  off(ws, "message", handleMessage);
302
+ off(ws, "pong", handlePong);
177
303
  off(ws, "error", handleError);
178
304
  off(ws, "close", handleClose);
179
305
  };
@@ -181,26 +307,43 @@ function connect(conn) {
181
307
  function handleSocketLoss(conn) {
182
308
  clearTimer(conn.connectTimer);
183
309
  conn.connectTimer = null;
310
+ clearHeartbeat(conn);
184
311
  const pending = conn.pending;
185
312
  if (!pending || pending.done) {
186
313
  remove(conn);
314
+ try {
315
+ conn.ws?.terminate?.();
316
+ }
317
+ catch { }
187
318
  return;
188
319
  }
189
- if (!pending.sent && conn.reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
320
+ const canRetry = !pending.forwarded && conn.reconnectAttempts < MAX_RECONNECT_ATTEMPTS;
321
+ if (canRetry) {
190
322
  conn.reconnectAttempts++;
323
+ pending.sent = false;
324
+ const priorWs = conn.ws;
191
325
  detach(conn);
192
- const timer = setTimeout(() => {
326
+ try {
327
+ priorWs?.terminate?.();
328
+ }
329
+ catch { }
330
+ try {
331
+ priorWs?.close(1000, "retrying");
332
+ }
333
+ catch { }
334
+ conn.ws = null;
335
+ conn.retryTimer = unrefTimer(setTimeout(() => {
193
336
  conn.retryTimer = null;
194
- if (!connectionPool.includes(conn) || !conn.pending || conn.pending.done || conn.pending.sent)
337
+ if (!connectionPool.includes(conn) || !conn.pending || conn.pending.done || conn.pending.forwarded)
195
338
  return;
196
339
  connect(conn);
197
- }, RECONNECT_DELAY_MS);
198
- if (typeof timer === "object" && "unref" in timer)
199
- timer.unref();
200
- conn.retryTimer = timer;
340
+ }, RECONNECT_DELAY_MS));
201
341
  return;
202
342
  }
203
- fail(conn, new Error("WebSocket closed after stream started"), true);
343
+ const reason = pending.forwarded
344
+ ? "stream already forwarded data"
345
+ : "retry limit reached before any frame was forwarded";
346
+ fail(conn, new Error(formatFailureMessage(conn, reason)), true);
204
347
  }
205
348
  function create(wsUrl, headers) {
206
349
  const conn = {
@@ -212,25 +355,52 @@ function create(wsUrl, headers) {
212
355
  pending: null,
213
356
  generation: 0,
214
357
  reconnectAttempts: 0,
358
+ lastActivityAt: Date.now(),
215
359
  idleTimer: null,
216
360
  connectTimer: null,
217
361
  retryTimer: null,
362
+ heartbeatTimer: null,
363
+ pongTimer: null,
218
364
  detach: null,
219
365
  };
220
366
  connectionPool.push(conn);
221
367
  connect(conn);
222
368
  return conn;
223
369
  }
370
+ function isReusable(conn, key, context, now) {
371
+ if (conn.busy)
372
+ return false;
373
+ if (conn.scopeKey !== key)
374
+ return false;
375
+ if (conn.ws?.readyState !== readyState.OPEN)
376
+ return false;
377
+ if (now - conn.lastActivityAt > STALE_REUSE_MS)
378
+ return false;
379
+ if (context.sessionID && conn.lastSessionID && conn.lastSessionID !== context.sessionID)
380
+ return false;
381
+ if (context.agent && conn.lastAgent && conn.lastAgent !== context.agent)
382
+ return false;
383
+ return true;
384
+ }
224
385
  export function acquireConnection(wsUrl, headers, context) {
225
386
  const key = scopeKey(wsUrl, headers);
226
- const reusable = connectionPool.find((conn) => !conn.busy &&
227
- conn.scopeKey === key &&
228
- conn.ws?.readyState === readyState.OPEN &&
229
- (!context.sessionID || !conn.lastSessionID || conn.lastSessionID === context.sessionID) &&
230
- (!context.agent || !conn.lastAgent || conn.lastAgent === context.agent));
387
+ const now = Date.now();
388
+ for (const candidate of [...connectionPool]) {
389
+ if (candidate.busy || candidate.scopeKey !== key)
390
+ continue;
391
+ if (candidate.ws?.readyState === readyState.OPEN && now - candidate.lastActivityAt > STALE_REUSE_MS) {
392
+ remove(candidate);
393
+ try {
394
+ candidate.ws?.close(1000, "stale idle");
395
+ }
396
+ catch { }
397
+ }
398
+ }
399
+ const reusable = connectionPool.find((conn) => isReusable(conn, key, context, now));
231
400
  const conn = reusable ?? create(wsUrl, headers);
232
401
  clearTimer(conn.idleTimer);
233
402
  conn.idleTimer = null;
403
+ clearHeartbeat(conn);
234
404
  conn.busy = true;
235
405
  return conn;
236
406
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/transport/pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/transport/pool.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,SAAS,MAAM,IAAI,CAAA;AAiB1B,MAAM,0BAA0B,GAAG,MAAM,CAAA;AACzC,MAAM,sBAAsB,GAAG,CAAC,CAAA;AAChC,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAC9B,MAAM,aAAa,GAAG,OAAO,CAAA;AAC7B,MAAM,cAAc,GAAG,MAAM,CAAA;AAC7B,MAAM,qBAAqB,GAAG,MAAM,CAAA;AACpC,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,IAAI,aAAa,GAAyB,SAA4C,CAAA;AAqCtF,MAAM,CAAC,MAAM,cAAc,GAAuB,EAAE,CAAA;AAEpD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,CAAC;IACb,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;CACD,CAAA;AAEV,SAAS,EAAE,CAAC,EAAiB,EAAE,KAAa,EAAE,QAAkC;IAC9E,IAAI,EAAE,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;;QAC5B,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,GAAG,CAAC,EAAiB,EAAE,KAAa,EAAE,QAAkC;IAC/E,IAAI,EAAE,CAAC,GAAG;QAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;;QAC9B,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,OAA+B;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;SACnH,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,KAA2C;IAC7D,IAAI,KAAK;QAAE,YAAY,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,UAAU,CAAC,KAAoC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;QACpE,CAAC;QAAC,KAAgC,CAAC,KAAK,EAAE,EAAE,CAAA;IAC9C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,cAAc,CAAC,IAAsB;IAC5C,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC/B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;IAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AACvB,CAAC;AAED,SAAS,MAAM,CAAC,IAAsB;IACpC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1B,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3B,cAAc,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;AACxB,CAAC;AAED,SAAS,MAAM,CAAC,IAAsB;IACpC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,KAAK,IAAI,CAAC;QAAE,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC/C,MAAM,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAsB;IAC/C,cAAc,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;QAAE,OAAM;IACrC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI;QAAE,OAAM;IACpD,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU;QAAE,OAAM;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;IAClC,IAAI,CAAC,cAAc,GAAG,UAAU,CAC9B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAM;QACnE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI;YAAE,OAAM;QAClD,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAA;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,CAAA;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,OAAM;QACR,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,UAAU,CACzB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAM;YACvD,MAAM,CAAC,IAAI,CAAC,CAAA;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAA;YACxB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;YACtC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC,EAAE,eAAe,CAAC,CACpB,CAAA;IACH,CAAC,EAAE,qBAAqB,CAAC,CAC1B,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAsB;IACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAA;IACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAA;IACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;IAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;IAC5B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;IACjB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;IAC1B,IAAI,CAAC,SAAS,GAAG,UAAU,CACzB,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,CAAA;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;YACvC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC,EAAE,aAAa,CAAC,CAClB,CAAA;IACD,iBAAiB,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAsB,EAAE,MAAc;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACxF,OAAO,CACL,oEAAoE,MAAM,IAAI;QAC9E,qBAAqB,IAAI,CAAC,iBAAiB,IAAI,sBAAsB,IAAI;QACzE,aAAa,IAAI,iBAAiB,WAAW,eAAe,SAAS,EAAE,CACxE,CAAA;AACH,CAAC;AAED,SAAS,IAAI,CAAC,IAAsB,EAAE,KAAY,EAAE,WAAoB;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC5B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;IACjB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;IAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;IAC5B,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,CAAA;QACZ,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACjC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3G,MAAM,KAAK,GAAG,IAAI;SACf,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAChD,MAAM,MAAM,GAAmC,EAAE,CAAA;IACjD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACpC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAiC,CAAC,CAAA;QAC1F,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAsB,EAAE,KAA8B;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI;QAAE,OAAM;IACpC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IACzE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACnG,IAAI,CAAC;QACH,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;IACD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC;YACH,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAsB;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC1D,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,gBAAgB,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC9E,cAAc,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;IACnB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe;IAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAA;IAC7C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3D,IAAI,MAAM,YAAY,UAAU;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC;AAED,SAAS,OAAO,CAAC,IAAsB;IACrC,cAAc,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACnE,MAAM,UAAU,GAAG,EAAE,IAAI,CAAC,UAAU,CAAA;IACpC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACtB,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QACnC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC,IAAI;YAAE,OAAM;QAC/E,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,gCAAgC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC/D,CAAC,EAAE,0BAA0B,CAAC,CAAA;IAC9B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAA;IAE5C,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,WAAW,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,EAAE;QACtC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAChE,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;QACrC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,IAAI,CAAC,gBAAgB;YACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC5G,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,IAAa,EAAE,MAAgB,EAAE,EAAE;QACtD,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACvD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,gBAAgB,KAAK,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAA;QAC3E,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAC1B,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;IAChC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;IAC1B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;IAC5B,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;IAE5B,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;QACjB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC3B,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;QACjC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QAC3B,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;QAC7B,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;IAC/B,CAAC,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAsB;IAC9C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IACxB,cAAc,CAAC,IAAI,CAAC,CAAA;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAA;QACZ,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAM;IACR,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,GAAG,sBAAsB,CAAA;IACtF,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAA;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAA;QACvB,MAAM,CAAC,IAAI,CAAC,CAAA;QACZ,IAAI,CAAC;YACH,OAAO,EAAE,SAAS,EAAE,EAAE,CAAA;QACxB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC;YACH,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QAClC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACd,IAAI,CAAC,UAAU,GAAG,UAAU,CAC1B,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;YACtB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS;gBAAE,OAAM;YAC1G,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,EAAE,kBAAkB,CAAC,CACvB,CAAA;QACD,OAAM;IACR,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS;QAC9B,CAAC,CAAC,+BAA+B;QACjC,CAAC,CAAC,oDAAoD,CAAA;IACxD,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,OAA+B;IAC5D,MAAM,IAAI,GAAqB;QAC7B,EAAE,EAAE,IAAI;QACR,KAAK;QACL,OAAO;QACP,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAClC,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;QACb,iBAAiB,EAAE,CAAC;QACpB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;QAC1B,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,IAAI;KACb,CAAA;IACD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,IAAsB,EAAE,GAAW,EAAE,OAAyB,EAAE,GAAW;IAC7F,IAAI,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACzD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,cAAc;QAAE,OAAO,KAAK,CAAA;IAC5D,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IACrG,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IACrF,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,OAA+B,EAC/B,OAAyB;IAEzB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC;QAC5C,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,KAAK,GAAG;YAAE,SAAQ;QAC1D,IAAI,SAAS,CAAC,EAAE,EAAE,UAAU,KAAK,UAAU,CAAC,IAAI,IAAI,GAAG,GAAG,SAAS,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC;YACpG,MAAM,CAAC,SAAS,CAAC,CAAA;YACjB,IAAI,CAAC;gBACH,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;YACzC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IACnF,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACrB,cAAc,CAAC,IAAI,CAAC,CAAA;IACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAChB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAiD,GAAG,EAAE,CAAC,IAAI;IAC1F,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,SAAQ;QAC9B,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAA;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,CAAC,IAAI,CAAC,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,IAA0B;IAC1E,aAAa,GAAG,IAAI,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,aAAa,GAAG,SAA4C,CAAA;AAC9D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openai-ws-opencode",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "OpenCode plugin for OpenAI Responses WebSocket transport.",
5
5
  "type": "module",
6
6
  "license": "MIT",