diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 8b3df64..befa3a8 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -376,6 +376,7 @@ "filter_qwen": "Qwen", "filter_gemini": "Gemini", "filter_gemini-cli": "GeminiCLI", + "filter_kimi": "Kimi", "filter_aistudio": "AIStudio", "filter_claude": "Claude", "filter_codex": "Codex", @@ -387,6 +388,7 @@ "type_qwen": "Qwen", "type_gemini": "Gemini", "type_gemini-cli": "GeminiCLI", + "type_kimi": "Kimi", "type_aistudio": "AIStudio", "type_claude": "Claude", "type_codex": "Codex", @@ -637,6 +639,17 @@ "gemini_cli_oauth_status_error": "Authentication failed:", "gemini_cli_oauth_start_error": "Failed to start Gemini CLI OAuth:", "gemini_cli_oauth_polling_error": "Failed to check authentication status:", + "kimi_oauth_title": "Kimi OAuth", + "kimi_oauth_button": "Start Kimi Login", + "kimi_oauth_hint": "Login to Kimi service through OAuth device flow, automatically obtain and save authentication files.", + "kimi_oauth_url_label": "Authorization URL:", + "kimi_open_link": "Open Link", + "kimi_copy_link": "Copy Link", + "kimi_oauth_status_waiting": "Waiting for authentication...", + "kimi_oauth_status_success": "Authentication successful!", + "kimi_oauth_status_error": "Authentication failed:", + "kimi_oauth_start_error": "Failed to start Kimi OAuth:", + "kimi_oauth_polling_error": "Failed to check authentication status:", "qwen_oauth_title": "Qwen OAuth", "qwen_oauth_button": "Start Qwen Login", "qwen_oauth_hint": "Login to Qwen service through device authorization flow, automatically obtain and save authentication files.", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index d4b7c26..f04e6bc 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -376,6 +376,7 @@ "filter_qwen": "Qwen", "filter_gemini": "Gemini", "filter_gemini-cli": "GeminiCLI", + "filter_kimi": "Kimi", "filter_aistudio": "AIStudio", "filter_claude": "Claude", "filter_codex": "Codex", @@ -387,6 +388,7 @@ "type_qwen": "Qwen", "type_gemini": "Gemini", "type_gemini-cli": "GeminiCLI", + "type_kimi": "Kimi", "type_aistudio": "AIStudio", "type_claude": "Claude", "type_codex": "Codex", @@ -637,6 +639,17 @@ "gemini_cli_oauth_status_error": "认证失败:", "gemini_cli_oauth_start_error": "启动 Gemini CLI OAuth 失败:", "gemini_cli_oauth_polling_error": "检查认证状态失败:", + "kimi_oauth_title": "Kimi OAuth", + "kimi_oauth_button": "开始 Kimi 登录", + "kimi_oauth_hint": "通过设备授权流程登录 Kimi 服务,自动获取并保存认证文件。", + "kimi_oauth_url_label": "授权链接:", + "kimi_open_link": "打开链接", + "kimi_copy_link": "复制链接", + "kimi_oauth_status_waiting": "等待认证中...", + "kimi_oauth_status_success": "认证成功!", + "kimi_oauth_status_error": "认证失败:", + "kimi_oauth_start_error": "启动 Kimi OAuth 失败:", + "kimi_oauth_polling_error": "检查认证状态失败:", "qwen_oauth_title": "Qwen OAuth", "qwen_oauth_button": "开始 Qwen 登录", "qwen_oauth_hint": "通过设备授权流程登录 Qwen 服务,自动获取并保存认证文件。", diff --git a/src/pages/AuthFilesPage.tsx b/src/pages/AuthFilesPage.tsx index 4fa9b72..6b239d6 100644 --- a/src/pages/AuthFilesPage.tsx +++ b/src/pages/AuthFilesPage.tsx @@ -48,6 +48,10 @@ const TYPE_COLORS: Record = { light: { bg: '#e8f5e9', text: '#2e7d32' }, dark: { bg: '#1b5e20', text: '#81c784' }, }, + kimi: { + light: { bg: '#fff4e5', text: '#ad6800' }, + dark: { bg: '#7c4a03', text: '#ffd591' }, + }, gemini: { light: { bg: '#e3f2fd', text: '#1565c0' }, dark: { bg: '#0d47a1', text: '#64b5f6' }, diff --git a/src/pages/OAuthPage.tsx b/src/pages/OAuthPage.tsx index 066a4b6..f0bc72d 100644 --- a/src/pages/OAuthPage.tsx +++ b/src/pages/OAuthPage.tsx @@ -12,6 +12,8 @@ import iconCodexDark from '@/assets/icons/codex_drak.svg'; import iconClaude from '@/assets/icons/claude.svg'; import iconAntigravity from '@/assets/icons/antigravity.svg'; import iconGemini from '@/assets/icons/gemini.svg'; +import iconKimiLight from '@/assets/icons/kimi-light.svg'; +import iconKimiDark from '@/assets/icons/kimi-dark.svg'; import iconQwen from '@/assets/icons/qwen.svg'; import iconIflow from '@/assets/icons/iflow.svg'; import iconVertex from '@/assets/icons/vertex.svg'; @@ -59,6 +61,7 @@ const PROVIDERS: { id: OAuthProvider; titleKey: string; hintKey: string; urlLabe { id: 'anthropic', titleKey: 'auth_login.anthropic_oauth_title', hintKey: 'auth_login.anthropic_oauth_hint', urlLabelKey: 'auth_login.anthropic_oauth_url_label', icon: iconClaude }, { id: 'antigravity', titleKey: 'auth_login.antigravity_oauth_title', hintKey: 'auth_login.antigravity_oauth_hint', urlLabelKey: 'auth_login.antigravity_oauth_url_label', icon: iconAntigravity }, { id: 'gemini-cli', titleKey: 'auth_login.gemini_cli_oauth_title', hintKey: 'auth_login.gemini_cli_oauth_hint', urlLabelKey: 'auth_login.gemini_cli_oauth_url_label', icon: iconGemini }, + { id: 'kimi', titleKey: 'auth_login.kimi_oauth_title', hintKey: 'auth_login.kimi_oauth_hint', urlLabelKey: 'auth_login.kimi_oauth_url_label', icon: { light: iconKimiLight, dark: iconKimiDark } }, { id: 'qwen', titleKey: 'auth_login.qwen_oauth_title', hintKey: 'auth_login.qwen_oauth_hint', urlLabelKey: 'auth_login.qwen_oauth_url_label', icon: iconQwen } ]; diff --git a/src/services/api/oauth.ts b/src/services/api/oauth.ts index 456aafd..231d8d7 100644 --- a/src/services/api/oauth.ts +++ b/src/services/api/oauth.ts @@ -9,6 +9,7 @@ export type OAuthProvider = | 'anthropic' | 'antigravity' | 'gemini-cli' + | 'kimi' | 'qwen'; export interface OAuthStartResponse { diff --git a/src/types/authFile.ts b/src/types/authFile.ts index 86b71f4..2a56284 100644 --- a/src/types/authFile.ts +++ b/src/types/authFile.ts @@ -5,6 +5,7 @@ export type AuthFileType = | 'qwen' + | 'kimi' | 'gemini' | 'gemini-cli' | 'aistudio' diff --git a/src/types/oauth.ts b/src/types/oauth.ts index 2a32cde..524eb13 100644 --- a/src/types/oauth.ts +++ b/src/types/oauth.ts @@ -9,6 +9,7 @@ export type OAuthProvider = | 'anthropic' | 'antigravity' | 'gemini-cli' + | 'kimi' | 'qwen'; // OAuth 流程状态 diff --git a/src/utils/constants.ts b/src/utils/constants.ts index eb1b650..8266a8d 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -42,6 +42,7 @@ export const OAUTH_CARD_IDS = [ 'anthropic-oauth-card', 'antigravity-oauth-card', 'gemini-cli-oauth-card', + 'kimi-oauth-card', 'qwen-oauth-card' ]; export const OAUTH_PROVIDERS = { @@ -49,6 +50,7 @@ export const OAUTH_PROVIDERS = { ANTHROPIC: 'anthropic', ANTIGRAVITY: 'antigravity', GEMINI_CLI: 'gemini-cli', + KIMI: 'kimi', QWEN: 'qwen' } as const;