From 5e937d0ce2bf2e1f8b7c3df13a945db21fa2415c Mon Sep 17 00:00:00 2001 From: iven Date: Sat, 11 Apr 2026 02:59:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=E7=A7=BB=E9=99=A4=E7=A9=BA?= =?UTF-8?q?=E5=A3=B3=E8=A1=8C=E4=B8=9A=E8=B5=84=E8=AE=AF=20Tab=20+=20Provi?= =?UTF-8?q?der=20URL=20=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SimpleSidebar: 移除空壳"行业资讯" Tab 和 Newspaper icon import - ModelsAPI.tsx: AVAILABLE_PROVIDERS 引用 LLM_PROVIDER_URLS 常量 - models.ts: PROVIDER_DEFAULTS 引用 api-urls.ts,消除重复 URL 定义 - 所有 Provider URL 现在统一在 api-urls.ts 维护 --- desktop/src/components/Settings/ModelsAPI.tsx | 19 ++-- desktop/src/components/SimpleSidebar.tsx | 89 +++++-------------- desktop/src/constants/models.ts | 28 +++--- 3 files changed, 49 insertions(+), 87 deletions(-) diff --git a/desktop/src/components/Settings/ModelsAPI.tsx b/desktop/src/components/Settings/ModelsAPI.tsx index 2d5bdf6..2201f94 100644 --- a/desktop/src/components/Settings/ModelsAPI.tsx +++ b/desktop/src/components/Settings/ModelsAPI.tsx @@ -6,6 +6,7 @@ import { useConfigStore } from '../../store/configStore'; import { useConversationStore } from '../../store/chat/conversationStore'; import { silentErrorHandler } from '../../lib/error-utils'; import { secureStorage } from '../../lib/secure-storage'; +import { LLM_PROVIDER_URLS } from '../../constants/api-urls'; import { Plus, Pencil, Trash2, Star, Eye, EyeOff, AlertCircle, X, Zap, Check } from 'lucide-react'; // 自定义模型数据结构 @@ -41,17 +42,17 @@ interface EmbeddingProvider { // P2-21: 外国模型 (OpenAI, Anthropic, Gemini) 暂停支持,标记为 suspended const AVAILABLE_PROVIDERS = [ // === Coding Plan 专用端点 (推荐用于编程场景) === - { id: 'kimi-coding', name: 'Kimi Coding Plan', baseUrl: 'https://api.kimi.com/coding/v1' }, - { id: 'qwen-coding', name: '百炼 Coding Plan', baseUrl: 'https://coding.dashscope.aliyuncs.com/v1' }, - { id: 'zhipu-coding', name: '智谱 GLM Coding Plan', baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4' }, + { id: 'kimi-coding', name: 'Kimi Coding Plan', baseUrl: LLM_PROVIDER_URLS.KIMI_CODING }, + { id: 'qwen-coding', name: '百炼 Coding Plan', baseUrl: LLM_PROVIDER_URLS.QWEN_CODING }, + { id: 'zhipu-coding', name: '智谱 GLM Coding Plan', baseUrl: LLM_PROVIDER_URLS.ZHIPU_CODING }, // === 标准 API 端点 (国内) === - { id: 'kimi', name: 'Kimi (标准 API)', baseUrl: 'https://api.moonshot.cn/v1' }, - { id: 'zhipu', name: '智谱 (标准 API)', baseUrl: 'https://open.bigmodel.cn/api/paas/v4' }, - { id: 'qwen', name: '百炼/通义千问 (标准)', baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1' }, - { id: 'deepseek', name: 'DeepSeek', baseUrl: 'https://api.deepseek.com/v1' }, + { id: 'kimi', name: 'Kimi (标准 API)', baseUrl: LLM_PROVIDER_URLS.KIMI }, + { id: 'zhipu', name: '智谱 (标准 API)', baseUrl: LLM_PROVIDER_URLS.ZHIPU }, + { id: 'qwen', name: '百炼/通义千问 (标准)', baseUrl: LLM_PROVIDER_URLS.QWEN }, + { id: 'deepseek', name: 'DeepSeek', baseUrl: LLM_PROVIDER_URLS.DEEPSEEK }, // === 暂停支持 (P2-21: 前期不使用非国内大模型) === - { id: 'openai', name: 'OpenAI (暂停支持)', baseUrl: 'https://api.openai.com/v1', suspended: true }, - { id: 'anthropic', name: 'Anthropic (暂停支持)', baseUrl: 'https://api.anthropic.com', suspended: true }, + { id: 'openai', name: 'OpenAI (暂停支持)', baseUrl: LLM_PROVIDER_URLS.OPENAI, suspended: true }, + { id: 'anthropic', name: 'Anthropic (暂停支持)', baseUrl: LLM_PROVIDER_URLS.ANTHROPIC, suspended: true }, { id: 'custom', name: '自定义', baseUrl: '' }, ]; diff --git a/desktop/src/components/SimpleSidebar.tsx b/desktop/src/components/SimpleSidebar.tsx index 3c6ae28..792626a 100644 --- a/desktop/src/components/SimpleSidebar.tsx +++ b/desktop/src/components/SimpleSidebar.tsx @@ -1,14 +1,14 @@ /** * SimpleSidebar - Trae Solo 风格的简洁侧边栏 * - * 仅显示:对话列表 + 行业资讯 + * 仅显示:对话列表 * 底部:模式切换 + 设置 */ import { useState } from 'react'; import { - MessageSquare, Settings, LayoutGrid, - Search, X, Newspaper, + Settings, LayoutGrid, + Search, X, } from 'lucide-react'; import { ConversationList } from './ConversationList'; @@ -17,10 +17,7 @@ interface SimpleSidebarProps { onToggleMode?: () => void; } -type Tab = 'conversations' | 'news'; - export function SimpleSidebar({ onOpenSettings, onToggleMode }: SimpleSidebarProps) { - const [activeTab, setActiveTab] = useState('conversations'); const [searchQuery, setSearchQuery] = useState(''); return ( @@ -32,68 +29,30 @@ export function SimpleSidebar({ onOpenSettings, onToggleMode }: SimpleSidebarPro - {/* Tab 切换: 对话 / 行业资讯 */} -
- - -
- {/* 内容区域 */}
- {activeTab === 'conversations' && ( -
- {/* 搜索框 */} -
- - setSearchQuery(e.target.value)} - className="w-full pl-9 pr-8 py-1.5 bg-white/60 dark:bg-gray-800 border border-[#e8e6e1] dark:border-gray-700 rounded-lg text-sm focus:outline-none focus:border-gray-400 transition-all text-gray-700 dark:text-gray-300 placeholder-gray-400" - /> - {searchQuery && ( - - )} -
- +
+ {/* 搜索框 */} +
+ + setSearchQuery(e.target.value)} + className="w-full pl-9 pr-8 py-1.5 bg-white/60 dark:bg-gray-800 border border-[#e8e6e1] dark:border-gray-700 rounded-lg text-sm focus:outline-none focus:border-gray-400 transition-all text-gray-700 dark:text-gray-300 placeholder-gray-400" + /> + {searchQuery && ( + + )}
- )} - - {activeTab === 'news' && ( -
-
- -

行业资讯

-

开发中,敬请期待

-
-
- )} + +
{/* 底部操作栏 */} diff --git a/desktop/src/constants/models.ts b/desktop/src/constants/models.ts index 8418538..338289a 100644 --- a/desktop/src/constants/models.ts +++ b/desktop/src/constants/models.ts @@ -5,6 +5,8 @@ * Backend (Rust) should use the same values in kernel_commands.rs */ +import { LLM_PROVIDER_URLS } from './api-urls'; + // === Default Model Configuration === /** @@ -31,58 +33,58 @@ export const DEFAULT_TEMPERATURE = 0.7 as const; /** * Default base URL for OpenAI API */ -export const DEFAULT_OPENAI_BASE_URL = 'https://api.openai.com/v1' as const; +export const DEFAULT_OPENAI_BASE_URL = LLM_PROVIDER_URLS.OPENAI as string; /** * Default base URL for Anthropic API */ -export const DEFAULT_ANTHROPIC_BASE_URL = 'https://api.anthropic.com' as const; +export const DEFAULT_ANTHROPIC_BASE_URL = LLM_PROVIDER_URLS.ANTHROPIC as string; // === Provider-Specific Defaults === export const PROVIDER_DEFAULTS = { openai: { - baseUrl: 'https://api.openai.com/v1', + baseUrl: LLM_PROVIDER_URLS.OPENAI, defaultModel: 'gpt-4o-mini', }, anthropic: { - baseUrl: 'https://api.anthropic.com', + baseUrl: LLM_PROVIDER_URLS.ANTHROPIC, defaultModel: 'claude-sonnet-4-20250514', }, zhipu: { - baseUrl: 'https://open.bigmodel.cn/api/paas/v4', + baseUrl: LLM_PROVIDER_URLS.ZHIPU, defaultModel: 'glm-4-flash-250414', }, zhipu_coding: { - baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4', + baseUrl: LLM_PROVIDER_URLS.ZHIPU_CODING, defaultModel: 'glm-4-flash-250414', }, kimi: { - baseUrl: 'https://api.moonshot.cn/v1', + baseUrl: LLM_PROVIDER_URLS.KIMI, defaultModel: 'moonshot-v1-8k', }, kimi_coding: { - baseUrl: 'https://api.kimi.com/coding/v1', + baseUrl: LLM_PROVIDER_URLS.KIMI_CODING, defaultModel: 'kimi-for-coding', }, qwen: { - baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1', + baseUrl: LLM_PROVIDER_URLS.QWEN, defaultModel: 'qwen-turbo', }, qwen_coding: { - baseUrl: 'https://coding.dashscope.aliyuncs.com/v1', + baseUrl: LLM_PROVIDER_URLS.QWEN_CODING, defaultModel: 'qwen3-coder-next', }, deepseek: { - baseUrl: 'https://api.deepseek.com/v1', + baseUrl: LLM_PROVIDER_URLS.DEEPSEEK, defaultModel: 'deepseek-chat', }, gemini: { - baseUrl: 'https://generativelanguage.googleapis.com/v1beta', + baseUrl: LLM_PROVIDER_URLS.GEMINI, defaultModel: 'gemini-2.0-flash', }, local: { - baseUrl: 'http://localhost:11434/v1', + baseUrl: LLM_PROVIDER_URLS.OLLAMA, defaultModel: 'llama3', }, } as const;