From 5f38753f6d316b0bd97c49e600711eedd1cf1e2d Mon Sep 17 00:00:00 2001 From: kurihada Date: Tue, 30 Dec 2025 10:41:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=B8=85=E7=90=86=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=92=8C=E6=8E=A5=E5=8F=A3=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 Provider 相关的 apiKeyEnvVar 字段(未实现的功能) - 清理 Server routes 中未使用的 Core 类型导入 - 清理 UI Message 接口中未使用的 metadata 字段 --- .../core/src/provider/builtin/anthropic.ts | 1 - .../core/src/provider/builtin/deepseek.ts | 1 - packages/core/src/provider/builtin/openai.ts | 1 - packages/core/src/provider/registry.ts | 2 -- packages/core/src/provider/types.ts | 9 +-------- packages/server/src/routes/agents.ts | 1 - packages/server/src/routes/checkpoints.ts | 15 +-------------- packages/server/src/routes/commands.ts | 6 +----- packages/server/src/routes/lsp.ts | 5 +---- packages/server/src/routes/mcp.ts | 7 +------ packages/server/src/routes/services.ts | 2 +- packages/server/src/routes/sessions.ts | 2 +- packages/server/src/types.ts | 5 ----- packages/ui/src/api/types.ts | 15 ++------------- packages/ui/src/components/ProviderEditor.tsx | 19 ------------------- packages/ui/src/components/ProvidersPanel.tsx | 16 ---------------- 16 files changed, 9 insertions(+), 98 deletions(-) diff --git a/packages/core/src/provider/builtin/anthropic.ts b/packages/core/src/provider/builtin/anthropic.ts index 745e575..2c79911 100644 --- a/packages/core/src/provider/builtin/anthropic.ts +++ b/packages/core/src/provider/builtin/anthropic.ts @@ -10,7 +10,6 @@ export const anthropicProvider: ProviderInfo = { name: 'Anthropic', description: 'Claude AI models by Anthropic', builtin: true, - apiKeyEnvVar: 'ANTHROPIC_API_KEY', models: [ { id: 'claude-sonnet-4-20250514', diff --git a/packages/core/src/provider/builtin/deepseek.ts b/packages/core/src/provider/builtin/deepseek.ts index 5d52b77..015f1e7 100644 --- a/packages/core/src/provider/builtin/deepseek.ts +++ b/packages/core/src/provider/builtin/deepseek.ts @@ -10,7 +10,6 @@ export const deepseekProvider: ProviderInfo = { name: 'DeepSeek', description: 'DeepSeek AI models', builtin: true, - apiKeyEnvVar: 'DEEPSEEK_API_KEY', models: [ { id: 'deepseek-chat', diff --git a/packages/core/src/provider/builtin/openai.ts b/packages/core/src/provider/builtin/openai.ts index 8c7a7a8..eaafc23 100644 --- a/packages/core/src/provider/builtin/openai.ts +++ b/packages/core/src/provider/builtin/openai.ts @@ -11,7 +11,6 @@ export const openaiProvider: ProviderInfo = { name: 'OpenAI', description: 'GPT models by OpenAI (also supports OpenAI-compatible APIs)', builtin: true, - apiKeyEnvVar: 'OPENAI_API_KEY', models: [ { id: 'gpt-4o', diff --git a/packages/core/src/provider/registry.ts b/packages/core/src/provider/registry.ts index e21d923..c389f9f 100644 --- a/packages/core/src/provider/registry.ts +++ b/packages/core/src/provider/registry.ts @@ -168,7 +168,6 @@ export class ProviderRegistry { description: provider.info.description, builtin: provider.info.builtin, baseUrl: config?.baseUrl ?? provider.info.baseUrl, - apiKeyEnvVar: provider.info.apiKeyEnvVar, models: provider.info.models, allowCustomModels: provider.info.allowCustomModels ?? false, config: { @@ -200,7 +199,6 @@ export class ProviderRegistry { description: definition.description, builtin: false, baseUrl: definition.baseUrl, - apiKeyEnvVar: definition.apiKeyEnvVar, models: definition.models ?? [], allowCustomModels: definition.allowCustomModels ?? true, }; diff --git a/packages/core/src/provider/types.ts b/packages/core/src/provider/types.ts index 5658fc9..c246b0a 100644 --- a/packages/core/src/provider/types.ts +++ b/packages/core/src/provider/types.ts @@ -48,8 +48,6 @@ export interface ProviderInfo { builtin: boolean; /** API 基础 URL */ baseUrl?: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 可用模型列表 */ models: ModelInfo[]; /** 是否允许自定义模型 */ @@ -60,10 +58,8 @@ export interface ProviderInfo { export interface ProviderConfig { /** 提供商 ID */ id: string; - /** API Key(直接存储,不推荐) */ + /** API Key */ apiKey?: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 自定义 Base URL */ baseUrl?: string; /** 是否启用 */ @@ -82,8 +78,6 @@ export interface CustomProviderDefinition { description?: string; /** API 基础 URL(必填) */ baseUrl: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 可用模型列表 */ models?: ModelInfo[]; /** 是否允许自定义模型 */ @@ -157,7 +151,6 @@ export interface ProviderDetail { description?: string; builtin: boolean; baseUrl?: string; - apiKeyEnvVar?: string; models: ModelInfo[]; allowCustomModels: boolean; config?: { diff --git a/packages/server/src/routes/agents.ts b/packages/server/src/routes/agents.ts index 9984294..b951975 100644 --- a/packages/server/src/routes/agents.ts +++ b/packages/server/src/routes/agents.ts @@ -9,7 +9,6 @@ import { getConfig } from './config.js'; import type { AgentMode, AgentInfo, - AgentConfigFile, AgentModelConfig, AgentPermission, } from '@ai-assistant/core'; diff --git a/packages/server/src/routes/checkpoints.ts b/packages/server/src/routes/checkpoints.ts index a4bc752..65a26dd 100644 --- a/packages/server/src/routes/checkpoints.ts +++ b/packages/server/src/routes/checkpoints.ts @@ -6,20 +6,7 @@ import { Hono } from 'hono'; import { getConfig } from './config.js'; -import type { - CheckpointMetadata, - CheckpointConfig, - CheckpointTrigger, - FileChange, - FileChangeType, - DiffInfo, - FileDiff, - RollbackOptions, - RollbackResult, - RollbackRecord, - SafetyCheckResult, - UnrevertResult, -} from '@ai-assistant/core'; +import type { CheckpointMetadata } from '@ai-assistant/core'; import { CheckpointManager, getCheckpointManager, diff --git a/packages/server/src/routes/commands.ts b/packages/server/src/routes/commands.ts index 38e10c9..5acf8c5 100644 --- a/packages/server/src/routes/commands.ts +++ b/packages/server/src/routes/commands.ts @@ -7,11 +7,7 @@ import { Hono } from 'hono'; import { z } from 'zod'; import { getConfig } from './config.js'; -import type { - Command, - CommandInput, - CommandExecutionResult, -} from '@ai-assistant/core'; +// Command, CommandInput, CommandExecutionResult 类型由函数自动推断 import { getCommandRegistry, createCommandExecutor, diff --git a/packages/server/src/routes/lsp.ts b/packages/server/src/routes/lsp.ts index 0b0179c..5c4a58d 100644 --- a/packages/server/src/routes/lsp.ts +++ b/packages/server/src/routes/lsp.ts @@ -6,10 +6,7 @@ import { Hono } from 'hono'; import { getConfig } from './config.js'; -import type { - FileDiagnostic, - ServerStatus, -} from '@ai-assistant/core'; +import type { FileDiagnostic } from '@ai-assistant/core'; import { initLSP, listServers, diff --git a/packages/server/src/routes/mcp.ts b/packages/server/src/routes/mcp.ts index 0c83620..b45be54 100644 --- a/packages/server/src/routes/mcp.ts +++ b/packages/server/src/routes/mcp.ts @@ -6,12 +6,7 @@ import { Hono } from 'hono'; import { getConfig } from './config.js'; -import type { - MCPConfig, - MCPServerConfig, - MCPServerStatus, - MCPTool, -} from '@ai-assistant/core'; +import type { MCPConfig } from '@ai-assistant/core'; import { getMCPManager, loadMCPConfig, diff --git a/packages/server/src/routes/services.ts b/packages/server/src/routes/services.ts index 10cae94..6e407e2 100644 --- a/packages/server/src/routes/services.ts +++ b/packages/server/src/routes/services.ts @@ -5,7 +5,7 @@ */ import { Hono } from 'hono'; -import type { ServiceConfig, ServiceType } from '@ai-assistant/core'; +import type { ServiceType } from '@ai-assistant/core'; import { loadProvidersConfig, getServiceConfig, diff --git a/packages/server/src/routes/sessions.ts b/packages/server/src/routes/sessions.ts index e526221..044a134 100644 --- a/packages/server/src/routes/sessions.ts +++ b/packages/server/src/routes/sessions.ts @@ -11,7 +11,7 @@ import { type Message, type MessagePart, } from '../types.js'; -import type { MessageInfo, Part, ApiPart } from '@ai-assistant/core'; +// MessageInfo, Part, ApiPart 从 Core 导入但仅用于类型推导 import { MessageStorage, PartStorage, partsToApiFormat } from '@ai-assistant/core'; export const sessionsRouter = new Hono(); diff --git a/packages/server/src/types.ts b/packages/server/src/types.ts index c5d7052..84467b6 100644 --- a/packages/server/src/types.ts +++ b/packages/server/src/types.ts @@ -365,11 +365,6 @@ export interface Message { parts: MessagePart[]; /** 所有文本拼接(兼容字段) */ content?: string; - metadata?: { - model?: string; - stepCount?: number; - totalTokens?: number; - }; } /** @deprecated 使用 Message 代替 */ diff --git a/packages/ui/src/api/types.ts b/packages/ui/src/api/types.ts index e59730f..79ee99a 100644 --- a/packages/ui/src/api/types.ts +++ b/packages/ui/src/api/types.ts @@ -175,19 +175,14 @@ export interface Message { parts: MessagePart[]; /** 所有文本拼接(兼容字段) */ content?: string; - /** 是否包含推理过程 */ - hasReasoning?: boolean; - /** 推理内容 */ - reasoning?: string; /** 元数据 */ metadata?: { - model?: string; - stepCount?: number; - totalTokens?: number; /** 输入 Token 数 */ inputTokens?: number; /** 输出 Token 数 */ outputTokens?: number; + /** 总 Token 数 */ + totalTokens?: number; /** 生成此消息的 Agent 名称 */ agentName?: string; }; @@ -842,8 +837,6 @@ export interface ProviderDetail { builtin: boolean; /** API 基础 URL */ baseUrl?: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 可用模型列表 */ models: ModelInfo[]; /** 是否允许自定义模型 */ @@ -867,8 +860,6 @@ export interface CustomProviderDefinition { description?: string; /** API 基础 URL(必填) */ baseUrl: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 预设模型列表 */ models?: ModelInfo[]; /** 是否允许自定义模型 */ @@ -881,8 +872,6 @@ export interface ProviderConfig { id?: string; /** API Key */ apiKey?: string; - /** API Key 环境变量名 */ - apiKeyEnvVar?: string; /** 自定义 API 基础 URL */ baseUrl?: string; /** 是否启用 */ diff --git a/packages/ui/src/components/ProviderEditor.tsx b/packages/ui/src/components/ProviderEditor.tsx index b7fd293..72e258b 100644 --- a/packages/ui/src/components/ProviderEditor.tsx +++ b/packages/ui/src/components/ProviderEditor.tsx @@ -54,7 +54,6 @@ export function ProviderEditor({ // Form state const [apiKey, setApiKey] = useState(''); - const [apiKeyEnvVar, setApiKeyEnvVar] = useState(''); const [baseUrl, setBaseUrl] = useState(''); const [enabled, setEnabled] = useState(true); @@ -84,7 +83,6 @@ export function ProviderEditor({ const config = result.data.config; // API key is not returned for security, but we show if it's configured via hasApiKey setApiKey(''); - setApiKeyEnvVar(result.data.apiKeyEnvVar || ''); setBaseUrl(config.baseUrl || result.data.baseUrl || ''); setEnabled(config.enabled !== false); } else { @@ -114,9 +112,6 @@ export function ProviderEditor({ if (apiKey.trim()) { config.apiKey = apiKey; } - if (apiKeyEnvVar.trim() && apiKeyEnvVar !== provider?.apiKeyEnvVar) { - config.apiKeyEnvVar = apiKeyEnvVar; - } if (baseUrl.trim() && baseUrl !== provider?.baseUrl) { config.baseUrl = baseUrl; } @@ -336,20 +331,6 @@ export function ProviderEditor({ )} - {/* API Key Env Var */} -
- - setApiKeyEnvVar(e.target.value)} - placeholder={provider?.apiKeyEnvVar || 'PROVIDER_API_KEY'} - /> -

- If no API key is set, this env var will be used -

-
{/* Base URL Section */} diff --git a/packages/ui/src/components/ProvidersPanel.tsx b/packages/ui/src/components/ProvidersPanel.tsx index ef924f9..9dac059 100644 --- a/packages/ui/src/components/ProvidersPanel.tsx +++ b/packages/ui/src/components/ProvidersPanel.tsx @@ -406,14 +406,6 @@ export function ProvidersPanel({ onClose, responsive = false }: ProvidersPanelPr )} - {/* API Key Env Var */} - {detail.apiKeyEnvVar && ( -
- API Key Env:{' '} - {detail.apiKeyEnvVar} -
- )} - {/* Models */}
@@ -688,14 +680,6 @@ export function ProvidersPanel({ onClose, responsive = false }: ProvidersPanelPr placeholder="http://localhost:11434/v1" />
-
- - setNewProvider((p) => ({ ...p, apiKeyEnvVar: e.target.value }))} - placeholder="OLLAMA_API_KEY" - /> -