@coseung2/opencodex 2.8.0-cs.12 → 2.8.0-cs.14
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/gui/dist/assets/index-MUpaVatk.js +67 -0
- package/gui/dist/index.html +1 -1
- package/package.json +3 -3
- package/packages/ocx-notch/README.md +3 -2
- package/src/adapters/cursor/discovery.ts +6 -2
- package/src/adapters/cursor/effort-map.ts +3 -0
- package/src/adapters/google-antigravity-replay.ts +24 -0
- package/src/adapters/google.ts +16 -11
- package/src/chat/inbound.ts +5 -11
- package/src/cli/account-api.ts +9 -1
- package/src/cli/account-extended.ts +4 -1
- package/src/codex/account-label.ts +14 -1
- package/src/codex/account-lifecycle.ts +12 -1
- package/src/codex/account-namespaces.ts +21 -0
- package/src/codex/account-priority.ts +49 -0
- package/src/codex/account-store.ts +73 -10
- package/src/codex/auth-api.ts +312 -45
- package/src/codex/auth-context.ts +61 -16
- package/src/codex/catalog/metadata.ts +34 -12
- package/src/codex/catalog/parsing.ts +8 -1
- package/src/codex/catalog/provider-fetch.ts +24 -6
- package/src/codex/catalog.ts +1 -1
- package/src/codex/pool-rotation.ts +51 -4
- package/src/codex/quota.ts +154 -35
- package/src/codex/routing.ts +133 -33
- package/src/codex/warmup.ts +204 -82
- package/src/config.ts +84 -1
- package/src/lib/bounded-body.ts +13 -6
- package/src/lib/bun-stream-caps.ts +5 -6
- package/src/lib/redact.ts +13 -0
- package/src/oauth/index.ts +79 -12
- package/src/oauth/log.ts +3 -1
- package/src/oauth/store.ts +31 -8
- package/src/oauth/token-guardian.ts +130 -9
- package/src/providers/antigravity-models.ts +53 -24
- package/src/providers/codex-capacity.ts +303 -0
- package/src/providers/model-rename-migration.ts +147 -0
- package/src/providers/model-rename-startup.ts +29 -0
- package/src/providers/quota.ts +126 -16
- package/src/providers/registry.ts +262 -38
- package/src/responses/parser.ts +19 -12
- package/src/responses/spill-store.ts +14 -1
- package/src/responses/state.ts +108 -14
- package/src/router.ts +6 -0
- package/src/server/index.ts +9 -1
- package/src/server/management/logs-usage-routes.ts +1 -0
- package/src/server/management/oauth-account-routes.ts +8 -1
- package/src/server/relay.ts +10 -42
- package/src/server/request-log.ts +42 -1
- package/src/server/responses/compact.ts +16 -4
- package/src/server/responses/core.ts +217 -59
- package/src/server/responses/empty-completion-guard.ts +275 -0
- package/src/server/responses/encrypted-payload.ts +54 -39
- package/src/server/responses/fetch-helpers.ts +24 -3
- package/src/server/responses/ws-upstream.ts +318 -0
- package/src/server/sse-frame-buffer.ts +292 -0
- package/src/server/ws-bridge.ts +17 -11
- package/src/types.ts +13 -1
- package/src/usage/log.ts +24 -0
- package/src/usage/summary.ts +152 -2
- package/vendor/ocx-notch/win32-x64/ocx-notch.exe +0 -0
- package/gui/dist/assets/index-GgF1IpQa.js +0 -67
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
codexProbeQuotaScope,
|
|
55
55
|
type CodexAuthContext,
|
|
56
56
|
} from "../../codex/auth-context";
|
|
57
|
+
import { codexAuthContextLogLabel } from "../../codex/account-label";
|
|
57
58
|
import {
|
|
58
59
|
formatCodexProviderForLog,
|
|
59
60
|
recordCodexUpstreamOutcome,
|
|
@@ -184,6 +185,10 @@ export async function handleResponsesCompact(
|
|
|
184
185
|
return formatErrorResponse(404, "invalid_request_error", err instanceof Error ? err.message : String(err));
|
|
185
186
|
}
|
|
186
187
|
const selectedModelId = route.modelId;
|
|
188
|
+
const qualifiedRoute = route as typeof route & {
|
|
189
|
+
codexAccountId?: string;
|
|
190
|
+
codexAccountNamespace?: string;
|
|
191
|
+
};
|
|
187
192
|
logCtx.requestedModel = raw.model;
|
|
188
193
|
logCtx.model = selectedModelId;
|
|
189
194
|
logCtx.provider = route.providerName;
|
|
@@ -197,7 +202,7 @@ export async function handleResponsesCompact(
|
|
|
197
202
|
logCtx.resolvedModel = route.modelId;
|
|
198
203
|
}
|
|
199
204
|
|
|
200
|
-
if (route.codexAccountMode === "direct") {
|
|
205
|
+
if (route.codexAccountMode === "direct" && qualifiedRoute.codexAccountId === undefined) {
|
|
201
206
|
try { validateForwardAdmissionCredential(req.headers, config); }
|
|
202
207
|
catch (err) {
|
|
203
208
|
if (err instanceof ForwardAdmissionCredentialError) return formatErrorResponse(401, "authentication_error", err.message);
|
|
@@ -218,7 +223,11 @@ export async function handleResponsesCompact(
|
|
|
218
223
|
const headers = new Headers({ "content-type": "application/json" });
|
|
219
224
|
try {
|
|
220
225
|
if (route.codexAccountMode) {
|
|
221
|
-
authCtx = await resolveCodexAuthContext(req.headers, config, route.codexAccountMode, {
|
|
226
|
+
authCtx = await resolveCodexAuthContext(req.headers, config, route.codexAccountMode, {
|
|
227
|
+
accountId: qualifiedRoute.codexAccountId,
|
|
228
|
+
modelId: selectedModelId,
|
|
229
|
+
});
|
|
230
|
+
logCtx.accountLogLabel = codexAuthContextLogLabel(authCtx, config);
|
|
222
231
|
const selected = headersForCodexAuthContext(req.headers, authCtx);
|
|
223
232
|
compactProvider = applyCodexAuthContextToProvider(route.provider, authCtx, route.codexAccountMode);
|
|
224
233
|
for (const name of FORWARD_HEADERS) {
|
|
@@ -233,7 +242,7 @@ export async function handleResponsesCompact(
|
|
|
233
242
|
}
|
|
234
243
|
} catch (err) {
|
|
235
244
|
if (err instanceof CodexAccountCooldownError) {
|
|
236
|
-
return cooldownErrorResponse(err);
|
|
245
|
+
return cooldownErrorResponse(err, Date.now(), qualifiedRoute.codexAccountNamespace);
|
|
237
246
|
}
|
|
238
247
|
if (err instanceof CodexThreadAffinityExpiredError) {
|
|
239
248
|
return formatErrorResponse(409, "invalid_request_error", "Codex thread account affinity expired; start a new session");
|
|
@@ -247,7 +256,9 @@ export async function handleResponsesCompact(
|
|
|
247
256
|
throw err;
|
|
248
257
|
}
|
|
249
258
|
const base = (compactProvider.baseUrl ?? "").replace(/\/$/, "");
|
|
250
|
-
if (compactProvider.
|
|
259
|
+
if (compactProvider.authMode !== "forward" && compactProvider.apiKey) {
|
|
260
|
+
headers.set("authorization", `Bearer ${resolveEnvValue(compactProvider.apiKey)}`);
|
|
261
|
+
}
|
|
251
262
|
const { reasoning: _reasoning, ...compactBodyRaw } = raw as typeof raw & { reasoning?: unknown };
|
|
252
263
|
// The regular /v1/responses path applies sanitizeReasoningInputContent via the adapter's
|
|
253
264
|
// buildRequest, but the compact endpoint forwards directly. Apply the same sanitizer here
|
|
@@ -264,6 +275,7 @@ export async function handleResponsesCompact(
|
|
|
264
275
|
recordCodexUpstreamOutcome(config, authCtx.accountId, outcome, {
|
|
265
276
|
...meta,
|
|
266
277
|
threadId: compactThreadId,
|
|
278
|
+
fixedAccount: authCtx.fixedAccount,
|
|
267
279
|
modelId: selectedModelId,
|
|
268
280
|
probeLeaseId: codexProbeLeaseId(authCtx),
|
|
269
281
|
probeQuotaScope: codexProbeQuotaScope(authCtx),
|