@yansigit/opencodex 2.31.1 → 2.31.2
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-DJDp_XER.js → index-BAMgarF9.js} +14 -14
- package/gui/dist/index.html +1 -1
- package/package.json +1 -1
- package/src/adapters/base.ts +6 -0
- package/src/adapters/cursor/cursor-errors.ts +12 -0
- package/src/adapters/cursor/thread-continuity.ts +71 -0
- package/src/adapters/cursor.ts +90 -28
- package/src/adapters/google-wire-compiler.ts +8 -0
- package/src/adapters/google.ts +26 -0
- package/src/generated/compatibility-version.json +39 -15
- package/src/oauth/anthropic-routing.ts +129 -219
- package/src/oauth/antigravity-routing.ts +165 -0
- package/src/oauth/cursor-routing.ts +252 -0
- package/src/providers/cursor-pool.ts +3 -3
- package/src/routing/account-pool/affinity.ts +125 -0
- package/src/routing/account-pool/cooldown.ts +145 -0
- package/src/routing/account-pool/index.ts +45 -0
- package/src/routing/account-pool/resolve.ts +356 -0
- package/src/routing/account-pool/types.ts +32 -0
- package/src/server/management/oauth-account-routes.ts +47 -12
- package/src/server/responses/core.ts +383 -65
- package/src/types/config.ts +8 -0
- package/src/types/request.ts +7 -3
- package/src/usage/log.ts +4 -0
package/gui/dist/index.html
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
} catch (e) {}
|
|
17
17
|
})();
|
|
18
18
|
</script>
|
|
19
|
-
<script type="module" crossorigin src="/assets/index-
|
|
19
|
+
<script type="module" crossorigin src="/assets/index-BAMgarF9.js"></script>
|
|
20
20
|
<link rel="stylesheet" crossorigin href="/assets/index-CGoDO3uO.css">
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|
package/package.json
CHANGED
package/src/adapters/base.ts
CHANGED
|
@@ -24,6 +24,12 @@ export interface IncomingMeta {
|
|
|
24
24
|
export interface ProviderAdapter {
|
|
25
25
|
name: string;
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Validate a parsed request before any attempt, sidecar, pacing, queue, or transport work.
|
|
29
|
+
* Adapters may throw a client-facing validation error when the request is unsupported.
|
|
30
|
+
*/
|
|
31
|
+
validateRequest?(parsed: OcxParsedRequest): void;
|
|
32
|
+
|
|
27
33
|
/**
|
|
28
34
|
* Convert an already-read provider HTTP error into client-safe text. This hook must be pure and
|
|
29
35
|
* return fully redacted output: callers may pass untrusted provider headers and payload text.
|
|
@@ -147,6 +147,18 @@ function bareReLooksLikeOverflow(context?: CursorSizeContext): boolean {
|
|
|
147
147
|
return estimatedInputTokens >= OVERFLOW_MIN_FRACTION * contextWindow;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
/**
|
|
151
|
+
* True when a transport error is the bare 0-token resource_exhausted overflow shape
|
|
152
|
+
* (not quota/rate) that should surface for Codex compact or remint on later hits.
|
|
153
|
+
*/
|
|
154
|
+
export function isCursorOverflowRemintCandidate(err: unknown, sizeContext?: CursorSizeContext): boolean {
|
|
155
|
+
const message = errorMessage(err);
|
|
156
|
+
if (!message) return false;
|
|
157
|
+
const lower = message.toLowerCase();
|
|
158
|
+
if (!isCursorZeroTokenResourceExhausted(lower)) return false;
|
|
159
|
+
return classifyCursorError(message, sizeContext) === "Cursor context limit exceeded";
|
|
160
|
+
}
|
|
161
|
+
|
|
150
162
|
export function isCursorZeroTokenResourceExhausted(lowerMessage: string): boolean {
|
|
151
163
|
if (!lowerMessage.includes("resource_exhausted") && !lowerMessage.includes("resource exhausted")) return false;
|
|
152
164
|
// Any explicit quota/rate cue wins: this is a real 429.
|
|
@@ -65,3 +65,74 @@ export function lookupCursorThreadConversation(
|
|
|
65
65
|
export function clearCursorThreadContinuityForTests(): void {
|
|
66
66
|
overrides.clear();
|
|
67
67
|
}
|
|
68
|
+
|
|
69
|
+
/** Max conversation-id remints after the first surfaced overflow (senpi cap). */
|
|
70
|
+
export const CURSOR_OVERFLOW_REMINT_MAX = 3;
|
|
71
|
+
|
|
72
|
+
type OverflowRemintState = {
|
|
73
|
+
surfaced: boolean;
|
|
74
|
+
remintCount: number;
|
|
75
|
+
skip: boolean;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const overflowRemintByScope = new Map<string, OverflowRemintState>();
|
|
79
|
+
|
|
80
|
+
function overflowRemintEntry(scopeKey: string): OverflowRemintState {
|
|
81
|
+
const existing = overflowRemintByScope.get(scopeKey);
|
|
82
|
+
if (existing) return existing;
|
|
83
|
+
const fresh: OverflowRemintState = { surfaced: false, remintCount: 0, skip: false };
|
|
84
|
+
overflowRemintByScope.set(scopeKey, fresh);
|
|
85
|
+
return fresh;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Stable scope for overflow remint accounting. Thread-identified clients key by
|
|
90
|
+
* thread + identity; conversation-only clients key by the base conversation id
|
|
91
|
+
* captured before any remint (wire id may rotate).
|
|
92
|
+
*/
|
|
93
|
+
export function cursorOverflowRemintScopeKey(
|
|
94
|
+
parsed: {
|
|
95
|
+
_clientThreadId?: string;
|
|
96
|
+
_cursorIdentityScope?: string;
|
|
97
|
+
},
|
|
98
|
+
baseConversationId?: string,
|
|
99
|
+
): string | null {
|
|
100
|
+
if (parsed._clientThreadId) {
|
|
101
|
+
return `overflow\0${cursorThreadScopeKey(parsed._clientThreadId, parsed._cursorIdentityScope)}`;
|
|
102
|
+
}
|
|
103
|
+
const base = baseConversationId?.trim();
|
|
104
|
+
if (!base) return null;
|
|
105
|
+
const scope = parsed._cursorIdentityScope?.trim() || "local";
|
|
106
|
+
return `overflow\0${scope}\0conv\0${base}`;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** True until the first overflow for this scope has been surfaced for Codex compact. */
|
|
110
|
+
export function shouldSurfaceCursorOverflowFirst(scopeKey: string): boolean {
|
|
111
|
+
return overflowRemintEntry(scopeKey).surfaced !== true;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export function markCursorOverflowSurfaced(scopeKey: string): void {
|
|
115
|
+
const entry = overflowRemintEntry(scopeKey);
|
|
116
|
+
entry.surfaced = true;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function shouldSkipCursorOverflowRemint(scopeKey: string): boolean {
|
|
120
|
+
const entry = overflowRemintByScope.get(scopeKey);
|
|
121
|
+
if (!entry) return false;
|
|
122
|
+
return entry.skip === true || entry.remintCount >= CURSOR_OVERFLOW_REMINT_MAX;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Record one overflow remint; returns false when the cap is exhausted. */
|
|
126
|
+
export function recordCursorOverflowRemint(scopeKey: string): boolean {
|
|
127
|
+
const entry = overflowRemintEntry(scopeKey);
|
|
128
|
+
if (entry.skip || entry.remintCount >= CURSOR_OVERFLOW_REMINT_MAX) {
|
|
129
|
+
entry.skip = true;
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
entry.remintCount += 1;
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function clearCursorOverflowRemintForTests(): void {
|
|
137
|
+
overflowRemintByScope.clear();
|
|
138
|
+
}
|
package/src/adapters/cursor.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import type { AdapterEvent, OcxProviderConfig } from "../types";
|
|
2
|
+
import type { AdapterEvent, OcxParsedRequest, OcxProviderConfig } from "../types";
|
|
3
3
|
import type { ProviderAdapter } from "./base";
|
|
4
4
|
import { isTranslatorBudgetExceededError } from "../lib/translator-budget";
|
|
5
5
|
import { cursorExecDeniedMessage, cursorRequestDeclaresFullAccess } from "./cursor/exec-policy";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
isCursorBenignCancelError,
|
|
8
|
+
isCursorInvalidArgumentError,
|
|
9
|
+
isCursorOverflowRemintCandidate,
|
|
10
|
+
safeCursorErrorMessage,
|
|
11
|
+
type CursorSizeContext,
|
|
12
|
+
} from "./cursor/cursor-errors";
|
|
7
13
|
import { cursorCheckpointModelAffinityId, inferCursorContextWindow, isCursorExternalWireModel } from "./cursor/discovery";
|
|
8
14
|
import { createCursorKvStore, type CursorKvStore } from "./cursor/kv-store";
|
|
9
15
|
import { mapCursorServerMessage } from "./cursor/message-mapper";
|
|
@@ -26,7 +32,14 @@ import {
|
|
|
26
32
|
} from "./cursor/checkpoint-store";
|
|
27
33
|
import { debugProviderDiagnostic } from "../lib/debug";
|
|
28
34
|
import { estimateTokens } from "../lib/token-estimate";
|
|
29
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
cursorOverflowRemintScopeKey,
|
|
37
|
+
markCursorOverflowSurfaced,
|
|
38
|
+
recordCursorOverflowRemint,
|
|
39
|
+
rememberCursorThreadConversation,
|
|
40
|
+
shouldSkipCursorOverflowRemint,
|
|
41
|
+
shouldSurfaceCursorOverflowFirst,
|
|
42
|
+
} from "./cursor/thread-continuity";
|
|
30
43
|
import { runCursorTurnWithRetry } from "./cursor/transport-retry";
|
|
31
44
|
import {
|
|
32
45
|
createDisabledCursorTransport,
|
|
@@ -77,10 +90,18 @@ function cursorRequestSizeContext(request: { modelId: string; system: string[];
|
|
|
77
90
|
};
|
|
78
91
|
}
|
|
79
92
|
|
|
93
|
+
function assertCursorRequestSupported(parsed: OcxParsedRequest): void {
|
|
94
|
+
if (parsed.options.textFormat !== undefined || parsed._structuredOutput === true) {
|
|
95
|
+
throw new Error("Cursor does not support structured output");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
80
99
|
export function createCursorAdapter(provider: OcxProviderConfig, deps: CursorAdapterDeps = {}): ProviderAdapter {
|
|
81
100
|
return {
|
|
82
101
|
name: "cursor",
|
|
83
102
|
|
|
103
|
+
validateRequest: assertCursorRequestSupported,
|
|
104
|
+
|
|
84
105
|
buildRequest() {
|
|
85
106
|
return {
|
|
86
107
|
url: provider.baseUrl || CURSOR_API_URL,
|
|
@@ -98,6 +119,7 @@ export function createCursorAdapter(provider: OcxProviderConfig, deps: CursorAda
|
|
|
98
119
|
},
|
|
99
120
|
|
|
100
121
|
async runTurn(_parsed, incoming, emit) {
|
|
122
|
+
assertCursorRequestSupported(_parsed);
|
|
101
123
|
if (incoming.abortSignal?.aborted) {
|
|
102
124
|
emit({ type: "error", message: "Cursor turn was aborted before start." });
|
|
103
125
|
return;
|
|
@@ -243,39 +265,79 @@ export function createCursorAdapter(provider: OcxProviderConfig, deps: CursorAda
|
|
|
243
265
|
);
|
|
244
266
|
};
|
|
245
267
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
// resumes, local exec/MCP side effects, and already-emitted output fail closed.
|
|
252
|
-
if (
|
|
253
|
-
!isCursorInvalidArgumentError(err)
|
|
254
|
-
|| !isCursorExternalWireModel(request.modelId)
|
|
255
|
-
|| lastRawIsToolResult
|
|
256
|
-
|| emittedOutput
|
|
257
|
-
|| replayUnsafe
|
|
258
|
-
|| incoming.abortSignal?.aborted
|
|
259
|
-
) {
|
|
260
|
-
throw err;
|
|
261
|
-
}
|
|
262
|
-
const failedConversationId = request.conversationId;
|
|
268
|
+
const overflowRemintBaseId = _parsed._clientThreadId
|
|
269
|
+
? undefined
|
|
270
|
+
: (previousConversationId ?? _parsed._cursorConversationId);
|
|
271
|
+
|
|
272
|
+
const remintConversationId = (failedConversationId: string) => {
|
|
263
273
|
lastTransport = undefined;
|
|
264
274
|
_parsed._cursorConversationId = undefined;
|
|
265
|
-
|
|
266
|
-
rekeyContextUsage(failedConversationId,
|
|
267
|
-
_parsed._cursorConversationId =
|
|
268
|
-
// Persist recovery for store:false clients that only send a parent thread id, so the
|
|
269
|
-
// next turn does not recompute the stale deterministic thread hash. Isolated helper /
|
|
270
|
-
// compaction turns must not park their throwaway id under the parent thread key.
|
|
275
|
+
const next = createCursorRequest(_parsed, { forceFreshConversation: true });
|
|
276
|
+
rekeyContextUsage(failedConversationId, next.conversationId);
|
|
277
|
+
_parsed._cursorConversationId = next.conversationId;
|
|
271
278
|
if (_parsed._clientThreadId && _parsed._cursorIsolateConversation !== true) {
|
|
272
279
|
rememberCursorThreadConversation(
|
|
273
280
|
_parsed._clientThreadId,
|
|
274
|
-
|
|
281
|
+
next.conversationId,
|
|
275
282
|
_parsed._cursorIdentityScope,
|
|
276
283
|
);
|
|
277
284
|
}
|
|
278
|
-
|
|
285
|
+
return next;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
for (;;) {
|
|
289
|
+
try {
|
|
290
|
+
await runOnce(request);
|
|
291
|
+
break;
|
|
292
|
+
} catch (err) {
|
|
293
|
+
const overflowRemintSafe =
|
|
294
|
+
!lastRawIsToolResult
|
|
295
|
+
&& !emittedOutput
|
|
296
|
+
&& !replayUnsafe
|
|
297
|
+
&& !incoming.abortSignal?.aborted;
|
|
298
|
+
const overflowScopeKey = cursorOverflowRemintScopeKey(
|
|
299
|
+
_parsed,
|
|
300
|
+
overflowRemintBaseId ?? request.conversationId,
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
if (
|
|
304
|
+
overflowScopeKey
|
|
305
|
+
&& overflowRemintSafe
|
|
306
|
+
&& isCursorOverflowRemintCandidate(err, requestSizeContext)
|
|
307
|
+
) {
|
|
308
|
+
if (shouldSkipCursorOverflowRemint(overflowScopeKey)) {
|
|
309
|
+
throw err;
|
|
310
|
+
}
|
|
311
|
+
if (shouldSurfaceCursorOverflowFirst(overflowScopeKey)) {
|
|
312
|
+
markCursorOverflowSurfaced(overflowScopeKey);
|
|
313
|
+
throw err;
|
|
314
|
+
}
|
|
315
|
+
if (!recordCursorOverflowRemint(overflowScopeKey)) {
|
|
316
|
+
throw err;
|
|
317
|
+
}
|
|
318
|
+
const failedConversationId = request.conversationId;
|
|
319
|
+
if (inheritedCheckpointRef) invalidateCursorCheckpoint(inheritedCheckpointRef);
|
|
320
|
+
request = remintConversationId(failedConversationId);
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// One-shot fallback for external-model Connect invalid_argument before any
|
|
325
|
+
// non-heartbeat output. Retries apply only to safe plain-user turns; tool-result
|
|
326
|
+
// resumes, local exec/MCP side effects, and already-emitted output fail closed.
|
|
327
|
+
if (
|
|
328
|
+
!isCursorInvalidArgumentError(err)
|
|
329
|
+
|| !isCursorExternalWireModel(request.modelId)
|
|
330
|
+
|| lastRawIsToolResult
|
|
331
|
+
|| emittedOutput
|
|
332
|
+
|| replayUnsafe
|
|
333
|
+
|| incoming.abortSignal?.aborted
|
|
334
|
+
) {
|
|
335
|
+
throw err;
|
|
336
|
+
}
|
|
337
|
+
request = remintConversationId(request.conversationId);
|
|
338
|
+
await runOnce(request);
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
279
341
|
}
|
|
280
342
|
if (
|
|
281
343
|
request.checkpointInvalidationReason
|
|
@@ -141,6 +141,14 @@ function compileGenerationConfig(value: unknown): JsonObject | undefined {
|
|
|
141
141
|
const valid = value.responseModalities.filter((m): m is string => typeof m === "string" && ["TEXT", "IMAGE", "AUDIO"].includes(m));
|
|
142
142
|
if (valid.length > 0) out.responseModalities = valid;
|
|
143
143
|
}
|
|
144
|
+
if (value.responseMimeType === "application/json") out.responseMimeType = value.responseMimeType;
|
|
145
|
+
if (isObject(value.responseSchema)) {
|
|
146
|
+
const responseSchema = sanitizeGeminiToolParameters(value.responseSchema);
|
|
147
|
+
const properties = isObject(responseSchema.properties) ? responseSchema.properties : undefined;
|
|
148
|
+
const hasProperties = properties !== undefined && Object.keys(properties).length > 0;
|
|
149
|
+
const hasRequired = Array.isArray(responseSchema.required) && responseSchema.required.length > 0;
|
|
150
|
+
if (hasProperties || hasRequired) out.responseSchema = responseSchema;
|
|
151
|
+
}
|
|
144
152
|
return Object.keys(out).length > 0 ? out : undefined;
|
|
145
153
|
}
|
|
146
154
|
|
package/src/adapters/google.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { ANTIGRAVITY_REQUEST_UA, antigravitySessionId, isLikelyRealThoughtSignat
|
|
|
24
24
|
import { repairGoogleToolPairs, stripTrailingClaudePrefill } from "./google-antigravity-tools";
|
|
25
25
|
import { canonicalAntigravityHttpsHost, isAntigravityHttpsHost } from "./google-antigravity-hosts";
|
|
26
26
|
import { compileGoogleWireBody } from "./google-wire-compiler";
|
|
27
|
+
import { sanitizeGeminiToolParameters } from "./google-tool-schema";
|
|
27
28
|
import { identifyRoutedModel } from "./identity";
|
|
28
29
|
import { antigravityUsesReplayCache, applyAntigravityReplay, clearAntigravityReplay, observeAntigravityReplay } from "./google-antigravity-replay";
|
|
29
30
|
import { resolveAntigravityEffortWireModel } from "../providers/antigravity-models";
|
|
@@ -430,6 +431,30 @@ function isImageCapableModel(modelId: string): boolean {
|
|
|
430
431
|
return IMAGE_CAPABLE_MODELS.has(modelId);
|
|
431
432
|
}
|
|
432
433
|
|
|
434
|
+
function applyGeminiStructuredOutput(
|
|
435
|
+
generationConfig: Record<string, unknown>,
|
|
436
|
+
parsed: OcxParsedRequest,
|
|
437
|
+
wireModelId: string,
|
|
438
|
+
): void {
|
|
439
|
+
const textFormat = parsed.options.textFormat;
|
|
440
|
+
if (!textFormat) return;
|
|
441
|
+
if (Array.isArray(parsed.context.tools) && parsed.context.tools.length > 0) return;
|
|
442
|
+
if (/claude/i.test(wireModelId) || /claude/i.test(parsed.modelId)) return;
|
|
443
|
+
if (isImageCapableModel(parsed.modelId)) return;
|
|
444
|
+
|
|
445
|
+
generationConfig.responseMimeType = "application/json";
|
|
446
|
+
if (textFormat.type !== "json_schema" || textFormat.schema === undefined) return;
|
|
447
|
+
|
|
448
|
+
const sanitized = sanitizeGeminiToolParameters(textFormat.schema);
|
|
449
|
+
const props = sanitized.properties;
|
|
450
|
+
const propKeys = props !== null && typeof props === "object" && !Array.isArray(props)
|
|
451
|
+
? Object.keys(props)
|
|
452
|
+
: [];
|
|
453
|
+
const required = Array.isArray(sanitized.required) ? sanitized.required : [];
|
|
454
|
+
if (propKeys.length === 0 && required.length === 0) return;
|
|
455
|
+
generationConfig.responseSchema = sanitized;
|
|
456
|
+
}
|
|
457
|
+
|
|
433
458
|
/**
|
|
434
459
|
* Model-visible markdown link for a materialized artifact. Uses the authenticated
|
|
435
460
|
* opaque HTTP route so remote/container clients can fetch the image without host
|
|
@@ -711,6 +736,7 @@ export function createGoogleAdapter(provider: OcxProviderConfig): ProviderAdapte
|
|
|
711
736
|
if (!generationConfig.thinkingConfig && isImageCapableModel(parsed.modelId)) {
|
|
712
737
|
generationConfig.responseModalities = ["TEXT", "IMAGE"];
|
|
713
738
|
}
|
|
739
|
+
applyGeminiStructuredOutput(generationConfig, parsed, routedModelId);
|
|
714
740
|
if (Object.keys(generationConfig).length > 0) body.generationConfig = generationConfig;
|
|
715
741
|
|
|
716
742
|
const ccaAlwaysSse = provider.googleMode === "cloud-code-assist";
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
"path": "package.json",
|
|
13
|
-
"sha256": "
|
|
13
|
+
"sha256": "5f79caaeac059bcbe36457e17d5c74ebaf9a0ec4779e74f1099db586395cbcb8"
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"path": "scripts/model-metadata.source.json",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
"path": "src/adapters/base.ts",
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "4aff33a01ae643fe3c81faa62138b057259048ebf655da2bcf41c3516d118162"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"path": "src/adapters/client-fingerprint.ts",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"path": "src/adapters/cursor.ts",
|
|
61
|
-
"sha256": "
|
|
61
|
+
"sha256": "f84e2b4ad71a5f5763e37772748043383f78966af2a6ae938353396bdc5e0117"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"path": "src/adapters/cursor/arg-codec.ts",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
"path": "src/adapters/cursor/cursor-errors.ts",
|
|
77
|
-
"sha256": "
|
|
77
|
+
"sha256": "5a0835bd74b850bedddc5d1b9b4ed23937db554613c8c78c4e36fd0d766e6ff2"
|
|
78
78
|
},
|
|
79
79
|
{
|
|
80
80
|
"path": "src/adapters/cursor/discovery.ts",
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
},
|
|
183
183
|
{
|
|
184
184
|
"path": "src/adapters/cursor/thread-continuity.ts",
|
|
185
|
-
"sha256": "
|
|
185
|
+
"sha256": "d4e5867db3bc0c92c22462cbed74f7f3cc8be1cf2427c17656407961c5e3025c"
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
188
|
"path": "src/adapters/cursor/tool-definitions.ts",
|
|
@@ -238,11 +238,11 @@
|
|
|
238
238
|
},
|
|
239
239
|
{
|
|
240
240
|
"path": "src/adapters/google-wire-compiler.ts",
|
|
241
|
-
"sha256": "
|
|
241
|
+
"sha256": "5f3b21dc2fd6cbd584a83e2537d5a7012b179f76b575afd83ff17a3acdb7ad8d"
|
|
242
242
|
},
|
|
243
243
|
{
|
|
244
244
|
"path": "src/adapters/google.ts",
|
|
245
|
-
"sha256": "
|
|
245
|
+
"sha256": "74ad714b7c4ff969f9e80af8f9d6cbab6a3727b18394a07775be30fa0ff9bb56"
|
|
246
246
|
},
|
|
247
247
|
{
|
|
248
248
|
"path": "src/adapters/identity.ts",
|
|
@@ -2002,7 +2002,7 @@
|
|
|
2002
2002
|
},
|
|
2003
2003
|
{
|
|
2004
2004
|
"path": "src/oauth/anthropic-routing.ts",
|
|
2005
|
-
"sha256": "
|
|
2005
|
+
"sha256": "589ed95211898ccb5e05b8eb896bd018f563177b7dcf919b7662b947b82b68e4"
|
|
2006
2006
|
},
|
|
2007
2007
|
{
|
|
2008
2008
|
"path": "src/oauth/anthropic.ts",
|
|
@@ -2010,7 +2010,7 @@
|
|
|
2010
2010
|
},
|
|
2011
2011
|
{
|
|
2012
2012
|
"path": "src/oauth/antigravity-routing.ts",
|
|
2013
|
-
"sha256": "
|
|
2013
|
+
"sha256": "4ea7bae4b3f508ef3f5640ccf0010ccc1040953f590671a0490a12845ca00914"
|
|
2014
2014
|
},
|
|
2015
2015
|
{
|
|
2016
2016
|
"path": "src/oauth/callback-server.ts",
|
|
@@ -2024,6 +2024,10 @@
|
|
|
2024
2024
|
"path": "src/oauth/command-code.ts",
|
|
2025
2025
|
"sha256": "75ef37ec5186139f0a6d976c64b376ec1d7865463e97e5946ada291b194ad0be"
|
|
2026
2026
|
},
|
|
2027
|
+
{
|
|
2028
|
+
"path": "src/oauth/cursor-routing.ts",
|
|
2029
|
+
"sha256": "86ee28d1f27034a527dc15a0befbfa5bc51ca3d2c3babe8e331e955f2c5bda4c"
|
|
2030
|
+
},
|
|
2027
2031
|
{
|
|
2028
2032
|
"path": "src/oauth/cursor.ts",
|
|
2029
2033
|
"sha256": "afc515c357f5bc9f788c07e40a0a1fce6ef3d9887759906e5a48113a720d5673"
|
|
@@ -2138,7 +2142,7 @@
|
|
|
2138
2142
|
},
|
|
2139
2143
|
{
|
|
2140
2144
|
"path": "src/providers/cursor-pool.ts",
|
|
2141
|
-
"sha256": "
|
|
2145
|
+
"sha256": "815eb4715ced1cb744f48790d50cab2edf9158925077705e411721f16700df0b"
|
|
2142
2146
|
},
|
|
2143
2147
|
{
|
|
2144
2148
|
"path": "src/providers/derive.ts",
|
|
@@ -2348,6 +2352,26 @@
|
|
|
2348
2352
|
"path": "src/router.ts",
|
|
2349
2353
|
"sha256": "44f5eebeb8894345edf51120ce1c6b091fa0f81be5bac875bd944af0c9c9b2de"
|
|
2350
2354
|
},
|
|
2355
|
+
{
|
|
2356
|
+
"path": "src/routing/account-pool/affinity.ts",
|
|
2357
|
+
"sha256": "6bc16c3888ad7bf76a8a4e1a8611ee08816c47c34803c476d6f3f60a4fdd06ea"
|
|
2358
|
+
},
|
|
2359
|
+
{
|
|
2360
|
+
"path": "src/routing/account-pool/cooldown.ts",
|
|
2361
|
+
"sha256": "08a0b8178f24be3cf6d58091bca1e92e06635013fd06e46fcba4056979d15538"
|
|
2362
|
+
},
|
|
2363
|
+
{
|
|
2364
|
+
"path": "src/routing/account-pool/index.ts",
|
|
2365
|
+
"sha256": "ae1e896112557c0eaf0952e9cd26acbed93f672e9571fe8648f52854f392ab35"
|
|
2366
|
+
},
|
|
2367
|
+
{
|
|
2368
|
+
"path": "src/routing/account-pool/resolve.ts",
|
|
2369
|
+
"sha256": "1c06a541be08e46550be7a08f6b9cf7891200cefcf1ac49192f5f489aee7e848"
|
|
2370
|
+
},
|
|
2371
|
+
{
|
|
2372
|
+
"path": "src/routing/account-pool/types.ts",
|
|
2373
|
+
"sha256": "dfe95b901a7838916b6f490ef891e34635943328a4f8adbd550306d74ebe5a67"
|
|
2374
|
+
},
|
|
2351
2375
|
{
|
|
2352
2376
|
"path": "src/routing/analytics.ts",
|
|
2353
2377
|
"sha256": "6b356e72e698e9a25a760e42a78d19236133e376eda3ff3da9220b027603e3b1"
|
|
@@ -2582,7 +2606,7 @@
|
|
|
2582
2606
|
},
|
|
2583
2607
|
{
|
|
2584
2608
|
"path": "src/server/management/oauth-account-routes.ts",
|
|
2585
|
-
"sha256": "
|
|
2609
|
+
"sha256": "6bbdcd54e8c2cdca400954085de5605dd7a08336bb9e714eb11d8ed0eda4ea81"
|
|
2586
2610
|
},
|
|
2587
2611
|
{
|
|
2588
2612
|
"path": "src/server/management/provider-capability-config.ts",
|
|
@@ -2750,7 +2774,7 @@
|
|
|
2750
2774
|
},
|
|
2751
2775
|
{
|
|
2752
2776
|
"path": "src/server/responses/core.ts",
|
|
2753
|
-
"sha256": "
|
|
2777
|
+
"sha256": "889f74b70fb60c2c7bff2559fc923b64a883a5444aa4757ef1eb2c4a450e8e2d"
|
|
2754
2778
|
},
|
|
2755
2779
|
{
|
|
2756
2780
|
"path": "src/server/responses/empty-completion-guard.ts",
|
|
@@ -2930,7 +2954,7 @@
|
|
|
2930
2954
|
},
|
|
2931
2955
|
{
|
|
2932
2956
|
"path": "src/types/config.ts",
|
|
2933
|
-
"sha256": "
|
|
2957
|
+
"sha256": "0392623bd207f5e331e4b40488b140e7492b1478afe366b8f1e8112cb39c5359"
|
|
2934
2958
|
},
|
|
2935
2959
|
{
|
|
2936
2960
|
"path": "src/types/provider.ts",
|
|
@@ -2938,7 +2962,7 @@
|
|
|
2938
2962
|
},
|
|
2939
2963
|
{
|
|
2940
2964
|
"path": "src/types/request.ts",
|
|
2941
|
-
"sha256": "
|
|
2965
|
+
"sha256": "4a5e832cbd05b3c9cdeba818d2cdeeb10cb5da93349140e0c093fd99d66799d0"
|
|
2942
2966
|
},
|
|
2943
2967
|
{
|
|
2944
2968
|
"path": "src/types/tools.ts",
|
|
@@ -3010,7 +3034,7 @@
|
|
|
3010
3034
|
},
|
|
3011
3035
|
{
|
|
3012
3036
|
"path": "src/usage/log.ts",
|
|
3013
|
-
"sha256": "
|
|
3037
|
+
"sha256": "c850f8c7b515edebd490a819efde393d99d122aa92702a6bdff1a82cd90d8af1"
|
|
3014
3038
|
},
|
|
3015
3039
|
{
|
|
3016
3040
|
"path": "src/usage/summary.ts",
|