@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.
Files changed (62) hide show
  1. package/gui/dist/assets/index-MUpaVatk.js +67 -0
  2. package/gui/dist/index.html +1 -1
  3. package/package.json +3 -3
  4. package/packages/ocx-notch/README.md +3 -2
  5. package/src/adapters/cursor/discovery.ts +6 -2
  6. package/src/adapters/cursor/effort-map.ts +3 -0
  7. package/src/adapters/google-antigravity-replay.ts +24 -0
  8. package/src/adapters/google.ts +16 -11
  9. package/src/chat/inbound.ts +5 -11
  10. package/src/cli/account-api.ts +9 -1
  11. package/src/cli/account-extended.ts +4 -1
  12. package/src/codex/account-label.ts +14 -1
  13. package/src/codex/account-lifecycle.ts +12 -1
  14. package/src/codex/account-namespaces.ts +21 -0
  15. package/src/codex/account-priority.ts +49 -0
  16. package/src/codex/account-store.ts +73 -10
  17. package/src/codex/auth-api.ts +312 -45
  18. package/src/codex/auth-context.ts +61 -16
  19. package/src/codex/catalog/metadata.ts +34 -12
  20. package/src/codex/catalog/parsing.ts +8 -1
  21. package/src/codex/catalog/provider-fetch.ts +24 -6
  22. package/src/codex/catalog.ts +1 -1
  23. package/src/codex/pool-rotation.ts +51 -4
  24. package/src/codex/quota.ts +154 -35
  25. package/src/codex/routing.ts +133 -33
  26. package/src/codex/warmup.ts +204 -82
  27. package/src/config.ts +84 -1
  28. package/src/lib/bounded-body.ts +13 -6
  29. package/src/lib/bun-stream-caps.ts +5 -6
  30. package/src/lib/redact.ts +13 -0
  31. package/src/oauth/index.ts +79 -12
  32. package/src/oauth/log.ts +3 -1
  33. package/src/oauth/store.ts +31 -8
  34. package/src/oauth/token-guardian.ts +130 -9
  35. package/src/providers/antigravity-models.ts +53 -24
  36. package/src/providers/codex-capacity.ts +303 -0
  37. package/src/providers/model-rename-migration.ts +147 -0
  38. package/src/providers/model-rename-startup.ts +29 -0
  39. package/src/providers/quota.ts +126 -16
  40. package/src/providers/registry.ts +262 -38
  41. package/src/responses/parser.ts +19 -12
  42. package/src/responses/spill-store.ts +14 -1
  43. package/src/responses/state.ts +108 -14
  44. package/src/router.ts +6 -0
  45. package/src/server/index.ts +9 -1
  46. package/src/server/management/logs-usage-routes.ts +1 -0
  47. package/src/server/management/oauth-account-routes.ts +8 -1
  48. package/src/server/relay.ts +10 -42
  49. package/src/server/request-log.ts +42 -1
  50. package/src/server/responses/compact.ts +16 -4
  51. package/src/server/responses/core.ts +217 -59
  52. package/src/server/responses/empty-completion-guard.ts +275 -0
  53. package/src/server/responses/encrypted-payload.ts +54 -39
  54. package/src/server/responses/fetch-helpers.ts +24 -3
  55. package/src/server/responses/ws-upstream.ts +318 -0
  56. package/src/server/sse-frame-buffer.ts +292 -0
  57. package/src/server/ws-bridge.ts +17 -11
  58. package/src/types.ts +13 -1
  59. package/src/usage/log.ts +24 -0
  60. package/src/usage/summary.ts +152 -2
  61. package/vendor/ocx-notch/win32-x64/ocx-notch.exe +0 -0
  62. 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, { modelId: selectedModelId });
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.apiKey) headers.set("authorization", `Bearer ${resolveEnvValue(compactProvider.apiKey)}`);
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),