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 @@
+
+