refactor: 清理未使用的类型定义和接口字段
- 移除 Provider 相关的 apiKeyEnvVar 字段(未实现的功能) - 清理 Server routes 中未使用的 Core 类型导入 - 清理 UI Message 接口中未使用的 metadata 字段
This commit is contained in:
@@ -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',
|
||||
|
||||
@@ -10,7 +10,6 @@ export const deepseekProvider: ProviderInfo = {
|
||||
name: 'DeepSeek',
|
||||
description: 'DeepSeek AI models',
|
||||
builtin: true,
|
||||
apiKeyEnvVar: 'DEEPSEEK_API_KEY',
|
||||
models: [
|
||||
{
|
||||
id: 'deepseek-chat',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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?: {
|
||||
|
||||
@@ -9,7 +9,6 @@ import { getConfig } from './config.js';
|
||||
import type {
|
||||
AgentMode,
|
||||
AgentInfo,
|
||||
AgentConfigFile,
|
||||
AgentModelConfig,
|
||||
AgentPermission,
|
||||
} from '@ai-assistant/core';
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -365,11 +365,6 @@ export interface Message {
|
||||
parts: MessagePart[];
|
||||
/** 所有文本拼接(兼容字段) */
|
||||
content?: string;
|
||||
metadata?: {
|
||||
model?: string;
|
||||
stepCount?: number;
|
||||
totalTokens?: number;
|
||||
};
|
||||
}
|
||||
|
||||
/** @deprecated 使用 Message 代替 */
|
||||
|
||||
@@ -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;
|
||||
/** 是否启用 */
|
||||
|
||||
@@ -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({
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* API Key Env Var */}
|
||||
<div>
|
||||
<label className="block text-xs text-fg-muted mb-1">
|
||||
Environment Variable (alternative)
|
||||
</label>
|
||||
<Input
|
||||
value={apiKeyEnvVar}
|
||||
onChange={(e) => setApiKeyEnvVar(e.target.value)}
|
||||
placeholder={provider?.apiKeyEnvVar || 'PROVIDER_API_KEY'}
|
||||
/>
|
||||
<p className="text-xs text-fg-subtle mt-1">
|
||||
If no API key is set, this env var will be used
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Base URL Section */}
|
||||
|
||||
@@ -406,14 +406,6 @@ export function ProvidersPanel({ onClose, responsive = false }: ProvidersPanelPr
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* API Key Env Var */}
|
||||
{detail.apiKeyEnvVar && (
|
||||
<div className="text-xs">
|
||||
<span className="text-fg-muted">API Key Env:</span>{' '}
|
||||
<code className="text-fg-secondary bg-surface-subtle px-1 rounded">{detail.apiKeyEnvVar}</code>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Models */}
|
||||
<div className="space-y-2">
|
||||
<div className="flex items-center justify-between">
|
||||
@@ -688,14 +680,6 @@ export function ProvidersPanel({ onClose, responsive = false }: ProvidersPanelPr
|
||||
placeholder="http://localhost:11434/v1"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="text-xs text-fg-muted">API Key Env Var (optional)</label>
|
||||
<Input
|
||||
value={newProvider.apiKeyEnvVar || ''}
|
||||
onChange={(e) => setNewProvider((p) => ({ ...p, apiKeyEnvVar: e.target.value }))}
|
||||
placeholder="OLLAMA_API_KEY"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex justify-end gap-2 pt-2">
|
||||
<Button variant="ghost" onClick={() => setShowAddProvider(false)}>
|
||||
|
||||
Reference in New Issue
Block a user