openai-ws-opencode 0.1.28 → 0.1.30
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 +15 -1
- package/bin/setup.js +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +42 -7
- package/dist/plugin.js.map +1 -1
- package/dist/testing.d.ts +5 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/transport/bridge.d.ts +6 -0
- package/dist/transport/bridge.d.ts.map +1 -1
- package/dist/transport/bridge.js +139 -7
- package/dist/transport/bridge.js.map +1 -1
- package/dist/transport/coordinator.d.ts +7 -1
- package/dist/transport/coordinator.d.ts.map +1 -1
- package/dist/transport/coordinator.js +54 -13
- package/dist/transport/coordinator.js.map +1 -1
- package/dist/transport/pool.d.ts +11 -1
- package/dist/transport/pool.d.ts.map +1 -1
- package/dist/transport/pool.js +268 -27
- package/dist/transport/pool.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -115,13 +115,27 @@ Then point OpenCode at the packed tarball through the plugin array:
|
|
|
115
115
|
|
|
116
116
|
Direct `file:///absolute/path/dist/index.js` imports are useful for debugging, but npm/tarball installs better match how OpenCode resolves dependencies.
|
|
117
117
|
|
|
118
|
+
## Scale controls and load harness
|
|
119
|
+
|
|
120
|
+
Transport limits are boot-latched from env at process start. Defaults: process max sockets 64, provider max 32, max connecting 8, prewarm max connecting 2 with demand reserve 1, one active connection/turn per session scope, per-stream queue 1024 messages / 16 MiB, aggregate queue 256 MiB.
|
|
121
|
+
|
|
122
|
+
Raising `OPENAI_WS_PROCESS_MAX_SOCKETS` above 64 requires positive `OPENAI_WS_SHED_MAX_SESSIONS`, `OPENAI_WS_SHED_LAG_MS`, and `OPENAI_WS_SHED_RSS_MB`, and the aggregate queue must be at most 25% of that RSS guard.
|
|
123
|
+
|
|
124
|
+
Deterministic local harness (no live OpenAI):
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
bun scripts/ws-load-harness.ts --streams 1000 --mode cold --json
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Modes: `cold`, `warm`, `blackhole`, `slow-reader`, `abrupt-close`, `provider-limit`.
|
|
131
|
+
|
|
118
132
|
## Development
|
|
119
133
|
|
|
120
134
|
```sh
|
|
121
135
|
bun install
|
|
122
136
|
bun run lint
|
|
123
137
|
bun run typecheck
|
|
124
|
-
bun test
|
|
138
|
+
bun run test
|
|
125
139
|
bun run build
|
|
126
140
|
npm pack --dry-run
|
|
127
141
|
```
|
package/bin/setup.js
CHANGED
|
@@ -20,7 +20,7 @@ var CODEX_CLI_NPM_ENDPOINT = "https://registry.npmjs.org/-/package/@openai%2Fcod
|
|
|
20
20
|
var OPENAI_MODELS_ENDPOINT = `${OPENAI_API_BASE}/models`;
|
|
21
21
|
var OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
22
22
|
var CODEX_ORIGINATOR = "opencode";
|
|
23
|
-
var USER_AGENT = "openai-ws-opencode/0.1.
|
|
23
|
+
var USER_AGENT = "openai-ws-opencode/0.1.30";
|
|
24
24
|
|
|
25
25
|
// src/models/catalog.ts
|
|
26
26
|
var DEFAULT_TIMEOUT_MS = 800;
|
package/dist/constants.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
|
13
13
|
export declare const CODEX_ORIGINATOR = "opencode";
|
|
14
14
|
export declare const CODEX_RESPONSES_ORIGINATOR = "codex-tui";
|
|
15
15
|
export declare const CODEX_RESPONSES_BETA_FEATURES = "remote_compaction_v2";
|
|
16
|
-
export declare const USER_AGENT = "openai-ws-opencode/0.1.
|
|
16
|
+
export declare const USER_AGENT = "openai-ws-opencode/0.1.30";
|
|
17
17
|
export declare const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
18
18
|
export declare const OAUTH_PORT = 1455;
|
|
19
19
|
export declare const X_CODEX_TURN_STATE_HEADER = "x-codex-turn-state";
|
package/dist/constants.js
CHANGED
|
@@ -13,7 +13,7 @@ export const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
|
13
13
|
export const CODEX_ORIGINATOR = "opencode";
|
|
14
14
|
export const CODEX_RESPONSES_ORIGINATOR = "codex-tui";
|
|
15
15
|
export const CODEX_RESPONSES_BETA_FEATURES = "remote_compaction_v2";
|
|
16
|
-
export const USER_AGENT = "openai-ws-opencode/0.1.
|
|
16
|
+
export const USER_AGENT = "openai-ws-opencode/0.1.30";
|
|
17
17
|
export const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
18
18
|
export const OAUTH_PORT = 1455;
|
|
19
19
|
export const X_CODEX_TURN_STATE_HEADER = "x-codex-turn-state";
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAiGxD,QAAA,MAAM,qBAAqB,EAAE,MAuM5B,CAAA;AAED,eAAe,qBAAqB,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -6,8 +6,8 @@ import { fetchCodexCatalog, fetchOpenAIModelIds, resolveCodexClientVersion } fro
|
|
|
6
6
|
import { CODEX_EFFECTIVE_CONTEXT_WINDOW, CODEX_OUTPUT_TOKEN_LIMIT, OPENAI_WS_MODELS } from "./models/defaults.js";
|
|
7
7
|
import { resolveModelsForApiKey, resolveModelsForOAuth } from "./models/resolve.js";
|
|
8
8
|
import { prepareHttpFallbackBody } from "./transport/body.js";
|
|
9
|
-
import { bridgeWebSocket } from "./transport/bridge.js";
|
|
10
|
-
import { closeConnections, ensureWarmConnection, invalidateStaleAuthConnections } from "./transport/pool.js";
|
|
9
|
+
import { abortAllBridgeStreams, abortBridgeStreamsForSession, bridgeWebSocket } from "./transport/bridge.js";
|
|
10
|
+
import { clearAllTransportState, clearSessionTransportState, closeConnections, ensureWarmConnection, invalidateStaleAuthConnections, } from "./transport/pool.js";
|
|
11
11
|
import { extractTransportContext, httpAuthHeaders, transportIdentity } from "./transport/headers.js";
|
|
12
12
|
function stableHash(value) {
|
|
13
13
|
return crypto.createHash("sha256").update(JSON.stringify(value ?? "")).digest("hex").slice(0, 32);
|
|
@@ -52,7 +52,17 @@ function shouldBridge(url, init) {
|
|
|
52
52
|
(url.pathname.includes("/v1/responses") || url.pathname.includes("/backend-api/codex/responses")) &&
|
|
53
53
|
typeof init.body === "string");
|
|
54
54
|
}
|
|
55
|
+
function matchesSessionConnection(conn, sessionID) {
|
|
56
|
+
return (conn.activeSessionID === sessionID ||
|
|
57
|
+
conn.lastSessionID === sessionID ||
|
|
58
|
+
conn.headers.session_id === sessionID ||
|
|
59
|
+
conn.headers["session-id"] === sessionID);
|
|
60
|
+
}
|
|
55
61
|
const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
62
|
+
let currentIdentity;
|
|
63
|
+
const setIdentity = (identity) => {
|
|
64
|
+
currentIdentity = identity;
|
|
65
|
+
};
|
|
56
66
|
const hooks = {
|
|
57
67
|
"chat.headers": async (input, output) => {
|
|
58
68
|
if (input.model.providerID !== PROVIDER_ID)
|
|
@@ -62,6 +72,18 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
62
72
|
headers[INTERNAL_AGENT_HEADER] = input.agent;
|
|
63
73
|
headers[INTERNAL_MODEL_HEADER] = input.model.id ?? input.model.modelID;
|
|
64
74
|
headers[INTERNAL_PREFIX_HASH_HEADER] = stableHash(input.message);
|
|
75
|
+
const identity = currentIdentity;
|
|
76
|
+
if (!identity)
|
|
77
|
+
return;
|
|
78
|
+
try {
|
|
79
|
+
ensureWarmConnection(identity.wsUrl, identity.wsHeaders, {
|
|
80
|
+
sessionID: input.sessionID,
|
|
81
|
+
agent: input.agent,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// Best-effort prewarm: admission/network failures must not break chat.headers.
|
|
86
|
+
}
|
|
65
87
|
},
|
|
66
88
|
"chat.params": async (input, _output) => {
|
|
67
89
|
if (input.model.providerID !== PROVIDER_ID)
|
|
@@ -85,20 +107,28 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
85
107
|
event: async ({ event }) => {
|
|
86
108
|
if (event.type === "session.deleted") {
|
|
87
109
|
const deletedSessionID = event.properties?.info?.id;
|
|
88
|
-
|
|
110
|
+
if (typeof deletedSessionID === "string" && deletedSessionID) {
|
|
111
|
+
abortBridgeStreamsForSession(deletedSessionID, new Error("Session disposed"));
|
|
112
|
+
closeConnections((conn) => matchesSessionConnection(conn, deletedSessionID));
|
|
113
|
+
clearSessionTransportState(deletedSessionID);
|
|
114
|
+
}
|
|
89
115
|
return;
|
|
90
116
|
}
|
|
91
117
|
const eventType = String(event.type);
|
|
92
118
|
if (eventType === "server.instance.disposed" || eventType === "global.disposed") {
|
|
119
|
+
abortAllBridgeStreams(new Error("Session disposed"));
|
|
93
120
|
closeConnections();
|
|
121
|
+
clearAllTransportState();
|
|
94
122
|
}
|
|
95
123
|
},
|
|
96
124
|
auth: {
|
|
97
125
|
provider: PROVIDER_ID,
|
|
98
126
|
async loader(getAuth, provider) {
|
|
99
127
|
const auth = (await getAuth().catch(() => undefined));
|
|
100
|
-
if (!auth)
|
|
128
|
+
if (!auth) {
|
|
129
|
+
setIdentity(undefined);
|
|
101
130
|
return {};
|
|
131
|
+
}
|
|
102
132
|
if (auth?.type === "api" && auth.key) {
|
|
103
133
|
const apiKey = auth.key;
|
|
104
134
|
if (provider) {
|
|
@@ -107,7 +137,7 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
107
137
|
}
|
|
108
138
|
const identity = transportIdentity({ type: "api", apiKey });
|
|
109
139
|
invalidateStaleAuthConnections(identity.wsUrl, identity.wsHeaders);
|
|
110
|
-
|
|
140
|
+
setIdentity({ wsUrl: identity.wsUrl, wsHeaders: identity.wsHeaders });
|
|
111
141
|
return {
|
|
112
142
|
apiKey,
|
|
113
143
|
baseURL: OPENAI_API_BASE,
|
|
@@ -152,6 +182,7 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
152
182
|
initialAuth = await resolveOAuthAuth(auth, client);
|
|
153
183
|
}
|
|
154
184
|
catch {
|
|
185
|
+
setIdentity(undefined);
|
|
155
186
|
if (provider)
|
|
156
187
|
provider.models = resolveModelsForOAuth(undefined, provider.models);
|
|
157
188
|
return {};
|
|
@@ -163,18 +194,21 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
163
194
|
}
|
|
164
195
|
const initialIdentity = transportIdentity({ type: "oauth", accessToken: initialAuth.accessToken, accountId: initialAuth.accountId }, initialClientVersion);
|
|
165
196
|
invalidateStaleAuthConnections(initialIdentity.wsUrl, initialIdentity.wsHeaders);
|
|
166
|
-
|
|
197
|
+
setIdentity({ wsUrl: initialIdentity.wsUrl, wsHeaders: initialIdentity.wsHeaders });
|
|
167
198
|
return {
|
|
168
199
|
apiKey: initialAuth.accessToken,
|
|
169
200
|
baseURL: CODEX_API_BASE,
|
|
170
201
|
async fetch(input, init) {
|
|
171
202
|
const currentAuth = (await getAuth());
|
|
172
|
-
if (currentAuth?.type !== "oauth")
|
|
203
|
+
if (currentAuth?.type !== "oauth") {
|
|
204
|
+
setIdentity(undefined);
|
|
173
205
|
throw new Error("OpenAI WebSocket OAuth auth is missing");
|
|
206
|
+
}
|
|
174
207
|
const { accessToken, accountId } = await resolveOAuthAuth(currentAuth, client);
|
|
175
208
|
const clientVersion = await resolveCodexClientVersion();
|
|
176
209
|
const identity = transportIdentity({ type: "oauth", accessToken, accountId }, clientVersion);
|
|
177
210
|
invalidateStaleAuthConnections(identity.wsUrl, identity.wsHeaders);
|
|
211
|
+
setIdentity({ wsUrl: identity.wsUrl, wsHeaders: identity.wsHeaders });
|
|
178
212
|
const url = typeof input === "string" ? new URL(input) : input instanceof URL ? input : new URL(input.url);
|
|
179
213
|
const context = extractTransportContext(init?.headers);
|
|
180
214
|
if (shouldBridge(url, init)) {
|
|
@@ -211,6 +245,7 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
211
245
|
},
|
|
212
246
|
};
|
|
213
247
|
}
|
|
248
|
+
setIdentity(undefined);
|
|
214
249
|
return {};
|
|
215
250
|
},
|
|
216
251
|
methods: oauthMethods,
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { oauthTesting } from "./auth/oauth.js";
|
|
2
2
|
export { prepareBody, prepareHttpFallbackBody } from "./transport/body.js";
|
|
3
3
|
export { apiKeyWebSocketHeaders, oauthWebSocketHeaders, extractTransportContext, transportIdentity } from "./transport/headers.js";
|
|
4
|
-
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
4
|
+
export { connectionPool, readyState, ensureWarmConnection, clearTransportContextState, clearSessionTransportState, clearAllTransportState, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
5
5
|
export { bridgeWebSocket } from "./transport/bridge.js";
|
|
6
6
|
export { fallbackCodexClientVersion, fetchCodexCatalog, fetchOpenAIModelIds, resetCatalogCacheForTesting, resolveCodexClientVersion } from "./models/catalog.js";
|
|
7
7
|
export { resolveModels, resolveModelsForApiKey, resolveModelsForOAuth, providerConfig } from "./models/resolve.js";
|
|
@@ -13,6 +13,7 @@ export declare function setTransportConfigForTesting(partial: Partial<TransportC
|
|
|
13
13
|
export declare function resetTransportConfigForTesting(): void;
|
|
14
14
|
/** Fixed-cardinality coordinator snapshot (no secrets / raw IDs). */
|
|
15
15
|
export declare function transportSnapshot(): {
|
|
16
|
+
contextEntries: number;
|
|
16
17
|
physicalSockets: number;
|
|
17
18
|
connecting: number;
|
|
18
19
|
prewarming: number;
|
|
@@ -46,6 +47,7 @@ export declare function transportSnapshot(): {
|
|
|
46
47
|
connect_failure: number;
|
|
47
48
|
handshake_timeout: number;
|
|
48
49
|
stale_auth: number;
|
|
50
|
+
other: number;
|
|
49
51
|
};
|
|
50
52
|
httpByReason: {
|
|
51
53
|
provider_breaker: number;
|
|
@@ -59,8 +61,10 @@ export declare function transportSnapshot(): {
|
|
|
59
61
|
memory_guard: number;
|
|
60
62
|
connect_failure: number;
|
|
61
63
|
handshake_timeout: number;
|
|
64
|
+
stale_auth: number;
|
|
62
65
|
provider_connection_limit: number;
|
|
63
66
|
previous_response_not_found: number;
|
|
67
|
+
other: number;
|
|
64
68
|
};
|
|
65
69
|
leaseAttempts: number;
|
|
66
70
|
leaseAdmissions: number;
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAU5D,oEAAoE;AACpE,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAG7E;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,SAG7C;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAU5D,oEAAoE;AACpE,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAG7E;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,SAG7C;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhC"}
|
package/dist/testing.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { oauthTesting } from "./auth/oauth.js";
|
|
2
2
|
export { prepareBody, prepareHttpFallbackBody } from "./transport/body.js";
|
|
3
3
|
export { apiKeyWebSocketHeaders, oauthWebSocketHeaders, extractTransportContext, transportIdentity } from "./transport/headers.js";
|
|
4
|
-
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
4
|
+
export { connectionPool, readyState, ensureWarmConnection, clearTransportContextState, clearSessionTransportState, clearAllTransportState, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
5
5
|
export { bridgeWebSocket } from "./transport/bridge.js";
|
|
6
6
|
export { fallbackCodexClientVersion, fetchCodexCatalog, fetchOpenAIModelIds, resetCatalogCacheForTesting, resolveCodexClientVersion } from "./models/catalog.js";
|
|
7
7
|
export { resolveModels, resolveModelsForApiKey, resolveModelsForOAuth, providerConfig } from "./models/resolve.js";
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,8BAA8B,IAAI,uBAAuB,EACzD,4BAA4B,IAAI,qBAAqB,GACtD,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,qBAAqB,CAAA;AAE5B,oEAAoE;AACpE,MAAM,UAAU,4BAA4B,CAAC,OAAiC;IAC5E,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,8BAA8B;IAC5C,uBAAuB,EAAE,CAAA;IACzB,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,8BAA8B,EAAE,CAAA;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,8BAA8B,IAAI,uBAAuB,EACzD,4BAA4B,IAAI,qBAAqB,GACtD,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,qBAAqB,CAAA;AAE5B,oEAAoE;AACpE,MAAM,UAAU,4BAA4B,CAAC,OAAiC;IAC5E,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,8BAA8B;IAC5C,uBAAuB,EAAE,CAAA;IACzB,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,8BAA8B,EAAE,CAAA;AACzC,CAAC"}
|
|
@@ -5,6 +5,12 @@ export type FallbackFetchContext = {
|
|
|
5
5
|
clearPreviousResponseId?: boolean;
|
|
6
6
|
};
|
|
7
7
|
type FallbackFetch = (signal: AbortSignal, context?: FallbackFetchContext) => Promise<Response>;
|
|
8
|
+
/** Fixed-cardinality active bridge count for tests (no session IDs). */
|
|
9
|
+
export declare function activeBridgeStreamCountForTesting(): number;
|
|
10
|
+
/** Abort active bridge turns for a session (hashed identity; idempotent). */
|
|
11
|
+
export declare function abortBridgeStreamsForSession(sessionID: string, reason?: unknown): void;
|
|
12
|
+
/** Abort every active bridge turn (idempotent). */
|
|
13
|
+
export declare function abortAllBridgeStreams(reason?: unknown): void;
|
|
8
14
|
export declare function bridgeWebSocket(wsUrl: string, headers: Record<string, string>, requestBody: Record<string, unknown>, isOAuth: boolean, context?: TransportContext, signal?: AbortSignal, fallbackFetch?: FallbackFetch): Response;
|
|
9
15
|
export {};
|
|
10
16
|
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG;IACjC,mFAAmF;IACnF,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAqC/F,wEAAwE;AACxE,wBAAgB,iCAAiC,IAAI,MAAM,CAE1D;AAED,6EAA6E;AAC7E,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAItF;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAE5D;AA0MD,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,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,QAAQ,CAuSV"}
|
package/dist/transport/bridge.js
CHANGED
|
@@ -1,10 +1,57 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { prepareBody } from "./body.js";
|
|
2
|
-
import { acquireConnection, allocateStreamKey, closeConnection, closeConnections, sendPending, } from "./pool.js";
|
|
3
|
+
import { acquireConnection, allocateStreamKey, clearTransportContextState, closeConnection, closeConnections, sendPending, } from "./pool.js";
|
|
3
4
|
import { transportConfig } from "./config.js";
|
|
4
5
|
import { getTransportCoordinator } from "./coordinator.js";
|
|
5
6
|
import { CODEX_WS_URL } from "../constants.js";
|
|
6
7
|
import { isTransportFallbackEligible, WebSocketTransportError } from "./errors.js";
|
|
7
8
|
const encoder = new TextEncoder();
|
|
9
|
+
const activeBridgeStreams = new Set();
|
|
10
|
+
const activeBridgeStreamsBySession = new Map();
|
|
11
|
+
function hashSessionIdentity(sessionID) {
|
|
12
|
+
return createHash("sha256").update(sessionID).digest("hex");
|
|
13
|
+
}
|
|
14
|
+
function registerBridgeStream(sessionID, handle) {
|
|
15
|
+
activeBridgeStreams.add(handle);
|
|
16
|
+
if (!sessionID)
|
|
17
|
+
return;
|
|
18
|
+
const key = hashSessionIdentity(sessionID);
|
|
19
|
+
let set = activeBridgeStreamsBySession.get(key);
|
|
20
|
+
if (!set) {
|
|
21
|
+
set = new Set();
|
|
22
|
+
activeBridgeStreamsBySession.set(key, set);
|
|
23
|
+
}
|
|
24
|
+
set.add(handle);
|
|
25
|
+
}
|
|
26
|
+
function unregisterBridgeStream(sessionID, handle) {
|
|
27
|
+
activeBridgeStreams.delete(handle);
|
|
28
|
+
if (!sessionID)
|
|
29
|
+
return;
|
|
30
|
+
const key = hashSessionIdentity(sessionID);
|
|
31
|
+
const set = activeBridgeStreamsBySession.get(key);
|
|
32
|
+
if (!set)
|
|
33
|
+
return;
|
|
34
|
+
set.delete(handle);
|
|
35
|
+
if (set.size === 0)
|
|
36
|
+
activeBridgeStreamsBySession.delete(key);
|
|
37
|
+
}
|
|
38
|
+
/** Fixed-cardinality active bridge count for tests (no session IDs). */
|
|
39
|
+
export function activeBridgeStreamCountForTesting() {
|
|
40
|
+
return activeBridgeStreams.size;
|
|
41
|
+
}
|
|
42
|
+
/** Abort active bridge turns for a session (hashed identity; idempotent). */
|
|
43
|
+
export function abortBridgeStreamsForSession(sessionID, reason) {
|
|
44
|
+
const set = activeBridgeStreamsBySession.get(hashSessionIdentity(sessionID));
|
|
45
|
+
if (!set || set.size === 0)
|
|
46
|
+
return;
|
|
47
|
+
for (const handle of [...set])
|
|
48
|
+
handle.abort(reason);
|
|
49
|
+
}
|
|
50
|
+
/** Abort every active bridge turn (idempotent). */
|
|
51
|
+
export function abortAllBridgeStreams(reason) {
|
|
52
|
+
for (const handle of [...activeBridgeStreams])
|
|
53
|
+
handle.abort(reason);
|
|
54
|
+
}
|
|
8
55
|
function providerForUrl(wsUrl) {
|
|
9
56
|
return wsUrl === CODEX_WS_URL || wsUrl.includes("chatgpt.com/backend-api/codex") ? "codex" : "openai";
|
|
10
57
|
}
|
|
@@ -46,6 +93,13 @@ function abortPending(conn, error) {
|
|
|
46
93
|
function abortError(signal) {
|
|
47
94
|
return signal?.reason instanceof Error ? signal.reason : new DOMException("Aborted", "AbortError");
|
|
48
95
|
}
|
|
96
|
+
function asAbortError(reason) {
|
|
97
|
+
if (reason instanceof Error)
|
|
98
|
+
return reason;
|
|
99
|
+
if (reason === undefined)
|
|
100
|
+
return new DOMException("Aborted", "AbortError");
|
|
101
|
+
return new DOMException(String(reason), "AbortError");
|
|
102
|
+
}
|
|
49
103
|
function queueOverflowError() {
|
|
50
104
|
return new WebSocketTransportError({
|
|
51
105
|
code: "queue_overflow",
|
|
@@ -56,6 +110,16 @@ function queueOverflowError() {
|
|
|
56
110
|
safeToReplay: false,
|
|
57
111
|
});
|
|
58
112
|
}
|
|
113
|
+
function isSseContentType(value) {
|
|
114
|
+
if (!value)
|
|
115
|
+
return false;
|
|
116
|
+
const media = value.split(";", 1)[0].trim().toLowerCase();
|
|
117
|
+
return media === "text/event-stream";
|
|
118
|
+
}
|
|
119
|
+
function fallbackResponseError(response) {
|
|
120
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
121
|
+
return new Error(`HTTP fallback failed: status=${response.status} content-type=${contentType || "unknown"}`);
|
|
122
|
+
}
|
|
59
123
|
class BoundedSseSink {
|
|
60
124
|
provider;
|
|
61
125
|
streamKey;
|
|
@@ -192,19 +256,44 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
192
256
|
let fallbackStarted = false;
|
|
193
257
|
let fallbackPiping = false;
|
|
194
258
|
let fallbackContext;
|
|
259
|
+
let fallbackReader = null;
|
|
195
260
|
let sink;
|
|
196
261
|
let streamController;
|
|
197
262
|
let streamSettled = false;
|
|
263
|
+
let registered = false;
|
|
198
264
|
const streamKey = allocateStreamKey();
|
|
199
265
|
const provider = providerForUrl(wsUrl);
|
|
266
|
+
const sessionID = context.sessionID;
|
|
200
267
|
const cleanupAbort = () => {
|
|
201
268
|
if (signal)
|
|
202
269
|
signal.removeEventListener("abort", onAbort);
|
|
203
270
|
};
|
|
271
|
+
const cancelFallbackReader = () => {
|
|
272
|
+
const reader = fallbackReader;
|
|
273
|
+
fallbackReader = null;
|
|
274
|
+
if (!reader)
|
|
275
|
+
return;
|
|
276
|
+
try {
|
|
277
|
+
void reader.cancel().catch(() => { });
|
|
278
|
+
}
|
|
279
|
+
catch { }
|
|
280
|
+
try {
|
|
281
|
+
reader.releaseLock();
|
|
282
|
+
}
|
|
283
|
+
catch { }
|
|
284
|
+
};
|
|
285
|
+
const unregister = () => {
|
|
286
|
+
if (!registered)
|
|
287
|
+
return;
|
|
288
|
+
registered = false;
|
|
289
|
+
unregisterBridgeStream(sessionID, bridgeHandle);
|
|
290
|
+
};
|
|
204
291
|
const finalize = () => {
|
|
205
292
|
finalized = true;
|
|
206
293
|
cleanupAbort();
|
|
294
|
+
cancelFallbackReader();
|
|
207
295
|
fallbackController.abort(new DOMException("Stream finalized", "AbortError"));
|
|
296
|
+
unregister();
|
|
208
297
|
};
|
|
209
298
|
const settleError = (error) => {
|
|
210
299
|
if (streamSettled)
|
|
@@ -238,13 +327,31 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
238
327
|
fallbackPiping = true;
|
|
239
328
|
try {
|
|
240
329
|
const response = await fallbackFetch(fallbackController.signal, fallbackContext);
|
|
241
|
-
if (finalized || sink.getError())
|
|
330
|
+
if (finalized || sink.getError()) {
|
|
331
|
+
try {
|
|
332
|
+
await response.body?.cancel();
|
|
333
|
+
}
|
|
334
|
+
catch { }
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (!response.ok || !isSseContentType(response.headers.get("content-type"))) {
|
|
338
|
+
const error = fallbackResponseError(response);
|
|
339
|
+
try {
|
|
340
|
+
await response.body?.cancel();
|
|
341
|
+
}
|
|
342
|
+
catch { }
|
|
343
|
+
try {
|
|
344
|
+
sink.error(error);
|
|
345
|
+
}
|
|
346
|
+
catch { }
|
|
242
347
|
return;
|
|
348
|
+
}
|
|
243
349
|
if (!response.body) {
|
|
244
350
|
sink.close();
|
|
245
351
|
return;
|
|
246
352
|
}
|
|
247
353
|
const reader = response.body.getReader();
|
|
354
|
+
fallbackReader = reader;
|
|
248
355
|
try {
|
|
249
356
|
while (!finalized && !sink.getError()) {
|
|
250
357
|
const { value, done } = await reader.read();
|
|
@@ -261,7 +368,12 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
261
368
|
}
|
|
262
369
|
}
|
|
263
370
|
finally {
|
|
264
|
-
reader
|
|
371
|
+
if (fallbackReader === reader)
|
|
372
|
+
fallbackReader = null;
|
|
373
|
+
try {
|
|
374
|
+
reader.releaseLock();
|
|
375
|
+
}
|
|
376
|
+
catch { }
|
|
265
377
|
}
|
|
266
378
|
if (!finalized && !sink.getError())
|
|
267
379
|
sink.close();
|
|
@@ -284,18 +396,22 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
284
396
|
if (!isTransportFallbackEligible(error))
|
|
285
397
|
return false;
|
|
286
398
|
fallbackStarted = true;
|
|
399
|
+
// Clear WSS continuation + turn state for this exact hashed context once before HTTP fallback.
|
|
400
|
+
// Does not mutate the caller request body; previous_response hint stays typed below.
|
|
401
|
+
clearTransportContextState(wsUrl, headers, context);
|
|
287
402
|
if (error instanceof WebSocketTransportError && error.code === "previous_response_not_found") {
|
|
288
403
|
fallbackContext = { clearPreviousResponseId: true };
|
|
289
404
|
}
|
|
290
405
|
noteFallback(error);
|
|
291
406
|
return true;
|
|
292
407
|
};
|
|
293
|
-
const
|
|
408
|
+
const abortBridge = (reason) => {
|
|
294
409
|
if (finalized)
|
|
295
410
|
return;
|
|
296
411
|
finalized = true;
|
|
297
412
|
cleanupAbort();
|
|
298
|
-
const error = abortError(signal);
|
|
413
|
+
const error = asAbortError(reason ?? (signal ? abortError(signal) : undefined));
|
|
414
|
+
cancelFallbackReader();
|
|
299
415
|
fallbackController.abort(error);
|
|
300
416
|
if (conn)
|
|
301
417
|
abortPending(conn, error);
|
|
@@ -306,6 +422,13 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
306
422
|
}
|
|
307
423
|
catch { }
|
|
308
424
|
}
|
|
425
|
+
unregister();
|
|
426
|
+
};
|
|
427
|
+
const bridgeHandle = {
|
|
428
|
+
abort: abortBridge,
|
|
429
|
+
};
|
|
430
|
+
const onAbort = () => {
|
|
431
|
+
abortBridge(signal ? abortError(signal) : undefined);
|
|
309
432
|
};
|
|
310
433
|
const startStream = (acquired, streamSink) => {
|
|
311
434
|
conn = acquired;
|
|
@@ -340,6 +463,8 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
340
463
|
};
|
|
341
464
|
sendPending(conn);
|
|
342
465
|
};
|
|
466
|
+
// highWaterMark: 0 so pull() reflects real reader demand; unread first chunks
|
|
467
|
+
// stay in BoundedSseSink and honor per-stream / aggregate queue caps.
|
|
343
468
|
const readable = new ReadableStream({
|
|
344
469
|
start(controller) {
|
|
345
470
|
streamController = controller;
|
|
@@ -349,6 +474,8 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
349
474
|
controller.error(abortError(signal));
|
|
350
475
|
return;
|
|
351
476
|
}
|
|
477
|
+
registered = true;
|
|
478
|
+
registerBridgeStream(sessionID, bridgeHandle);
|
|
352
479
|
sink = new BoundedSseSink(provider, streamKey, () => {
|
|
353
480
|
const err = sink?.getError();
|
|
354
481
|
if (!err)
|
|
@@ -410,17 +537,22 @@ export function bridgeWebSocket(wsUrl, headers, requestBody, isOAuth, context =
|
|
|
410
537
|
},
|
|
411
538
|
cancel() {
|
|
412
539
|
// Terminal-but-undrained sinks set finalized before the consumer drains; still release.
|
|
413
|
-
if (streamSettled)
|
|
540
|
+
if (streamSettled) {
|
|
541
|
+
cancelFallbackReader();
|
|
542
|
+
unregister();
|
|
414
543
|
return;
|
|
544
|
+
}
|
|
415
545
|
streamSettled = true;
|
|
416
546
|
finalized = true;
|
|
417
547
|
cleanupAbort();
|
|
548
|
+
cancelFallbackReader();
|
|
418
549
|
fallbackController.abort(new DOMException("Aborted", "AbortError"));
|
|
419
550
|
sink?.cancel();
|
|
420
551
|
if (conn)
|
|
421
552
|
abortPending(conn, new DOMException("Aborted", "AbortError"));
|
|
553
|
+
unregister();
|
|
422
554
|
},
|
|
423
|
-
});
|
|
555
|
+
}, { highWaterMark: 0 });
|
|
424
556
|
return new Response(readable, {
|
|
425
557
|
status: 200,
|
|
426
558
|
headers: {
|