From de3f6a5f21fdeefcde72558fa970f7c9208603d7 Mon Sep 17 00:00:00 2001 From: hex2077 Date: Thu, 5 Feb 2026 15:28:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=E8=AF=B7=E6=B1=82ID=E4=B8=B4=E6=97=B6=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=88=B0=E5=90=84AI=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在各AI服务提供商的核心API方法中添加monitorRequestId临时存储逻辑,用于跟踪请求链路。当请求体中包含_monitorRequestId字段时,将其存储到配置对象中并从请求体中删除,避免干扰API调用。 修改涉及以下提供商: - Claude (claude-core.js, claude-kiro.js) - OpenAI (openai-core.js, openai-responses-core.js, iflow-core.js, codex-core.js, qwen-core.js) - Forward (forward-core.js) - Gemini (gemini-core.js, antigravity-core.js) 统一处理模式:检查请求体中的_monitorRequestId字段,存储到this.config._monitorRequestId,然后从请求体中删除该字段。 --- src/providers/claude/claude-core.js | 6 ++++++ src/providers/claude/claude-kiro.js | 2 ++ src/providers/forward/forward-core.js | 12 ++++++++++++ src/providers/gemini/antigravity-core.js | 12 ++++++++++++ src/providers/gemini/gemini-core.js | 12 ++++++++++++ src/providers/openai/codex-core.js | 12 ++++++++++++ src/providers/openai/iflow-core.js | 12 ++++++++++++ src/providers/openai/openai-core.js | 12 ++++++++++++ src/providers/openai/openai-responses-core.js | 12 ++++++++++++ src/providers/openai/qwen-core.js | 12 ++++++++++++ 10 files changed, 104 insertions(+) diff --git a/src/providers/claude/claude-core.js b/src/providers/claude/claude-core.js index b5f7a72..2f84a48 100644 --- a/src/providers/claude/claude-core.js +++ b/src/providers/claude/claude-core.js @@ -226,6 +226,12 @@ export class ClaudeApiService { * @returns {Promise} Claude API response (Claude compatible format). */ async generateContent(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + const response = await this.callApi('/messages', requestBody); return response; } diff --git a/src/providers/claude/claude-kiro.js b/src/providers/claude/claude-kiro.js index 02ce9f3..7616503 100644 --- a/src/providers/claude/claude-kiro.js +++ b/src/providers/claude/claude-kiro.js @@ -1669,6 +1669,7 @@ async saveCredentialsToFile(filePath, newData) { // 临时存储 monitorRequestId if (requestBody._monitorRequestId) { this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; } // 检查 token 是否即将过期,如果是则推送到刷新队列 @@ -2031,6 +2032,7 @@ async saveCredentialsToFile(filePath, newData) { // 临时存储 monitorRequestId if (requestBody._monitorRequestId) { this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; } // 检查 token 是否即将过期,如果是则推送到刷新队列 diff --git a/src/providers/forward/forward-core.js b/src/providers/forward/forward-core.js index b2405b8..4e0da66 100644 --- a/src/providers/forward/forward-core.js +++ b/src/providers/forward/forward-core.js @@ -144,12 +144,24 @@ export class ForwardApiService { } async generateContent(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // Transparently pass the endpoint if provided in requestBody, otherwise use default const endpoint = requestBody.endpoint || ''; return this.callApi(endpoint, requestBody); } async *generateContentStream(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + const endpoint = requestBody.endpoint || ''; yield* this.streamApi(endpoint, requestBody); } diff --git a/src/providers/gemini/antigravity-core.js b/src/providers/gemini/antigravity-core.js index bbef8c0..db22bbb 100644 --- a/src/providers/gemini/antigravity-core.js +++ b/src/providers/gemini/antigravity-core.js @@ -1305,6 +1305,12 @@ export class AntigravityApiService { async generateContent(model, requestBody) { logger.info(`[Antigravity Auth Token] Time until expiry: ${formatExpiryTime(this.authClient.credentials.expiry_date)}`); + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); @@ -1372,6 +1378,12 @@ export class AntigravityApiService { async * generateContentStream(model, requestBody) { logger.info(`[Antigravity Auth Token] Time until expiry: ${formatExpiryTime(this.authClient.credentials.expiry_date)}`); + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); diff --git a/src/providers/gemini/gemini-core.js b/src/providers/gemini/gemini-core.js index 14a3d41..6d2614f 100644 --- a/src/providers/gemini/gemini-core.js +++ b/src/providers/gemini/gemini-core.js @@ -640,6 +640,12 @@ export class GeminiApiService { async generateContent(model, requestBody) { logger.info(`[Auth Token] Time until expiry: ${formatExpiryTime(this.authClient.credentials.expiry_date)}`); + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); @@ -665,6 +671,12 @@ export class GeminiApiService { async * generateContentStream(model, requestBody) { logger.info(`[Auth Token] Time until expiry: ${formatExpiryTime(this.authClient.credentials.expiry_date)}`); + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); diff --git a/src/providers/openai/codex-core.js b/src/providers/openai/codex-core.js index fb1930e..74b0a50 100644 --- a/src/providers/openai/codex-core.js +++ b/src/providers/openai/codex-core.js @@ -129,6 +129,12 @@ export class CodexApiService { await this.initialize(); } + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); @@ -191,6 +197,12 @@ export class CodexApiService { await this.initialize(); } + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); diff --git a/src/providers/openai/iflow-core.js b/src/providers/openai/iflow-core.js index a4c0df3..31d5d89 100644 --- a/src/providers/openai/iflow-core.js +++ b/src/providers/openai/iflow-core.js @@ -997,6 +997,12 @@ export class IFlowApiService { if (!this.isInitialized) { await this.initialize(); } + + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { @@ -1019,6 +1025,12 @@ export class IFlowApiService { if (!this.isInitialized) { await this.initialize(); } + + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { diff --git a/src/providers/openai/openai-core.js b/src/providers/openai/openai-core.js index fbf7afb..065320f 100644 --- a/src/providers/openai/openai-core.js +++ b/src/providers/openai/openai-core.js @@ -189,10 +189,22 @@ export class OpenAIApiService { } async generateContent(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + return this.callApi('/chat/completions', requestBody); } async *generateContentStream(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + yield* this.streamApi('/chat/completions', requestBody); } diff --git a/src/providers/openai/openai-responses-core.js b/src/providers/openai/openai-responses-core.js index cbec8f4..bca7a03 100644 --- a/src/providers/openai/openai-responses-core.js +++ b/src/providers/openai/openai-responses-core.js @@ -157,10 +157,22 @@ export class OpenAIResponsesApiService { } async generateContent(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + return this.callApi('/responses', requestBody); } async *generateContentStream(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + yield* this.streamApi('/responses', requestBody); } diff --git a/src/providers/openai/qwen-core.js b/src/providers/openai/qwen-core.js index 753abca..a6bf582 100644 --- a/src/providers/openai/qwen-core.js +++ b/src/providers/openai/qwen-core.js @@ -651,6 +651,12 @@ export class QwenApiService { } async generateContent(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager(); @@ -666,6 +672,12 @@ export class QwenApiService { } async *generateContentStream(model, requestBody) { + // 临时存储 monitorRequestId + if (requestBody._monitorRequestId) { + this.config._monitorRequestId = requestBody._monitorRequestId; + delete requestBody._monitorRequestId; + } + // 检查 token 是否即将过期,如果是则推送到刷新队列 if (this.isExpiryDateNear()) { const poolManager = getProviderPoolManager();