diff --git a/app.js b/app.js index 80e4beb..4d312c2 100644 --- a/app.js +++ b/app.js @@ -3398,6 +3398,12 @@ class CLIProxyManager { possibleSources.push(maskedPersonalId); } + // 规则3:AI Studio 特殊处理 - 对完整文件名脱敏 + if (nameWithoutExt.startsWith('aistudio-')) { + const maskedFullName = this.maskApiKey(nameWithoutExt); + possibleSources.push(maskedFullName); + } + // 查找第一个有统计数据的匹配 for (const source of possibleSources) { if (stats[source] && (stats[source].success > 0 || stats[source].failure > 0)) { @@ -3418,6 +3424,12 @@ class CLIProxyManager { case 'gemini': typeDisplayKey = 'auth_files.type_gemini'; break; + case 'gemini-cli': + typeDisplayKey = 'auth_files.type_gemini-cli'; + break; + case 'aistudio': + typeDisplayKey = 'auth_files.type_aistudio'; + break; case 'claude': typeDisplayKey = 'auth_files.type_claude'; break; @@ -3487,6 +3499,8 @@ class CLIProxyManager { { type: 'all', labelKey: 'auth_files.filter_all' }, { type: 'qwen', labelKey: 'auth_files.filter_qwen' }, { type: 'gemini', labelKey: 'auth_files.filter_gemini' }, + { type: 'gemini-cli', labelKey: 'auth_files.filter_gemini-cli' }, + { type: 'aistudio', labelKey: 'auth_files.filter_aistudio' }, { type: 'claude', labelKey: 'auth_files.filter_claude' }, { type: 'codex', labelKey: 'auth_files.filter_codex' }, { type: 'iflow', labelKey: 'auth_files.filter_iflow' }, @@ -4648,7 +4662,7 @@ class CLIProxyManager { try { const response = await this.makeRequest('/usage'); const usage = response?.usage || null; - + if (!usage) { return {}; } @@ -4665,7 +4679,7 @@ class CLIProxyManager { details.forEach(detail => { const source = detail.source; if (!source) return; - + if (!sourceStats[source]) { sourceStats[source] = { success: 0, diff --git a/i18n.js b/i18n.js index 4328f33..99f9b78 100644 --- a/i18n.js +++ b/i18n.js @@ -225,6 +225,8 @@ const i18n = { 'auth_files.filter_all': '全部', 'auth_files.filter_qwen': 'Qwen', 'auth_files.filter_gemini': 'Gemini', + 'auth_files.filter_gemini-cli': 'GeminiCLI', + 'auth_files.filter_aistudio': 'AIStudio', 'auth_files.filter_claude': 'Claude', 'auth_files.filter_codex': 'Codex', 'auth_files.filter_iflow': 'iFlow', @@ -232,6 +234,8 @@ const i18n = { 'auth_files.filter_unknown': '其他', 'auth_files.type_qwen': 'Qwen', 'auth_files.type_gemini': 'Gemini', + 'auth_files.type_gemini-cli': 'GeminiCLI', + 'auth_files.type_aistudio': 'AIStudio', 'auth_files.type_claude': 'Claude', 'auth_files.type_codex': 'Codex', 'auth_files.type_iflow': 'iFlow', @@ -667,6 +671,8 @@ const i18n = { 'auth_files.filter_all': 'All', 'auth_files.filter_qwen': 'Qwen', 'auth_files.filter_gemini': 'Gemini', + 'auth_files.filter_gemini-cli': 'GeminiCLI', + 'auth_files.filter_aistudio': 'AIStudio', 'auth_files.filter_claude': 'Claude', 'auth_files.filter_codex': 'Codex', 'auth_files.filter_iflow': 'iFlow', @@ -674,6 +680,8 @@ const i18n = { 'auth_files.filter_unknown': 'Other', 'auth_files.type_qwen': 'Qwen', 'auth_files.type_gemini': 'Gemini', + 'auth_files.type_gemini-cli': 'GeminiCLI', + 'auth_files.type_aistudio': 'AIStudio', 'auth_files.type_claude': 'Claude', 'auth_files.type_codex': 'Codex', 'auth_files.type_iflow': 'iFlow', diff --git a/index.html b/index.html index 5dad9e4..11b5750 100644 --- a/index.html +++ b/index.html @@ -427,6 +427,8 @@ + +