provider.ts
1 import { claudeProvider } from './providers/claude'; 2 import { geminiProvider } from './providers/gemini'; 3 import type { ModelId, Provider } from './types'; 4 5 export interface GenerateOptions { 6 content: string; 7 systemPrompt: string; 8 model: ModelId; 9 thinking: boolean; 10 onChunk?: (chunk: string, isThinking: boolean) => void; 11 onToolUse?: (toolName: string) => void; 12 mcpConfigPath?: string; 13 allowedTools?: string[]; 14 signal?: AbortSignal; 15 } 16 17 export interface QuickOptions { 18 content: string; 19 systemPrompt: string; 20 model: ModelId; 21 } 22 23 export interface ModelInfo { 24 id: ModelId; 25 label: string; 26 quick?: boolean; 27 } 28 29 export interface LLMProvider { 30 name: Provider; 31 models: ModelInfo[]; 32 33 /** Streaming call -- used for review generation */ 34 generate(opts: GenerateOptions): Promise<string>; 35 36 /** Non-streaming call -- used for smart imports */ 37 quick(opts: QuickOptions): Promise<string>; 38 } 39 40 const providers: Record<Provider, LLMProvider> = { 41 claude: claudeProvider, 42 gemini: geminiProvider, 43 }; 44 45 export function getProvider(name: Provider): LLMProvider { 46 return providers[name]; 47 }