/ lib / provider.ts
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  }