@bitkyc08/opencodex 2.55.0-preview.20260914 → 2.56.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/gui/dist/assets/{index-DH2PUHqr.js → index-D4zuyIxQ.js} +1 -1
- package/gui/dist/index.html +1 -1
- package/package.json +2 -1
- package/src/adapters/base.ts +21 -0
- package/src/adapters/cursor/transport-retry.ts +46 -1
- package/src/adapters/cursor.ts +4 -0
- package/src/adapters/kiro/adapter.ts +42 -1
- 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-schema.ts +477 -0
- package/src/adapters/openai-chat/wire.ts +50 -0
- package/src/adapters/openai-chat.ts +33 -1445
- 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 +611 -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 +34 -0
- package/src/bridge/internal.ts +174 -0
- package/src/bridge/response-json.ts +624 -0
- package/src/bridge/sse.ts +1444 -0
- package/src/bridge.ts +5 -2204
- package/src/chat/inbound.ts +12 -1
- package/src/codex/account-lifecycle.ts +3 -0
- package/src/codex/account-store.ts +71 -9
- 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 +554 -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 +422 -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 +95 -28
- 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 +304 -0
- package/src/codex/catalog/provider-fetch.ts +52 -2942
- package/src/codex/catalog/provider-models.ts +685 -0
- package/src/codex/catalog/restore.ts +132 -0
- package/src/codex/catalog/retained-sync.ts +706 -0
- package/src/codex/catalog/routed-gather.ts +858 -0
- package/src/codex/catalog/subagent-roster.ts +176 -0
- package/src/codex/catalog/sync.ts +52 -2698
- package/src/codex/inject/config-toml.ts +563 -0
- package/src/codex/inject/remove.ts +192 -0
- package/src/codex/inject/restore.ts +540 -0
- package/src/codex/inject/routing-classify.ts +109 -0
- package/src/codex/inject/routing-target.ts +125 -0
- package/src/codex/inject.ts +81 -1436
- package/src/codex/lineage.ts +458 -0
- package/src/codex/pool-refresh-backoff.ts +152 -0
- package/src/codex/routing/active-account.ts +194 -0
- package/src/codex/routing/cooldown-math.ts +275 -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 +703 -0
- package/src/codex/routing/thread-affinity.ts +538 -0
- package/src/codex/routing.ts +353 -2234
- 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/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/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 +539 -39
- package/src/lib/request-execution-budget.ts +69 -20
- package/src/lib/spend-reservation-ledger.ts +940 -0
- package/src/lib/upstream-retry.ts +55 -11
- package/src/lib/workflow-budget.ts +553 -30
- 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 +1221 -0
- package/src/providers/registry/entries-extended.ts +1204 -0
- package/src/providers/registry/model-seeds.ts +908 -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/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 +449 -0
- package/src/routing/probe-lease.ts +511 -0
- package/src/server/index/bounded-request.ts +88 -0
- package/src/server/index/live-sideband.ts +565 -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 +335 -0
- package/src/server/index.ts +40 -2547
- 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/request-log-conversation.ts +9 -7
- package/src/server/request-log.ts +245 -1
- package/src/server/responses/account-change-state.ts +233 -0
- package/src/server/responses/adapter-continuation.ts +514 -0
- package/src/server/responses/adapter-delivery.ts +214 -0
- package/src/server/responses/adapter-dispatch.ts +971 -0
- package/src/server/responses/compact.ts +59 -4
- package/src/server/responses/completion-policy.ts +33 -0
- package/src/server/responses/core-auth.ts +527 -0
- package/src/server/responses/core-codex-account.ts +859 -0
- package/src/server/responses/core-combo-failure.ts +210 -0
- package/src/server/responses/core-combo.ts +707 -0
- package/src/server/responses/core-errors.ts +152 -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 +225 -0
- package/src/server/responses/core.ts +192 -8893
- package/src/server/responses/passthrough-delivery.ts +856 -0
- package/src/server/responses/passthrough-dispatch.ts +1476 -0
- package/src/server/responses/passthrough-execution.ts +54 -0
- package/src/server/responses/request-prepare.ts +970 -0
- package/src/server/responses/request-send-budget.ts +164 -0
- package/src/server/responses/request-sidecar-auth.ts +149 -0
- package/src/server/responses/request-transport.ts +744 -0
- package/src/server/responses/response-effects.ts +157 -0
- package/src/server/responses/run-turn-execution.ts +448 -0
- package/src/server/responses/sidecar-execution.ts +469 -0
- package/src/server/responses-image-gen-repair.ts +1 -1
- package/src/server/workflow-refusal.ts +84 -0
- package/src/types/config.ts +30 -0
- package/src/usage/log.ts +146 -0
- package/src/usage/summary.ts +171 -21
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import type { ResponsesRequestContext } from "./core-options";
|
|
2
|
+
import type { PreparedResponsesRequest } from "./request-prepare";
|
|
3
|
+
import type { ResponsesTransport } from "./request-transport";
|
|
4
|
+
import type { ResponsesSidecarAuth } from "./request-sidecar-auth";
|
|
5
|
+
import type { ResponsesEffects } from "./response-effects";
|
|
6
|
+
import type { ResponsesCompletionPolicy } from "./completion-policy";
|
|
7
|
+
import type { AdapterExchange } from "./adapter-dispatch";
|
|
8
|
+
import type { AdapterContinuations } from "./adapter-continuation";
|
|
9
|
+
import { guardTerminalEventStream } from "./terminal-guard";
|
|
10
|
+
import { guardEmptyCompletionEventStream } from "./empty-completion-guard";
|
|
11
|
+
import { bridgeToResponsesSSE, buildResponseJSON, formatErrorResponse } from "../../bridge";
|
|
12
|
+
import type { OcxProviderContinuationState, AdapterEvent } from "../../types";
|
|
13
|
+
import { rememberResponseState } from "../../responses/state";
|
|
14
|
+
import { trackStreamLifetime } from "../lifecycle";
|
|
15
|
+
import { awaitThoughtSignatureDurability } from "../../responses/thought-signature-replay";
|
|
16
|
+
import { adapterResponseReachedServingTerminal } from "./core-replay";
|
|
17
|
+
|
|
18
|
+
/** One responsibility of the Responses request pipeline; state owners are explicit. */
|
|
19
|
+
export async function deliverAdapterResponse(
|
|
20
|
+
requestContext: Pick<ResponsesRequestContext, "logCtx" | "options" | "config">,
|
|
21
|
+
requestState: Pick<
|
|
22
|
+
PreparedResponsesRequest,
|
|
23
|
+
| "parsed"
|
|
24
|
+
| "translatorBudget"
|
|
25
|
+
| "toolBridgeMaps"
|
|
26
|
+
| "rememberKiroDeliveredFinalAnswer"
|
|
27
|
+
| "responseStateOptions"
|
|
28
|
+
>,
|
|
29
|
+
transportState: Pick<ResponsesTransport, "activeAdapter">,
|
|
30
|
+
sidecarState: Pick<ResponsesSidecarAuth, "routedCompaction">,
|
|
31
|
+
responseEffects: Pick<
|
|
32
|
+
ResponsesEffects,
|
|
33
|
+
| "cancelResponseCompletion"
|
|
34
|
+
| "commitReasoningReplayServingRoute"
|
|
35
|
+
| "continuationStateForResponse"
|
|
36
|
+
| "notifyResponseComplete"
|
|
37
|
+
>,
|
|
38
|
+
completionPolicy: Pick<ResponsesCompletionPolicy, "emptyCompletionGuardEnabled">,
|
|
39
|
+
adapterExchange: Pick<AdapterExchange, "upstreamResponse" | "upstream" | "cleanupUpstreamAbort">,
|
|
40
|
+
continuationState: Pick<AdapterContinuations, "terminalGuardEnabled" | "fetchTerminalGuardContinuation" | "fetchGuardedEmptyCompletionRetry">,
|
|
41
|
+
): Promise<Response> {
|
|
42
|
+
const { logCtx, options, config } = requestContext;
|
|
43
|
+
const {
|
|
44
|
+
parsed,
|
|
45
|
+
translatorBudget,
|
|
46
|
+
toolBridgeMaps,
|
|
47
|
+
rememberKiroDeliveredFinalAnswer,
|
|
48
|
+
responseStateOptions,
|
|
49
|
+
} = requestState;
|
|
50
|
+
const { upstreamResponse, upstream, cleanupUpstreamAbort } = adapterExchange;
|
|
51
|
+
const {
|
|
52
|
+
terminalGuardEnabled,
|
|
53
|
+
fetchTerminalGuardContinuation,
|
|
54
|
+
fetchGuardedEmptyCompletionRetry,
|
|
55
|
+
} = continuationState;
|
|
56
|
+
const { emptyCompletionGuardEnabled } = completionPolicy;
|
|
57
|
+
const {
|
|
58
|
+
cancelResponseCompletion,
|
|
59
|
+
commitReasoningReplayServingRoute,
|
|
60
|
+
continuationStateForResponse,
|
|
61
|
+
notifyResponseComplete,
|
|
62
|
+
} = responseEffects;
|
|
63
|
+
const { routedCompaction } = sidecarState;
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if (parsed.stream) {
|
|
67
|
+
const initialEventStream = transportState.activeAdapter.parseStream(
|
|
68
|
+
upstreamResponse,
|
|
69
|
+
translatorBudget,
|
|
70
|
+
logCtx.activeTierMetadata,
|
|
71
|
+
);
|
|
72
|
+
const eventStream = terminalGuardEnabled
|
|
73
|
+
? guardTerminalEventStream({
|
|
74
|
+
parsed,
|
|
75
|
+
firstEvents: initialEventStream,
|
|
76
|
+
adapterName: transportState.activeAdapter.name,
|
|
77
|
+
maxAutoContinuations: 1,
|
|
78
|
+
continuation: fetchTerminalGuardContinuation,
|
|
79
|
+
})
|
|
80
|
+
: initialEventStream;
|
|
81
|
+
// The empty-completion guard sits OUTSIDE the terminal guard: a completed
|
|
82
|
+
// turn with no text and no tool call is retried with the IDENTICAL request
|
|
83
|
+
// (fetchTerminalGuardContinuation(parsed) replays the cached byte-identical
|
|
84
|
+
// request — same body, same headers, same signal).
|
|
85
|
+
const guardedEventStream = emptyCompletionGuardEnabled
|
|
86
|
+
? guardEmptyCompletionEventStream({
|
|
87
|
+
firstEvents: eventStream,
|
|
88
|
+
continuation: fetchGuardedEmptyCompletionRetry,
|
|
89
|
+
})
|
|
90
|
+
: eventStream;
|
|
91
|
+
const { toolNsMap, declaredToolNames, toolParameterSchemas, freeformToolNames, toolSearchToolNames } = toolBridgeMaps;
|
|
92
|
+
const sseStream = bridgeToResponsesSSE(
|
|
93
|
+
guardedEventStream, parsed._responseModelId ?? parsed.modelId, toolNsMap, freeformToolNames, toolSearchToolNames,
|
|
94
|
+
() => { cancelResponseCompletion(); upstream.abort(); }, 2_000,
|
|
95
|
+
{
|
|
96
|
+
translatorBudget,
|
|
97
|
+
replayCacheScope: parsed._reasoningReplayScope,
|
|
98
|
+
...(options.forceEmptyResponseId ? { responseId: "" } : {}),
|
|
99
|
+
stallTimeoutSec: config.stallTimeoutSec,
|
|
100
|
+
hideThinkingSummary: parsed.options.hideThinkingSummary,
|
|
101
|
+
declaredToolNames,
|
|
102
|
+
toolParameterSchemas,
|
|
103
|
+
...(options.onFirstOutput ? { onFirstOutput: options.onFirstOutput } : {}),
|
|
104
|
+
...(routedCompaction ? { compaction: true } : {}),
|
|
105
|
+
// Same grok-surface split as the runTurn branch above.
|
|
106
|
+
...(logCtx.surface === "grok" ? { heartbeatStyle: "comment" as const } : {}),
|
|
107
|
+
onUsage: usage => {
|
|
108
|
+
// Raw adapter usage, pre wire-normalization (see the runTurn branch above).
|
|
109
|
+
logCtx.usageFromBridge = true;
|
|
110
|
+
if (usage) {
|
|
111
|
+
logCtx.usage = usage;
|
|
112
|
+
if (logCtx.activeAttempt) logCtx.activeAttempt.usage = usage;
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
onCompletedResponse: (response: Record<string, unknown>, providerState?: OcxProviderContinuationState) => {
|
|
116
|
+
commitReasoningReplayServingRoute();
|
|
117
|
+
rememberKiroDeliveredFinalAnswer(transportState.activeAdapter.name, response);
|
|
118
|
+
// Compaction turns must NOT enter the continuation cache: _rawBody still holds the full
|
|
119
|
+
// PRE-compaction history, and a later previous_response_id expansion would rehydrate the
|
|
120
|
+
// giant stale chain Codex just replaced.
|
|
121
|
+
if (!routedCompaction) {
|
|
122
|
+
rememberResponseState(
|
|
123
|
+
parsed._rawBody,
|
|
124
|
+
response,
|
|
125
|
+
continuationStateForResponse(providerState),
|
|
126
|
+
responseStateOptions(transportState.activeAdapter.name === "kiro"),
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
notifyResponseComplete(response);
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
);
|
|
133
|
+
const bridgeTurnAc = new AbortController();
|
|
134
|
+
const trackedSse = trackStreamLifetime(sseStream, bridgeTurnAc, cleanupUpstreamAbort, options.turnAdmissionLease);
|
|
135
|
+
return new Response(trackedSse, {
|
|
136
|
+
headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", "Connection": "keep-alive", "X-Accel-Buffering": "no" },
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (transportState.activeAdapter.parseResponse) {
|
|
141
|
+
let events: AdapterEvent[];
|
|
142
|
+
try {
|
|
143
|
+
const initialEvents = await transportState.activeAdapter.parseResponse(
|
|
144
|
+
upstreamResponse,
|
|
145
|
+
translatorBudget,
|
|
146
|
+
logCtx.activeTierMetadata,
|
|
147
|
+
);
|
|
148
|
+
let guardedEvents: AdapterEvent[];
|
|
149
|
+
if (terminalGuardEnabled) {
|
|
150
|
+
guardedEvents = [];
|
|
151
|
+
for await (const event of guardTerminalEventStream({
|
|
152
|
+
parsed,
|
|
153
|
+
firstEvents: (async function* () { yield* initialEvents; })(),
|
|
154
|
+
adapterName: transportState.activeAdapter.name,
|
|
155
|
+
maxAutoContinuations: 1,
|
|
156
|
+
continuation: fetchTerminalGuardContinuation,
|
|
157
|
+
})) guardedEvents.push(event);
|
|
158
|
+
} else {
|
|
159
|
+
guardedEvents = initialEvents;
|
|
160
|
+
}
|
|
161
|
+
if (emptyCompletionGuardEnabled) {
|
|
162
|
+
events = [];
|
|
163
|
+
for await (const event of guardEmptyCompletionEventStream({
|
|
164
|
+
firstEvents: (async function* () { yield* guardedEvents; })(),
|
|
165
|
+
continuation: fetchGuardedEmptyCompletionRetry,
|
|
166
|
+
})) events.push(event);
|
|
167
|
+
} else {
|
|
168
|
+
events = guardedEvents;
|
|
169
|
+
}
|
|
170
|
+
} finally {
|
|
171
|
+
cleanupUpstreamAbort();
|
|
172
|
+
}
|
|
173
|
+
const { toolNsMap, declaredToolNames, toolParameterSchemas, freeformToolNames, toolSearchToolNames } = toolBridgeMaps;
|
|
174
|
+
let providerState: OcxProviderContinuationState | undefined;
|
|
175
|
+
const json = buildResponseJSON(events, parsed._responseModelId ?? parsed.modelId, {
|
|
176
|
+
translatorBudget,
|
|
177
|
+
replayCacheScope: parsed._reasoningReplayScope,
|
|
178
|
+
hideThinkingSummary: parsed.options.hideThinkingSummary,
|
|
179
|
+
toolNsMap,
|
|
180
|
+
declaredToolNames,
|
|
181
|
+
toolParameterSchemas,
|
|
182
|
+
freeformToolNames,
|
|
183
|
+
toolSearchToolNames,
|
|
184
|
+
...(routedCompaction ? { compaction: true } : {}),
|
|
185
|
+
onProviderState: state => { providerState = state; },
|
|
186
|
+
onUsage: usage => {
|
|
187
|
+
logCtx.usageFromBridge = true;
|
|
188
|
+
if (usage) {
|
|
189
|
+
logCtx.usage = usage;
|
|
190
|
+
if (logCtx.activeAttempt) logCtx.activeAttempt.usage = usage;
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
// See the streaming branch: compaction turns skip the continuation cache.
|
|
195
|
+
if (!routedCompaction) {
|
|
196
|
+
rememberKiroDeliveredFinalAnswer(transportState.activeAdapter.name, json);
|
|
197
|
+
rememberResponseState(
|
|
198
|
+
parsed._rawBody,
|
|
199
|
+
json,
|
|
200
|
+
continuationStateForResponse(providerState),
|
|
201
|
+
responseStateOptions(transportState.activeAdapter.name === "kiro"),
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
// #1926 gap 2: same buffered-path durability bound as the primary branch.
|
|
205
|
+
await awaitThoughtSignatureDurability();
|
|
206
|
+
if (adapterResponseReachedServingTerminal(events, json)) {
|
|
207
|
+
commitReasoningReplayServingRoute();
|
|
208
|
+
}
|
|
209
|
+
notifyResponseComplete(json);
|
|
210
|
+
return new Response(JSON.stringify(json), { headers: { "Content-Type": "application/json" } });
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return formatErrorResponse(400, "invalid_request_error", "Non-streaming not supported by this adapter");
|
|
214
|
+
}
|