@vybestack/llxprt-code-core 0.7.0-nightly.251214.7c8736a50 → 0.7.0-nightly.251216.6bcf96e64
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/dist/src/auth/codex-device-flow.d.ts +56 -0
- package/dist/src/auth/codex-device-flow.js +231 -0
- package/dist/src/auth/codex-device-flow.js.map +1 -0
- package/dist/src/auth/token-store.d.ts +38 -8
- package/dist/src/auth/token-store.js +91 -15
- package/dist/src/auth/token-store.js.map +1 -1
- package/dist/src/auth/types.d.ts +82 -5
- package/dist/src/auth/types.js +28 -1
- package/dist/src/auth/types.js.map +1 -1
- package/dist/src/code_assist/setup.js +1 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/config.d.ts +34 -0
- package/dist/src/config/config.js +15 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +18 -0
- package/dist/src/confirmation-bus/message-bus.js +48 -0
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +23 -2
- package/dist/src/confirmation-bus/types.js +2 -0
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/bucketFailoverIntegration.d.ts +61 -0
- package/dist/src/core/bucketFailoverIntegration.js +168 -0
- package/dist/src/core/bucketFailoverIntegration.js.map +1 -0
- package/dist/src/core/geminiChat.js +18 -3
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +22 -4
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/providers/BaseProvider.d.ts +1 -0
- package/dist/src/providers/BaseProvider.js +2 -1
- package/dist/src/providers/BaseProvider.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +38 -8
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -0
- package/dist/src/providers/gemini/GeminiProvider.js +75 -10
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +76 -12
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai-responses/CODEX_MODELS.d.ts +23 -0
- package/dist/src/providers/openai-responses/CODEX_MODELS.js +48 -0
- package/dist/src/providers/openai-responses/CODEX_MODELS.js.map +1 -0
- package/dist/src/providers/openai-responses/CODEX_PROMPT.d.ts +22 -0
- package/dist/src/providers/openai-responses/CODEX_PROMPT.js +332 -0
- package/dist/src/providers/openai-responses/CODEX_PROMPT.js.map +1 -0
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.d.ts +38 -2
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js +191 -32
- package/dist/src/providers/openai-responses/OpenAIResponsesProvider.js.map +1 -1
- package/dist/src/providers/openai-vercel/OpenAIVercelProvider.js +90 -7
- package/dist/src/providers/openai-vercel/OpenAIVercelProvider.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +41 -0
- package/dist/src/types/modelParams.js +30 -0
- package/dist/src/types/modelParams.js.map +1 -1
- package/dist/src/utils/errorParsing.js +2 -2
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/retry.js +33 -0
- package/dist/src/utils/retry.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,6 +23,8 @@
|
|
|
23
23
|
// Removed ConversationCache and peekActiveProviderRuntime dependencies to enforce stateless operation
|
|
24
24
|
import { DebugLogger } from '../../debug/index.js';
|
|
25
25
|
import { RESPONSES_API_MODELS } from '../openai/RESPONSES_API_MODELS.js';
|
|
26
|
+
import { CODEX_MODELS } from './CODEX_MODELS.js';
|
|
27
|
+
import { CODEX_SYSTEM_PROMPT } from './CODEX_PROMPT.js';
|
|
26
28
|
import { parseResponsesStream, parseErrorResponse, } from '../openai/parseResponsesStream.js';
|
|
27
29
|
import { BaseProvider, } from '../BaseProvider.js';
|
|
28
30
|
import { convertToolsToOpenAIResponses } from './schemaConverter.js';
|
|
@@ -30,39 +32,110 @@ import { getCoreSystemPromptAsync } from '../../core/prompts.js';
|
|
|
30
32
|
import { resolveUserMemory } from '../utils/userMemory.js';
|
|
31
33
|
import { resolveRuntimeAuthToken } from '../utils/authToken.js';
|
|
32
34
|
import { filterOpenAIRequestParams } from '../openai/openaiRequestParams.js';
|
|
35
|
+
import { CodexOAuthTokenSchema } from '../../auth/types.js';
|
|
36
|
+
import { retryWithBackoff, getErrorStatus, isNetworkTransientError, } from '../../utils/retry.js';
|
|
33
37
|
export class OpenAIResponsesProvider extends BaseProvider {
|
|
34
38
|
logger;
|
|
39
|
+
_isCodexMode;
|
|
35
40
|
// @plan:PLAN-20251023-STATELESS-HARDENING.P08
|
|
36
41
|
// @requirement:REQ-SP4-002/REQ-SP4-003
|
|
37
42
|
// Removed static cache scope and conversation cache dependencies to achieve stateless operation
|
|
38
|
-
constructor(apiKey, baseURL, config) {
|
|
43
|
+
constructor(apiKey, baseURL, config, oauthManager) {
|
|
44
|
+
// Detect Codex mode from baseURL at construction time
|
|
45
|
+
const isCodex = baseURL?.includes('chatgpt.com/backend-api/codex') ?? false;
|
|
39
46
|
const baseConfig = {
|
|
40
47
|
name: 'openai-responses',
|
|
41
48
|
apiKey,
|
|
42
49
|
baseURL: baseURL || 'https://api.openai.com/v1',
|
|
43
50
|
envKeyNames: ['OPENAI_API_KEY'],
|
|
44
|
-
isOAuthEnabled:
|
|
45
|
-
oauthProvider: undefined,
|
|
46
|
-
oauthManager: undefined,
|
|
51
|
+
isOAuthEnabled: isCodex && !!oauthManager,
|
|
52
|
+
oauthProvider: isCodex ? 'codex' : undefined,
|
|
53
|
+
oauthManager: isCodex ? oauthManager : undefined,
|
|
54
|
+
// Must set supportsOAuth here because supportsOAuth() is called in super()
|
|
55
|
+
// before _isCodexMode is set
|
|
56
|
+
supportsOAuth: isCodex,
|
|
47
57
|
};
|
|
48
58
|
super(baseConfig, config);
|
|
59
|
+
this._isCodexMode = isCodex;
|
|
49
60
|
this.logger = new DebugLogger('llxprt:providers:openai-responses');
|
|
50
|
-
this.logger.debug(() => `Constructor - baseURL: ${baseURL || 'https://api.openai.com/v1'},
|
|
61
|
+
this.logger.debug(() => `Constructor - baseURL: ${baseURL || 'https://api.openai.com/v1'}, hasApiKey: ${!!apiKey}, codexMode: ${isCodex}`);
|
|
51
62
|
}
|
|
52
63
|
/**
|
|
53
|
-
*
|
|
64
|
+
* OAuth is supported in Codex mode
|
|
65
|
+
* Check baseURL directly to avoid timing issues with instance properties
|
|
66
|
+
* @plan PLAN-20251213-ISSUE160.P03
|
|
54
67
|
*/
|
|
55
|
-
// @plan:PLAN-20251023-STATELESS-HARDENING.P08
|
|
56
|
-
// @requirement:REQ-SP4-002/REQ-SP4-003
|
|
57
|
-
// Removed stateful conversation cache methods to ensure stateless operation
|
|
58
68
|
supportsOAuth() {
|
|
69
|
+
// Check baseURL directly - don't rely on _isCodexMode which may not be set yet
|
|
70
|
+
const baseURL = this.getBaseURL();
|
|
71
|
+
return this.isCodexMode(baseURL);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Detect if provider is in Codex mode based on baseURL
|
|
75
|
+
* @plan PLAN-20251213-ISSUE160.P03
|
|
76
|
+
*/
|
|
77
|
+
isCodexMode(baseURL) {
|
|
78
|
+
return baseURL?.includes('chatgpt.com/backend-api/codex') ?? false;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @plan PLAN-20251215-issue813
|
|
82
|
+
* @requirement REQ-RETRY-001: OpenAIResponsesProvider must use retryWithBackoff for all fetch calls
|
|
83
|
+
*
|
|
84
|
+
* Determines if an error should trigger a retry.
|
|
85
|
+
* - 429 (rate limit) errors are retried
|
|
86
|
+
* - 5xx server errors are retried
|
|
87
|
+
* - 400 (bad request) errors are NOT retried
|
|
88
|
+
* - Network transient errors are retried
|
|
89
|
+
*/
|
|
90
|
+
shouldRetryOnError(error) {
|
|
91
|
+
// Check for status using helper (handles error shapes from fetch)
|
|
92
|
+
const status = getErrorStatus(error);
|
|
93
|
+
if (status !== undefined) {
|
|
94
|
+
if (status === 400)
|
|
95
|
+
return false;
|
|
96
|
+
return status === 429 || (status >= 500 && status < 600);
|
|
97
|
+
}
|
|
98
|
+
// Check for network transient errors
|
|
99
|
+
if (isNetworkTransientError(error)) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
59
102
|
return false;
|
|
60
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Get account_id from Codex OAuth token
|
|
106
|
+
* @plan PLAN-20251213-ISSUE160.P03
|
|
107
|
+
*/
|
|
108
|
+
async getCodexAccountId() {
|
|
109
|
+
// Get OAuth manager from base config
|
|
110
|
+
const oauthManager = this.baseProviderConfig.oauthManager;
|
|
111
|
+
if (!oauthManager) {
|
|
112
|
+
throw new Error('Codex mode requires OAuth authentication with account_id - no OAuth manager available');
|
|
113
|
+
}
|
|
114
|
+
// Get the full token from the OAuth manager
|
|
115
|
+
// getOAuthToken returns the full token object (with account_id preserved via passthrough)
|
|
116
|
+
const token = await oauthManager.getOAuthToken?.('codex');
|
|
117
|
+
if (!token) {
|
|
118
|
+
throw new Error('Codex mode requires OAuth authentication - no token available. Run /auth codex enable');
|
|
119
|
+
}
|
|
120
|
+
// Validate with Zod schema to get account_id
|
|
121
|
+
const validatedToken = CodexOAuthTokenSchema.parse(token);
|
|
122
|
+
return validatedToken.account_id;
|
|
123
|
+
}
|
|
61
124
|
getToolFormat() {
|
|
62
125
|
// Always use OpenAI format for responses API
|
|
63
126
|
return 'openai';
|
|
64
127
|
}
|
|
65
128
|
async getModels() {
|
|
129
|
+
const baseURL = this.getBaseURL() || 'https://api.openai.com/v1';
|
|
130
|
+
const isCodex = this.isCodexMode(baseURL);
|
|
131
|
+
// @plan PLAN-20251214-ISSUE160.P05
|
|
132
|
+
// Debug logging for model listing
|
|
133
|
+
this.logger.debug(() => `getModels() called: baseURL=${baseURL}, isCodexMode=${isCodex}, providerName=${this.name}`);
|
|
134
|
+
// @plan PLAN-20251214-ISSUE160.P06
|
|
135
|
+
// Fetch models from Codex API when in Codex mode
|
|
136
|
+
if (isCodex) {
|
|
137
|
+
return this.getCodexModels(baseURL);
|
|
138
|
+
}
|
|
66
139
|
// Try to fetch models dynamically from the API
|
|
67
140
|
const apiKey = await this.getAuthToken();
|
|
68
141
|
if (!apiKey) {
|
|
@@ -75,13 +148,15 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
75
148
|
}));
|
|
76
149
|
}
|
|
77
150
|
try {
|
|
151
|
+
// @plan PLAN-20251215-issue813: Wrap with retryWithBackoff for 429/5xx handling
|
|
78
152
|
// Fetch models from the API
|
|
79
|
-
const
|
|
80
|
-
const response = await fetch(`${baseURL}/models`, {
|
|
153
|
+
const response = await retryWithBackoff(() => fetch(`${baseURL}/models`, {
|
|
81
154
|
method: 'GET',
|
|
82
155
|
headers: {
|
|
83
156
|
Authorization: `Bearer ${apiKey}`,
|
|
84
157
|
},
|
|
158
|
+
}), {
|
|
159
|
+
shouldRetryOnError: this.shouldRetryOnError.bind(this),
|
|
85
160
|
});
|
|
86
161
|
if (response.ok) {
|
|
87
162
|
const data = (await response.json());
|
|
@@ -119,10 +194,30 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
119
194
|
supportedToolFormats: ['openai'],
|
|
120
195
|
}));
|
|
121
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Get Codex models
|
|
199
|
+
*
|
|
200
|
+
* Note: The Codex /models endpoint is protected by Cloudflare bot detection
|
|
201
|
+
* which blocks automated requests (even with proper auth headers).
|
|
202
|
+
* The /responses endpoint works fine, but /models returns a Cloudflare challenge.
|
|
203
|
+
* Therefore, we use a hardcoded list based on codex-rs/core/tests/suite/list_models.rs
|
|
204
|
+
*
|
|
205
|
+
* @plan PLAN-20251214-ISSUE160.P06
|
|
206
|
+
*/
|
|
207
|
+
async getCodexModels(_baseURL) {
|
|
208
|
+
this.logger.debug(() => 'Codex mode: returning hardcoded models (API blocked by Cloudflare)');
|
|
209
|
+
return CODEX_MODELS;
|
|
210
|
+
}
|
|
122
211
|
getCurrentModel() {
|
|
123
212
|
return this.getModel();
|
|
124
213
|
}
|
|
125
214
|
getDefaultModel() {
|
|
215
|
+
// @plan PLAN-20251213-ISSUE160.P04
|
|
216
|
+
// Return gpt-5.2 as default when in Codex mode
|
|
217
|
+
const baseURL = this.getBaseURL();
|
|
218
|
+
if (this.isCodexMode(baseURL)) {
|
|
219
|
+
return 'gpt-5.2';
|
|
220
|
+
}
|
|
126
221
|
// Return the default model for responses API
|
|
127
222
|
return 'o3-mini';
|
|
128
223
|
}
|
|
@@ -190,11 +285,14 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
190
285
|
*/
|
|
191
286
|
async *generateChatCompletionWithOptions(options) {
|
|
192
287
|
const { contents: content, tools } = options;
|
|
193
|
-
|
|
288
|
+
// Use getAuthTokenForPrompt() to trigger OAuth if needed
|
|
289
|
+
const apiKey = (await this.getAuthTokenForPrompt()) ??
|
|
194
290
|
(await resolveRuntimeAuthToken(options.resolved.authToken)) ??
|
|
195
291
|
'';
|
|
196
292
|
if (!apiKey) {
|
|
197
|
-
throw new Error(
|
|
293
|
+
throw new Error(this._isCodexMode
|
|
294
|
+
? 'Codex authentication required. Run /auth codex enable to authenticate.'
|
|
295
|
+
: 'OpenAI API key is required');
|
|
198
296
|
}
|
|
199
297
|
const resolvedModel = options.resolved.model || this.getDefaultModel();
|
|
200
298
|
const toolNamesForPrompt = tools === undefined
|
|
@@ -225,28 +323,34 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
225
323
|
const textBlocks = c.blocks.filter((b) => b.type === 'text');
|
|
226
324
|
const toolCallBlocks = c.blocks.filter((b) => b.type === 'tool_call');
|
|
227
325
|
const contentText = textBlocks.map((b) => b.text).join('');
|
|
228
|
-
|
|
229
|
-
|
|
326
|
+
// Add assistant text content if present
|
|
327
|
+
if (contentText) {
|
|
328
|
+
input.push({
|
|
230
329
|
role: 'assistant',
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
330
|
+
content: contentText,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
// Add function_call items for each tool call (Responses API format)
|
|
334
|
+
for (const toolCall of toolCallBlocks) {
|
|
335
|
+
input.push({
|
|
336
|
+
type: 'function_call',
|
|
337
|
+
call_id: toolCall.id,
|
|
338
|
+
name: toolCall.name,
|
|
339
|
+
arguments: JSON.stringify(toolCall.parameters),
|
|
340
|
+
});
|
|
239
341
|
}
|
|
240
342
|
}
|
|
241
343
|
else if (c.speaker === 'tool') {
|
|
242
|
-
|
|
243
|
-
|
|
344
|
+
// Convert tool responses to function_call_output format (Responses API)
|
|
345
|
+
const toolResponseBlocks = c.blocks.filter((b) => b.type === 'tool_response');
|
|
346
|
+
for (const toolResponseBlock of toolResponseBlocks) {
|
|
244
347
|
const result = typeof toolResponseBlock.result === 'string'
|
|
245
348
|
? toolResponseBlock.result
|
|
246
349
|
: JSON.stringify(toolResponseBlock.result);
|
|
247
350
|
input.push({
|
|
248
|
-
|
|
249
|
-
|
|
351
|
+
type: 'function_call_output',
|
|
352
|
+
call_id: toolResponseBlock.callId,
|
|
353
|
+
output: result,
|
|
250
354
|
});
|
|
251
355
|
}
|
|
252
356
|
}
|
|
@@ -261,10 +365,24 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
261
365
|
const filteredSettingsParams = filterOpenAIRequestParams(settingsServiceModelParams);
|
|
262
366
|
const filteredEphemeralParams = filterOpenAIRequestParams(runtimeConfigEphemeralSettings);
|
|
263
367
|
// Include both ephemeral and persistent settings, with ephemeral settings taking precedence
|
|
264
|
-
const
|
|
368
|
+
const mergedParams = {
|
|
265
369
|
...(filteredSettingsParams ?? {}),
|
|
266
370
|
...(filteredEphemeralParams ?? {}),
|
|
267
371
|
};
|
|
372
|
+
// Translate max_tokens/max_completion_tokens to max_output_tokens for Responses API
|
|
373
|
+
// The Responses API uses max_output_tokens, not max_tokens (GPT-5 models)
|
|
374
|
+
const requestOverrides = {};
|
|
375
|
+
for (const [key, value] of Object.entries(mergedParams)) {
|
|
376
|
+
if (key === 'max_tokens' || key === 'max_completion_tokens') {
|
|
377
|
+
// Responses API uses max_output_tokens
|
|
378
|
+
requestOverrides['max_output_tokens'] = value;
|
|
379
|
+
this.logger.debug(() => `Translated ${key}=${value} to max_output_tokens for Responses API`);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
requestOverrides[key] = value;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
this.logger.debug(() => `Request overrides: ${JSON.stringify(Object.keys(requestOverrides))}`);
|
|
268
386
|
// @plan:PLAN-20251023-STATELESS-HARDENING.P08
|
|
269
387
|
// @requirement:REQ-SP4-002/REQ-SP4-003
|
|
270
388
|
// Prefer resolved options, then runtime config, then defaults instead of stored provider state
|
|
@@ -272,19 +390,48 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
272
390
|
this.getBaseURL() ??
|
|
273
391
|
'https://api.openai.com/v1';
|
|
274
392
|
const baseURL = baseURLCandidate.replace(/\/+$/u, '');
|
|
393
|
+
// @plan PLAN-20251213-ISSUE160.P03
|
|
394
|
+
// Detect Codex mode and handle accordingly
|
|
395
|
+
const isCodex = this.isCodexMode(baseURL);
|
|
396
|
+
// Build request input - filter out system messages for Codex (uses instructions field instead)
|
|
397
|
+
let requestInput = input;
|
|
398
|
+
if (isCodex) {
|
|
399
|
+
// In Codex mode, system prompt goes in instructions field, not input array
|
|
400
|
+
// Only filter items that have a 'role' property (function_call/function_call_output don't)
|
|
401
|
+
requestInput = requestInput.filter((msg) => !('role' in msg) || msg.role !== 'system');
|
|
402
|
+
}
|
|
275
403
|
const request = {
|
|
276
404
|
model: resolvedModel,
|
|
277
|
-
input,
|
|
405
|
+
input: requestInput,
|
|
278
406
|
stream: true,
|
|
279
407
|
...(requestOverrides || {}),
|
|
280
408
|
};
|
|
281
409
|
if (responsesTools && responsesTools.length > 0) {
|
|
282
410
|
request.tools = responsesTools;
|
|
283
411
|
}
|
|
412
|
+
// @plan PLAN-20251214-ISSUE160.P05
|
|
413
|
+
// Add Codex-specific request parameters
|
|
414
|
+
if (isCodex) {
|
|
415
|
+
// Codex API requires the official system prompt in instructions field
|
|
416
|
+
request.instructions = CODEX_SYSTEM_PROMPT;
|
|
417
|
+
request.store = false;
|
|
418
|
+
// Codex API (ChatGPT backend) doesn't support max_output_tokens parameter
|
|
419
|
+
// Remove it to prevent 400 errors
|
|
420
|
+
if ('max_output_tokens' in request) {
|
|
421
|
+
delete request.max_output_tokens;
|
|
422
|
+
this.logger.debug(() => 'Codex mode: removed unsupported max_output_tokens from request');
|
|
423
|
+
}
|
|
424
|
+
this.logger.debug(() => 'Codex mode: setting instructions and store=false');
|
|
425
|
+
}
|
|
284
426
|
const responsesURL = `${baseURL}/responses`;
|
|
285
427
|
const requestBody = JSON.stringify(request);
|
|
428
|
+
// @plan PLAN-20251214-ISSUE160.P05
|
|
429
|
+
// Codex API requires Content-Type without charset suffix
|
|
430
|
+
const contentType = isCodex
|
|
431
|
+
? 'application/json'
|
|
432
|
+
: 'application/json; charset=utf-8';
|
|
286
433
|
const bodyBlob = new Blob([requestBody], {
|
|
287
|
-
type:
|
|
434
|
+
type: contentType,
|
|
288
435
|
});
|
|
289
436
|
// @plan:PLAN-20251023-STATELESS-HARDENING.P08
|
|
290
437
|
// @requirement:REQ-SP4-002/REQ-SP4-003
|
|
@@ -292,16 +439,28 @@ export class OpenAIResponsesProvider extends BaseProvider {
|
|
|
292
439
|
const customHeaders = this.getCustomHeaders();
|
|
293
440
|
const headers = {
|
|
294
441
|
Authorization: `Bearer ${apiKey}`,
|
|
295
|
-
'Content-Type':
|
|
442
|
+
'Content-Type': contentType,
|
|
296
443
|
...(customHeaders ?? {}),
|
|
297
444
|
};
|
|
298
|
-
|
|
445
|
+
// @plan PLAN-20251214-ISSUE160.P05
|
|
446
|
+
// Add Codex-specific headers when in Codex mode
|
|
447
|
+
if (isCodex) {
|
|
448
|
+
const accountId = await this.getCodexAccountId();
|
|
449
|
+
headers['ChatGPT-Account-ID'] = accountId;
|
|
450
|
+
headers['originator'] = 'codex_cli_rs';
|
|
451
|
+
this.logger.debug(() => `Codex mode: adding headers for account ${accountId.substring(0, 8)}...`);
|
|
452
|
+
}
|
|
453
|
+
// @plan PLAN-20251215-issue813: Wrap with retryWithBackoff for 429/5xx handling
|
|
454
|
+
const response = await retryWithBackoff(() => fetch(responsesURL, {
|
|
299
455
|
method: 'POST',
|
|
300
456
|
headers,
|
|
301
457
|
body: bodyBlob,
|
|
458
|
+
}), {
|
|
459
|
+
shouldRetryOnError: this.shouldRetryOnError.bind(this),
|
|
302
460
|
});
|
|
303
461
|
if (!response.ok) {
|
|
304
462
|
const errorBody = await response.text();
|
|
463
|
+
this.logger.debug(() => `API error ${response.status}: ${errorBody.substring(0, 500)}`);
|
|
305
464
|
throw parseErrorResponse(response.status, errorBody, this.name);
|
|
306
465
|
}
|
|
307
466
|
if (response.body) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIResponsesProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/OpenAIResponsesProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OpenAIResponsesProvider.js","sourceRoot":"","sources":["../../../../src/providers/openai-responses/OpenAIResponsesProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,74 @@ const streamText = Ai.streamText;
|
|
|
42
42
|
const generateText = Ai.generateText;
|
|
43
43
|
const extractReasoningMiddleware = Ai.extractReasoningMiddleware;
|
|
44
44
|
const wrapLanguageModel = Ai.wrapLanguageModel;
|
|
45
|
+
function isQwenBaseURL(baseURL) {
|
|
46
|
+
const candidate = baseURL?.trim();
|
|
47
|
+
if (!candidate)
|
|
48
|
+
return false;
|
|
49
|
+
const normalized = candidate.includes('://')
|
|
50
|
+
? candidate
|
|
51
|
+
: `https://${candidate}`;
|
|
52
|
+
try {
|
|
53
|
+
const hostname = new URL(normalized).hostname.toLowerCase();
|
|
54
|
+
return (hostname === 'dashscope.aliyuncs.com' ||
|
|
55
|
+
hostname.endsWith('.dashscope.aliyuncs.com') ||
|
|
56
|
+
hostname === 'portal.qwen.ai' ||
|
|
57
|
+
hostname.endsWith('.qwen.ai') ||
|
|
58
|
+
hostname === 'api.qwen.com' ||
|
|
59
|
+
hostname.endsWith('.qwen.com'));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Some OpenAI-compatible providers reject the OpenAI "developer" role. The Vercel
|
|
67
|
+
* OpenAI provider maps system prompts to "developer" for non-gpt-* model IDs, so
|
|
68
|
+
* we rewrite it back to "system" for compatibility.
|
|
69
|
+
*/
|
|
70
|
+
function createDeveloperRoleToSystemFetch(innerFetch) {
|
|
71
|
+
return async (input, init) => {
|
|
72
|
+
if (!init || typeof init.body !== 'string') {
|
|
73
|
+
return innerFetch(input, init);
|
|
74
|
+
}
|
|
75
|
+
let parsedBody;
|
|
76
|
+
try {
|
|
77
|
+
parsedBody = JSON.parse(init.body);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return innerFetch(input, init);
|
|
81
|
+
}
|
|
82
|
+
if (!parsedBody ||
|
|
83
|
+
typeof parsedBody !== 'object' ||
|
|
84
|
+
!('messages' in parsedBody) ||
|
|
85
|
+
!Array.isArray(parsedBody.messages)) {
|
|
86
|
+
return innerFetch(input, init);
|
|
87
|
+
}
|
|
88
|
+
let changed = false;
|
|
89
|
+
const rewrittenMessages = parsedBody.messages.map((message) => {
|
|
90
|
+
if (message &&
|
|
91
|
+
typeof message === 'object' &&
|
|
92
|
+
message.role === 'developer') {
|
|
93
|
+
changed = true;
|
|
94
|
+
return { ...message, role: 'system' };
|
|
95
|
+
}
|
|
96
|
+
return message;
|
|
97
|
+
});
|
|
98
|
+
if (!changed) {
|
|
99
|
+
return innerFetch(input, init);
|
|
100
|
+
}
|
|
101
|
+
const headers = new Headers(init.headers);
|
|
102
|
+
headers.delete('content-length');
|
|
103
|
+
return innerFetch(input, {
|
|
104
|
+
...init,
|
|
105
|
+
headers,
|
|
106
|
+
body: JSON.stringify({
|
|
107
|
+
...parsedBody,
|
|
108
|
+
messages: rewrittenMessages,
|
|
109
|
+
}),
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
}
|
|
45
113
|
/**
|
|
46
114
|
* Creates a custom fetch function that intercepts streaming responses
|
|
47
115
|
* and extracts reasoning_content from SSE chunks.
|
|
@@ -137,18 +205,30 @@ export class OpenAIVercelProvider extends BaseProvider {
|
|
|
137
205
|
constructor(apiKey, baseURL, config, oauthManager) {
|
|
138
206
|
// Normalize empty string to undefined for proper precedence handling
|
|
139
207
|
const normalizedApiKey = apiKey && apiKey.trim() !== '' ? apiKey : undefined;
|
|
208
|
+
const providerConfig = config;
|
|
209
|
+
const forceQwenOAuth = Boolean(providerConfig?.forceQwenOAuth);
|
|
210
|
+
const shouldEnableQwenOAuth = isQwenBaseURL(baseURL) || forceQwenOAuth;
|
|
140
211
|
super({
|
|
141
212
|
name: 'openaivercel',
|
|
142
213
|
apiKey: normalizedApiKey,
|
|
143
214
|
baseURL,
|
|
144
215
|
envKeyNames: ['OPENAI_API_KEY'],
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
oauthProvider: undefined,
|
|
216
|
+
isOAuthEnabled: shouldEnableQwenOAuth && !!oauthManager,
|
|
217
|
+
oauthProvider: shouldEnableQwenOAuth ? 'qwen' : undefined,
|
|
148
218
|
oauthManager,
|
|
149
219
|
}, config);
|
|
150
220
|
}
|
|
151
221
|
supportsOAuth() {
|
|
222
|
+
const providerConfig = this.providerConfig;
|
|
223
|
+
if (providerConfig?.forceQwenOAuth) {
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
if (this.name === 'qwen') {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
if (isQwenBaseURL(this.getBaseURL())) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
152
232
|
return false;
|
|
153
233
|
}
|
|
154
234
|
/**
|
|
@@ -163,16 +243,21 @@ export class OpenAIVercelProvider extends BaseProvider {
|
|
|
163
243
|
async createOpenAIClient(options, customFetch) {
|
|
164
244
|
const authToken = (await resolveRuntimeAuthToken(options.resolved.authToken)) ?? '';
|
|
165
245
|
const baseURL = options.resolved.baseURL ?? this.baseProviderConfig.baseURL;
|
|
246
|
+
const providerConfig = this.providerConfig;
|
|
247
|
+
const shouldForceSystemRole = Boolean(providerConfig?.forceQwenOAuth) || isQwenBaseURL(baseURL);
|
|
166
248
|
// Allow local endpoints without authentication
|
|
167
249
|
if (!authToken && !isLocalEndpoint(baseURL)) {
|
|
168
250
|
throw new AuthenticationError(`Auth token unavailable for runtimeId=${options.runtime?.runtimeId} (REQ-SP4-003).`, this.name);
|
|
169
251
|
}
|
|
170
252
|
const headers = this.getCustomHeaders();
|
|
253
|
+
const fetchWithCompatibility = shouldForceSystemRole
|
|
254
|
+
? createDeveloperRoleToSystemFetch(customFetch ?? fetch)
|
|
255
|
+
: customFetch;
|
|
171
256
|
return createOpenAI({
|
|
172
257
|
apiKey: authToken || undefined,
|
|
173
258
|
baseURL: baseURL || undefined,
|
|
174
259
|
headers: headers || undefined,
|
|
175
|
-
fetch:
|
|
260
|
+
fetch: fetchWithCompatibility,
|
|
176
261
|
});
|
|
177
262
|
}
|
|
178
263
|
/**
|
|
@@ -1245,9 +1330,7 @@ export class OpenAIVercelProvider extends BaseProvider {
|
|
|
1245
1330
|
return models.sort((a, b) => a.name.localeCompare(b.name));
|
|
1246
1331
|
}
|
|
1247
1332
|
getDefaultModel() {
|
|
1248
|
-
|
|
1249
|
-
if (baseURL &&
|
|
1250
|
-
(baseURL.includes('qwen') || baseURL.includes('dashscope'))) {
|
|
1333
|
+
if (isQwenBaseURL(this.getBaseURL())) {
|
|
1251
1334
|
return process.env.LLXPRT_DEFAULT_MODEL || 'qwen3-coder-plus';
|
|
1252
1335
|
}
|
|
1253
1336
|
return process.env.LLXPRT_DEFAULT_MODEL || 'gpt-4o';
|