@bitkyc08/opencodex 2.55.0 → 2.57.0
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/bin/ocx.mjs +10 -0
- package/gui/dist/assets/{index-BBOZWGB6.css → index-C5-RdDmD.css} +1 -1
- package/gui/dist/assets/{index-VuoiWj9J.js → index-Cz7CLdif.js} +21 -21
- package/gui/dist/index.html +2 -2
- package/package.json +4 -3
- package/src/adapters/base.ts +21 -0
- package/src/adapters/codebuddy/adapter.ts +2 -1
- package/src/adapters/codebuddy/scaffold-guard.ts +248 -0
- package/src/adapters/command-code.ts +1 -1
- package/src/adapters/cursor/envelope-echo.ts +8 -2
- package/src/adapters/cursor/transport-retry.ts +46 -1
- package/src/adapters/cursor.ts +4 -0
- package/src/adapters/google.ts +7 -7
- package/src/adapters/kiro/adapter.ts +42 -1
- package/src/adapters/kiro/payload.ts +17 -3
- package/src/adapters/kiro/reasoning.ts +70 -7
- package/src/adapters/kiro/stream.ts +8 -2
- package/src/adapters/kiro/wire.ts +2 -1
- package/src/adapters/kiro-events.ts +21 -13
- package/src/adapters/kiro-retry.ts +23 -4
- package/src/adapters/openai-chat/errors.ts +116 -0
- package/src/adapters/openai-chat/messages.ts +346 -0
- package/src/adapters/openai-chat/passthrough.ts +146 -0
- package/src/adapters/openai-chat/response-events.ts +117 -0
- package/src/adapters/openai-chat/tool-call-validation.ts +200 -0
- package/src/adapters/openai-chat/tool-name-registry.ts +166 -0
- package/src/adapters/openai-chat/tool-schema.ts +495 -0
- package/src/adapters/openai-chat/wire.ts +50 -0
- package/src/adapters/openai-chat.ts +40 -1452
- package/src/adapters/openai-responses/canonical-forward.ts +202 -0
- package/src/adapters/openai-responses/image-gen.ts +406 -0
- package/src/adapters/openai-responses/internal.ts +3 -0
- package/src/adapters/openai-responses/passthrough.ts +642 -0
- package/src/adapters/openai-responses/prompt-cache.ts +83 -0
- package/src/adapters/openai-responses/reasoning.ts +220 -0
- package/src/adapters/openai-responses/request-strips.ts +185 -0
- package/src/adapters/openai-responses/tool-output-recovery.ts +509 -0
- package/src/adapters/openai-responses/tool-schema.ts +293 -0
- package/src/adapters/openai-responses/web-search.ts +156 -0
- package/src/adapters/openai-responses.ts +4 -2625
- package/src/bridge/errors.ts +58 -0
- package/src/bridge/internal.ts +174 -0
- package/src/bridge/response-json.ts +630 -0
- package/src/bridge/sse.ts +1462 -0
- package/src/bridge.ts +5 -2204
- package/src/chat/inbound.ts +12 -1
- package/src/claude/desktop-profile.ts +66 -9
- package/src/claude/outbound.ts +18 -0
- package/src/cli/account-main.ts +1 -1
- package/src/cli/capabilities.ts +2 -2
- package/src/cli/combo.ts +10 -1
- package/src/cli/index.ts +48 -5
- package/src/cli/registry.ts +2 -1
- package/src/cli/system-command.ts +4 -4
- package/src/clients/config-export.ts +7 -3
- package/src/codex/account-label.ts +14 -3
- package/src/codex/account-lifecycle.ts +3 -0
- package/src/codex/account-store.ts +184 -35
- package/src/codex/account-usability.ts +21 -0
- package/src/codex/auth-api/account-list.ts +507 -0
- package/src/codex/auth-api/http.ts +32 -0
- package/src/codex/auth-api/login-flow.ts +566 -0
- package/src/codex/auth-api/login-state.ts +64 -0
- package/src/codex/auth-api/main-account-probe.ts +331 -0
- package/src/codex/auth-api/pool-mode-gate.ts +274 -0
- package/src/codex/auth-api/pool-quota-probe.ts +512 -0
- package/src/codex/auth-api/reset-credit-service.ts +431 -0
- package/src/codex/auth-api/routes.ts +425 -0
- package/src/codex/auth-api/runtime-config.ts +48 -0
- package/src/codex/auth-api.ts +27 -3118
- package/src/codex/auth-context.ts +252 -35
- package/src/codex/catalog/aggregation.ts +80 -1
- package/src/codex/catalog/auto-review.ts +507 -0
- package/src/codex/catalog/build-entries.ts +981 -0
- package/src/codex/catalog/combo-member.ts +375 -0
- package/src/codex/catalog/derive-entry.ts +229 -0
- package/src/codex/catalog/effort.ts +0 -1
- package/src/codex/catalog/gated-native-warn.ts +63 -0
- package/src/codex/catalog/gather-capture.ts +533 -0
- package/src/codex/catalog/model-hints.ts +691 -0
- package/src/codex/catalog/model-visibility.ts +305 -0
- package/src/codex/catalog/provider-fetch.ts +52 -2942
- package/src/codex/catalog/provider-models.ts +685 -0
- package/src/codex/catalog/remote.ts +30 -0
- package/src/codex/catalog/restore.ts +132 -0
- package/src/codex/catalog/retained-sync.ts +714 -0
- package/src/codex/catalog/routed-gather.ts +895 -0
- package/src/codex/catalog/subagent-roster.ts +176 -0
- package/src/codex/catalog/sync.ts +52 -2698
- package/src/codex/cli-install-provenance.ts +7 -1
- package/src/codex/convergence.ts +7 -2
- package/src/codex/desktop-app/types.ts +11 -2
- package/src/codex/desktop-app/windows.ts +5 -5
- package/src/codex/inject/config-toml.ts +563 -0
- package/src/codex/inject/remove.ts +192 -0
- package/src/codex/inject/restore.ts +567 -0
- package/src/codex/inject/routing-classify.ts +109 -0
- package/src/codex/inject/routing-target.ts +125 -0
- package/src/codex/inject.ts +89 -1444
- package/src/codex/lineage.ts +458 -0
- package/src/codex/model-entitlements.ts +152 -15
- package/src/codex/pool-refresh-backoff.ts +161 -0
- package/src/codex/quota-rejection.ts +104 -15
- package/src/codex/routing/active-account.ts +194 -0
- package/src/codex/routing/cache-affinity.ts +70 -0
- package/src/codex/routing/cooldown-math.ts +285 -0
- package/src/codex/routing/health-store.ts +402 -0
- package/src/codex/routing/probe-lease.ts +358 -0
- package/src/codex/routing/selection.ts +780 -0
- package/src/codex/routing/thread-affinity.ts +586 -0
- package/src/codex/routing/transient-hold-dispatch.ts +141 -0
- package/src/codex/routing.ts +370 -2271
- package/src/codex/shim-fingerprint.ts +223 -0
- package/src/codex/shim-inspect.ts +175 -0
- package/src/codex/shim-probe.ts +367 -0
- package/src/codex/shim-restore-lock.ts +169 -0
- package/src/codex/shim-state-file.ts +151 -0
- package/src/codex/shim-templates.ts +265 -0
- package/src/codex/shim.ts +48 -1268
- package/src/codex/warmup.ts +1 -1
- package/src/combos/failover.ts +85 -0
- package/src/combos/request.ts +17 -10
- package/src/combos/types.ts +23 -2
- package/src/config/diagnostics.ts +705 -0
- package/src/config/feature-flags.ts +55 -0
- package/src/config/live-reconcile.ts +403 -0
- package/src/config/load-degrade.ts +880 -0
- package/src/config/mutation-lock.ts +244 -0
- package/src/config/openai-tier-backup.ts +268 -0
- package/src/config/pending-teardown.ts +31 -0
- package/src/config/persist-unlocked.ts +92 -0
- package/src/config/proxy-env.ts +188 -0
- package/src/config/salvage.ts +244 -0
- package/src/config/schema/config-schema.ts +640 -0
- package/src/config/schema/leaf-validators.ts +855 -0
- package/src/config/warn-memo.ts +28 -0
- package/src/config.ts +234 -4481
- package/src/generated/compatibility-version.json +649 -121
- package/src/images/loop.ts +1 -1
- package/src/lib/errors.ts +17 -0
- package/src/lib/request-execution-budget.ts +198 -23
- package/src/lib/spend-reservation-ledger.ts +958 -0
- package/src/lib/state-store-registrations.ts +6 -2
- package/src/lib/test-home-guard.ts +85 -1
- package/src/lib/upstream-retry.ts +132 -21
- package/src/lib/windows-elevation.ts +76 -14
- package/src/lib/workflow-budget.ts +553 -30
- package/src/oauth/index.ts +2 -2
- package/src/oauth/key-providers.ts +2 -2
- package/src/providers/kiro-models.ts +4 -3
- package/src/providers/label.ts +19 -1
- package/src/providers/model-discovery.ts +16 -0
- package/src/providers/quota/account-cache.ts +441 -0
- package/src/providers/quota/antigravity.ts +295 -0
- package/src/providers/quota/report-cache.ts +320 -0
- package/src/providers/quota/vendor-probes-key.ts +1243 -0
- package/src/providers/quota/vendor-probes-oauth.ts +590 -0
- package/src/providers/quota.ts +324 -3079
- package/src/providers/registry/entries-core.ts +1228 -0
- package/src/providers/registry/entries-extended.ts +1213 -0
- package/src/providers/registry/model-seeds.ts +912 -0
- package/src/providers/registry/types.ts +352 -0
- package/src/providers/registry.ts +24 -3536
- package/src/responses/continuation-ownership.ts +29 -0
- package/src/responses/reasoning-envelope.ts +6 -3
- package/src/responses/state/replay-fingerprint.ts +80 -0
- package/src/responses/state/snapshot-codec.ts +104 -0
- package/src/responses/state/spill-failure.ts +118 -0
- package/src/responses/state/spill-queue.ts +665 -0
- package/src/responses/state/temp-recovery.ts +257 -0
- package/src/responses/state.ts +82 -1143
- package/src/routing/identity-domains.ts +456 -0
- package/src/routing/probe-lease.ts +613 -0
- package/src/server/chat-completions.ts +3 -1
- package/src/server/chat-native.ts +37 -9
- package/src/server/index/bounded-request.ts +88 -0
- package/src/server/index/live-sideband.ts +601 -0
- package/src/server/index/serve-options.ts +1766 -0
- package/src/server/index/startup-warnings.ts +213 -0
- package/src/server/index/websocket-handler.ts +339 -0
- package/src/server/index.ts +45 -2552
- package/src/server/inspection-tee.ts +107 -0
- package/src/server/live.ts +46 -1
- package/src/server/management/combo-routes.ts +10 -1
- package/src/server/management/route-registry.ts +26 -23
- package/src/server/management/shared.ts +8 -5
- package/src/server/management/workflow-budget-routes.ts +133 -0
- package/src/server/management-api.ts +12 -0
- package/src/server/relay-eager.ts +2 -0
- package/src/server/relay.ts +14 -19
- package/src/server/request-log-conversation.ts +9 -7
- package/src/server/request-log.ts +372 -4
- package/src/server/response-log-body.ts +153 -0
- package/src/server/responses/account-change-state.ts +307 -0
- package/src/server/responses/adapter-continuation.ts +540 -0
- package/src/server/responses/adapter-delivery.ts +208 -0
- package/src/server/responses/adapter-dispatch.ts +1042 -0
- package/src/server/responses/codex-ws-wire.ts +5 -0
- package/src/server/responses/collaboration.ts +74 -4
- package/src/server/responses/combo-session-recall.ts +68 -8
- package/src/server/responses/compact.ts +113 -17
- package/src/server/responses/completion-policy.ts +33 -0
- package/src/server/responses/core-auth.ts +529 -0
- package/src/server/responses/core-codex-account.ts +907 -0
- package/src/server/responses/core-combo-failure.ts +210 -0
- package/src/server/responses/core-combo.ts +787 -0
- package/src/server/responses/core-errors.ts +170 -0
- package/src/server/responses/core-lifetime.ts +95 -0
- package/src/server/responses/core-normalize.ts +350 -0
- package/src/server/responses/core-opaque-recovery.ts +380 -0
- package/src/server/responses/core-options.ts +159 -0
- package/src/server/responses/core-replay.ts +298 -0
- package/src/server/responses/core.ts +192 -8893
- package/src/server/responses/encrypted-payload.ts +0 -1
- package/src/server/responses/input-admission.ts +126 -6
- package/src/server/responses/passthrough-delivery.ts +869 -0
- package/src/server/responses/passthrough-dispatch.ts +1494 -0
- package/src/server/responses/passthrough-error.ts +38 -2
- package/src/server/responses/passthrough-execution.ts +54 -0
- package/src/server/responses/request-prepare.ts +1080 -0
- package/src/server/responses/request-send-budget.ts +259 -0
- package/src/server/responses/request-sidecar-auth.ts +149 -0
- package/src/server/responses/request-spend.ts +147 -0
- package/src/server/responses/request-transport.ts +803 -0
- package/src/server/responses/response-effects.ts +157 -0
- package/src/server/responses/run-turn-execution.ts +476 -0
- package/src/server/responses/sidecar-execution.ts +463 -0
- package/src/server/responses/terminal-guard.ts +65 -4
- package/src/server/responses-image-gen-repair.ts +1 -1
- package/src/server/responses-undeclared-tool-guard.ts +9 -5
- package/src/server/workflow-refusal.ts +84 -0
- package/src/service/windows-ops.ts +210 -16
- package/src/service/windows-scheduler.ts +28 -21
- package/src/service.ts +1 -1
- package/src/types/config.ts +34 -1
- package/src/types/request.ts +8 -5
- package/src/types/tools.ts +24 -0
- package/src/types.ts +2 -0
- package/src/update/index.ts +10 -0
- package/src/update/stop-contract.d.mts +1 -0
- package/src/update/stop-contract.mjs +19 -0
- package/src/update/stop-decision.d.mts +1 -1
- package/src/update/stop-decision.mjs +12 -3
- package/src/usage/log.ts +147 -1
- package/src/usage/summary.ts +171 -21
- package/src/vision/anthropic-describe.ts +1 -1
- package/src/vision/describe.ts +5 -5
- package/src/web-search/anthropic-executor.ts +1 -1
- package/src/web-search/exa-executor.ts +1 -1
- package/src/web-search/executor.ts +1 -1
- package/src/web-search/gemini-executor.ts +1 -1
- package/src/web-search/loop.ts +1 -1
- package/src/web-search/ollama-executor.ts +1 -1
- package/src/web-search/parse.ts +67 -14
- package/src/web-search/passthrough-bridge.ts +64 -31
- package/src/web-search/xai-executor.ts +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { formatErrorResponse } from "../../bridge";
|
|
2
2
|
import { isCyberPolicyCode, isCyberPolicyMessage } from "../../lib/errors";
|
|
3
|
+
import { isReplayRefusalCode, UPSTREAM_RESET_REPLAY_REFUSED_CODE } from "../../lib/upstream-retry";
|
|
3
4
|
import {
|
|
4
5
|
resolveClientRetryAfter,
|
|
5
6
|
validateClientRetryAfterHeader,
|
|
@@ -24,6 +25,26 @@ function isCyberPolicyBody(body: string): boolean {
|
|
|
24
25
|
return false;
|
|
25
26
|
}
|
|
26
27
|
|
|
28
|
+
/**
|
|
29
|
+
* True for a body this proxy wrote to refuse replaying an ambiguous pre-header reset.
|
|
30
|
+
*
|
|
31
|
+
* It is read off the body rather than a marker because this formatter is handed bytes, not
|
|
32
|
+
* the response they came from, and the refusal reaches it after the original body was read.
|
|
33
|
+
* The code is this proxy's own, so an upstream echoing it is not a case worth widening for.
|
|
34
|
+
*/
|
|
35
|
+
function isReplayRefusalBody(body: string): boolean {
|
|
36
|
+
if (!body.includes(UPSTREAM_RESET_REPLAY_REFUSED_CODE)) return false;
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(body) as Record<string, unknown>;
|
|
39
|
+
const error = parsed.error && typeof parsed.error === "object" && !Array.isArray(parsed.error)
|
|
40
|
+
? parsed.error as Record<string, unknown>
|
|
41
|
+
: undefined;
|
|
42
|
+
return isReplayRefusalCode(error?.code) || isReplayRefusalCode(parsed.code);
|
|
43
|
+
} catch {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
27
48
|
/**
|
|
28
49
|
* Passthrough adapters historically relayed upstream non-2xx bodies verbatim.
|
|
29
50
|
* Codex maps an *empty* body to the literal client string "Unknown error"
|
|
@@ -38,6 +59,9 @@ function isCyberPolicyBody(body: string): boolean {
|
|
|
38
59
|
* - missing/malformed values are replaced when resolveClientRetryAfter yields a value
|
|
39
60
|
* - malformed/expired values are removed when the resolver returns undefined
|
|
40
61
|
* (e.g. quota-exhausted 429s must not keep junk headers or get the synthetic "2")
|
|
62
|
+
* - a replay refusal this proxy wrote gets none and keeps none: the whole point of the
|
|
63
|
+
* refusal is that the turn may already be running, and the synthetic default for a
|
|
64
|
+
* retryable 429 is a direct instruction to the client to send it a second time
|
|
41
65
|
*/
|
|
42
66
|
export function formatPassthroughUpstreamError(
|
|
43
67
|
status: number,
|
|
@@ -46,6 +70,13 @@ export function formatPassthroughUpstreamError(
|
|
|
46
70
|
statusText?: string;
|
|
47
71
|
headers?: Headers;
|
|
48
72
|
now?: number;
|
|
73
|
+
/**
|
|
74
|
+
* Provenance from the caller that still holds the response: this body is a refusal this
|
|
75
|
+
* proxy synthesized. The body check below is the fallback for a re-wrapped body, and it
|
|
76
|
+
* cannot answer at all when the bounded read returned nothing display-safe -- which is
|
|
77
|
+
* precisely when the empty-body branch would invent the retryable-429 default.
|
|
78
|
+
*/
|
|
79
|
+
replayRefusal?: boolean;
|
|
49
80
|
},
|
|
50
81
|
): Response {
|
|
51
82
|
const trimmed = bodyText.trim();
|
|
@@ -53,7 +84,12 @@ export function formatPassthroughUpstreamError(
|
|
|
53
84
|
const upstreamRetryAfter = options?.headers?.get("retry-after")?.trim() || undefined;
|
|
54
85
|
const originalValid = validateClientRetryAfterHeader(upstreamRetryAfter, now);
|
|
55
86
|
const cyberPolicyFailure = isCyberPolicyBody(trimmed);
|
|
56
|
-
|
|
87
|
+
// Two different reasons to answer with no wait at all, handled the same way: a hard policy
|
|
88
|
+
// block will not become servable, and a refusal we made was never a rate limit.
|
|
89
|
+
const suppressRetryAfter = cyberPolicyFailure
|
|
90
|
+
|| options?.replayRefusal === true
|
|
91
|
+
|| isReplayRefusalBody(trimmed);
|
|
92
|
+
const resolved = suppressRetryAfter
|
|
57
93
|
? undefined
|
|
58
94
|
: resolveClientRetryAfter({
|
|
59
95
|
status,
|
|
@@ -64,7 +100,7 @@ export function formatPassthroughUpstreamError(
|
|
|
64
100
|
|
|
65
101
|
if (trimmed) {
|
|
66
102
|
const needsSet = resolved !== undefined && upstreamRetryAfter !== resolved;
|
|
67
|
-
const needsDelete = (
|
|
103
|
+
const needsDelete = (suppressRetryAfter && upstreamRetryAfter !== undefined)
|
|
68
104
|
|| (resolved === undefined
|
|
69
105
|
&& upstreamRetryAfter !== undefined
|
|
70
106
|
&& originalValid === undefined);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ResponsesRequestContext,
|
|
3
|
+
ResponsesAdmissionState,
|
|
4
|
+
PassthroughAdmissionState,
|
|
5
|
+
} from "./core-options";
|
|
6
|
+
import type { PreparedResponsesRequest } from "./request-prepare";
|
|
7
|
+
import type { ResponsesTransport } from "./request-transport";
|
|
8
|
+
import type { ResponsesSidecarAuth } from "./request-sidecar-auth";
|
|
9
|
+
import type { ResponsesEffects } from "./response-effects";
|
|
10
|
+
import type { ResponsesSendBudget } from "./request-send-budget";
|
|
11
|
+
import { preparePassthroughExchange } from "./passthrough-dispatch";
|
|
12
|
+
import { deliverPassthroughResponse } from "./passthrough-delivery";
|
|
13
|
+
import { releaseUpstreamHostAdmission } from "../../codex/upstream-host-health";
|
|
14
|
+
import { releaseCodexAuthContextProbeLease } from "../../codex/auth-context";
|
|
15
|
+
|
|
16
|
+
/** Owns the native host lease across dispatch, recovery, and response construction. */
|
|
17
|
+
export async function executePassthroughResponse(
|
|
18
|
+
requestContext: ResponsesRequestContext,
|
|
19
|
+
admissionState: ResponsesAdmissionState,
|
|
20
|
+
requestState: PreparedResponsesRequest,
|
|
21
|
+
transportState: ResponsesTransport,
|
|
22
|
+
sidecarState: ResponsesSidecarAuth,
|
|
23
|
+
responseEffects: ResponsesEffects,
|
|
24
|
+
sendBudgetState: ResponsesSendBudget,
|
|
25
|
+
): Promise<Response> {
|
|
26
|
+
const nativeHostState: PassthroughAdmissionState = { lease: admissionState.pendingHostAdmissionLease };
|
|
27
|
+
admissionState.pendingHostAdmissionLease = null;
|
|
28
|
+
try {
|
|
29
|
+
const nativeExchange = await preparePassthroughExchange(
|
|
30
|
+
requestContext,
|
|
31
|
+
admissionState,
|
|
32
|
+
nativeHostState,
|
|
33
|
+
requestState,
|
|
34
|
+
transportState,
|
|
35
|
+
responseEffects,
|
|
36
|
+
sendBudgetState,
|
|
37
|
+
);
|
|
38
|
+
if (nativeExchange instanceof Response) return nativeExchange;
|
|
39
|
+
return await deliverPassthroughResponse(
|
|
40
|
+
requestContext,
|
|
41
|
+
admissionState,
|
|
42
|
+
requestState,
|
|
43
|
+
transportState,
|
|
44
|
+
sidecarState,
|
|
45
|
+
responseEffects,
|
|
46
|
+
nativeExchange,
|
|
47
|
+
);
|
|
48
|
+
} finally {
|
|
49
|
+
if (nativeHostState.lease) {
|
|
50
|
+
releaseUpstreamHostAdmission(nativeHostState.lease);
|
|
51
|
+
releaseCodexAuthContextProbeLease(admissionState.authCtx);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|