From 9806bef5ec914cb567920bd694f146fc7cce5082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Tue, 7 Apr 2026 11:23:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20rewrite=20provider=20types=20?= =?UTF-8?q?=E2=80=94=20simplified=20model=20mapping,=20preset-based=20stru?= =?UTF-8?q?cture?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/types/provider.ts | 70 ++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/src/server/types/provider.ts b/src/server/types/provider.ts index b7d067d3..0a94a9a7 100644 --- a/src/server/types/provider.ts +++ b/src/server/types/provider.ts @@ -1,46 +1,48 @@ /** - * Provider 类型定义 + * Provider types — preset-based provider configuration. * - * Provider 是自定义 API 供应商的配置单元,包含 Base URL、API Key 和可用模型列表。 - * 激活 Provider 时,其配置会写入 ~/.claude/settings.json 的 env 字段。 + * Providers are stored in ~/.claude/cc-haha/providers.json as a lightweight index. + * The active provider's env vars are written to ~/.claude/settings.json. */ import { z } from 'zod' -// ─── Zod Schemas ────────────────────────────────────────────────────────────── - -export const ProviderModelSchema = z.object({ - id: z.string().min(1), - name: z.string().min(1), - description: z.string().optional(), - context: z.string().optional(), +export const ModelMappingSchema = z.object({ + main: z.string(), + haiku: z.string(), + sonnet: z.string(), + opus: z.string(), }) -export const ProviderSchema = z.object({ - id: z.string().uuid(), +export const SavedProviderSchema = z.object({ + id: z.string(), + presetId: z.string(), name: z.string().min(1), - baseUrl: z.string().url(), - apiKey: z.string().min(1), - models: z.array(ProviderModelSchema).min(1), - isActive: z.boolean(), - createdAt: z.number(), - updatedAt: z.number(), + apiKey: z.string(), + baseUrl: z.string(), + models: ModelMappingSchema, notes: z.string().optional(), }) +export const ProvidersIndexSchema = z.object({ + activeId: z.string().nullable(), + providers: z.array(SavedProviderSchema), +}) + export const CreateProviderSchema = z.object({ + presetId: z.string().min(1), name: z.string().min(1), - baseUrl: z.string().url(), - apiKey: z.string().min(1), - models: z.array(ProviderModelSchema).min(1), + apiKey: z.string(), + baseUrl: z.string(), + models: ModelMappingSchema, notes: z.string().optional(), }) export const UpdateProviderSchema = z.object({ name: z.string().min(1).optional(), - baseUrl: z.string().url().optional(), - apiKey: z.string().min(1).optional(), - models: z.array(ProviderModelSchema).min(1).optional(), + apiKey: z.string().optional(), + baseUrl: z.string().optional(), + models: ModelMappingSchema.optional(), notes: z.string().optional(), }) @@ -50,25 +52,13 @@ export const TestProviderSchema = z.object({ modelId: z.string().min(1), }) -export const ActivateProviderSchema = z.object({ - modelId: z.string().min(1), -}) - -export const ProvidersConfigSchema = z.object({ - providers: z.array(ProviderSchema), - activeModel: z.string().optional(), - version: z.number(), -}) - -// ─── TypeScript Types ───────────────────────────────────────────────────────── - -export type ProviderModel = z.infer -export type Provider = z.infer +// TypeScript types +export type ModelMapping = z.infer +export type SavedProvider = z.infer +export type ProvidersIndex = z.infer export type CreateProviderInput = z.infer export type UpdateProviderInput = z.infer export type TestProviderInput = z.infer -export type ActivateProviderInput = z.infer -export type ProvidersConfig = z.infer export interface ProviderTestResult { success: boolean