diff --git a/configs/provider_pools.json.example b/configs/provider_pools.json.example
index 6998f60..98e5643 100644
--- a/configs/provider_pools.json.example
+++ b/configs/provider_pools.json.example
@@ -5,7 +5,7 @@
"OPENAI_API_KEY": "sk-openai-key1",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"notSupportedModels": ["gpt-4-turbo"],
"uuid": "2f579c65-d3c5-41b1-9985-9f6e3d7bf39c",
"isHealthy": true,
@@ -20,7 +20,7 @@
"OPENAI_API_KEY": "sk-openai-key2",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"notSupportedModels": ["gpt-4-turbo", "gpt-4"],
"uuid": "e284628d-302f-456d-91f3-6095386fb3b8",
"isHealthy": true,
@@ -37,7 +37,7 @@
"OPENAI_API_KEY": "sk-openai-key",
"OPENAI_BASE_URL": "https://api.openai.com/v1",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"uuid": "e284628d-302f-456d-91f3-609538678968",
"isHealthy": true,
"isDisabled": false,
@@ -53,7 +53,7 @@
"GEMINI_OAUTH_CREDS_FILE_PATH": "./credentials1.json",
"PROJECT_ID": "your-project-id-1",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"uuid": "ac200154-26b8-4f5f-8650-e8cc738b06e3",
"isHealthy": true,
"isDisabled": false,
@@ -67,7 +67,7 @@
"GEMINI_OAUTH_CREDS_FILE_PATH": "./credentials2.json",
"PROJECT_ID": "your-project-id-2",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"uuid": "4f8afcc2-a9bb-4b96-bb50-3b9667a71f54",
"isHealthy": true,
"isDisabled": false,
@@ -83,7 +83,7 @@
"CLAUDE_API_KEY": "sk-claude-key1",
"CLAUDE_BASE_URL": "https://api.anthropic.com",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"uuid": "bb87047a-3b1d-4249-adbb-1087ecd58128",
"isHealthy": true,
"isDisabled": false,
@@ -97,7 +97,7 @@
"CLAUDE_API_KEY": "sk-claude-key2",
"CLAUDE_BASE_URL": "https://api.anthropic.com",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"uuid": "7c2002c6-122a-4db0-af06-8a0ff433801a",
"isHealthy": true,
"isDisabled": false,
@@ -113,7 +113,7 @@
"KIRO_OAUTH_CREDS_FILE_PATH": "./kiro_creds1.json",
"uuid": "2c69d0ac-b86f-43d8-9d17-0d300afc5cfd",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -126,7 +126,7 @@
"KIRO_OAUTH_CREDS_FILE_PATH": "./kiro_creds2.json",
"uuid": "7482abe6-8083-4288-bb7d-d8ecb7c461e2",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -141,7 +141,7 @@
"QWEN_OAUTH_CREDS_FILE_PATH": "./qwen_creds.json",
"uuid": "658a2114-c4c9-d713-b8d4-ceabf0e0bf18",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -157,7 +157,7 @@
"PROJECT_ID": "antigravity-project-1",
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -171,7 +171,7 @@
"PROJECT_ID": "antigravity-project-2",
"uuid": "f0e9d8c7-b6a5-4321-fedc-ba9876543210",
"checkModelName": null,
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -187,7 +187,7 @@
"IFLOW_BASE_URL": "https://apis.iflow.cn/v1",
"uuid": "11223344-5566-7788-99aa-bbccddeeff00",
"checkModelName": "gpt-4o",
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
@@ -201,7 +201,7 @@
"IFLOW_BASE_URL": "https://apis.iflow.cn/v1",
"uuid": "aabbccdd-eeff-0011-2233-445566778899",
"checkModelName": "gpt-4o",
- "checkHealth": true,
+ "checkHealth": false,
"isHealthy": true,
"isDisabled": false,
"lastUsed": null,
diff --git a/src/plugins/api-potluck/index.js b/src/plugins/api-potluck/index.js
index 4d85ae7..35ae1cf 100644
--- a/src/plugins/api-potluck/index.js
+++ b/src/plugins/api-potluck/index.js
@@ -40,7 +40,7 @@ import { handlePotluckApiRoutes, handlePotluckUserApiRoutes, startHealthCheckSch
const apiPotluckPlugin = {
name: 'api-potluck',
version: '1.0.1',
- description: 'API 大锅饭 - Key 管理和用量统计插件',
+ description: 'API 大锅饭 - Key 管理和用量统计插件
管理端:potluck.html
用户端:potluck-user.html',
// 插件类型:认证插件
type: 'auth',
diff --git a/src/providers/claude/claude-kiro.js b/src/providers/claude/claude-kiro.js
index 8acae3e..cf7b89d 100644
--- a/src/providers/claude/claude-kiro.js
+++ b/src/providers/claude/claude-kiro.js
@@ -26,7 +26,7 @@ const KIRO_CONSTANTS = {
AUTH_METHOD_SOCIAL: 'social',
CHAT_TRIGGER_TYPE_MANUAL: 'MANUAL',
ORIGIN_AI_EDITOR: 'AI_EDITOR',
- TOTAL_CONTEXT_TOKENS: 200000, // 总上下文 200k tokens
+ TOTAL_CONTEXT_TOKENS: 160000, // 总上下文 160k tokens
};
// 从 provider-models.js 获取支持的模型列表
@@ -631,9 +631,23 @@ async initializeAuth(forceRefresh = false) {
const codewhispererModel = MODEL_MAPPING[model] || MODEL_MAPPING[this.modelName];
- // 动态压缩 tools(保留全部工具)
+ // 动态压缩 tools(保留全部工具,但过滤掉 web_search/websearch)
let toolsContext = {};
if (tools && Array.isArray(tools) && tools.length > 0) {
+ // 过滤掉 web_search 或 websearch 工具(忽略大小写)
+ const filteredTools = tools.filter(tool => {
+ const name = (tool.name || '').toLowerCase();
+ const shouldIgnore = name === 'web_search' || name === 'websearch';
+ if (shouldIgnore) {
+ console.log(`[Kiro] Ignoring tool: ${tool.name}`);
+ }
+ return !shouldIgnore;
+ });
+
+ if (filteredTools.length === 0) {
+ // 所有工具都被过滤掉了,不添加 tools 上下文
+ console.log('[Kiro] All tools were filtered out');
+ } else {
const TARGET_SIZE = 20000;
const simplifySchema = (schema) => {
@@ -653,7 +667,7 @@ async initializeAuth(forceRefresh = false) {
};
const buildTools = (maxDescLen, useSimplifiedSchema) => {
- return tools.map(tool => {
+ return filteredTools.map(tool => {
let desc = tool.description || "";
if (maxDescLen !== null && desc.length > maxDescLen) {
desc = desc.substring(0, maxDescLen) + "...";
@@ -701,10 +715,11 @@ async initializeAuth(forceRefresh = false) {
size = JSON.stringify(kiroTools).length;
}
}
- console.log(`[Kiro] Tools compressed: ${originalSize} -> ${size} bytes (${tools.length} tools)`);
+ console.log(`[Kiro] Tools compressed: ${originalSize} -> ${size} bytes (${filteredTools.length} tools)`);
}
toolsContext = { tools: kiroTools };
+ }
}
const history = [];
@@ -1562,6 +1577,13 @@ async initializeAuth(forceRefresh = false) {
console.log(`[Kiro] Received contextUsagePercentage: ${contextUsagePercentage}%`);
} else if (event.type === 'toolUse') {
const tc = event.toolUse;
+ // 统计工具调用的内容到 totalContent(用于 token 计算)
+ if (tc.name) {
+ totalContent += tc.name;
+ }
+ if (tc.input) {
+ totalContent += tc.input;
+ }
// 工具调用事件(包含 name 和 toolUseId)
if (tc.name && tc.toolUseId) {
// 检查是否是同一个工具调用的续传(相同 toolUseId)
@@ -1597,6 +1619,10 @@ async initializeAuth(forceRefresh = false) {
}
} else if (event.type === 'toolUseInput') {
// 工具调用的 input 续传事件
+ // 统计 input 内容到 totalContent(用于 token 计算)
+ if (event.input) {
+ totalContent += event.input;
+ }
if (currentToolCall) {
currentToolCall.input += event.input || '';
}
@@ -1672,7 +1698,7 @@ async initializeAuth(forceRefresh = false) {
// 如果有 contextUsagePercentage,使用它来计算 token
// 总上下文 200k tokens,通过百分比计算总使用量,再减去输入 token 得到输出 token
let totalTokens = 0;
- if (contextUsagePercentage !== null && contextUsagePercentage > 0) {
+ if (contextUsagePercentage !== null && contextUsagePercentage > 0 && true) {
const totalContextTokens = KIRO_CONSTANTS.TOTAL_CONTEXT_TOKENS;
// totalUsedTokens 就是通过百分比计算出的总使用量,直接作为 total_tokens
totalTokens = Math.round(totalContextTokens * contextUsagePercentage / 100);