UNPKG

cursorifier

Version:

Transform GitHub repositories into cursor rules instructions using multiple LLM providers (Anthropic, OpenAI, Ollama, etc.)

106 lines 3.18 kB
import pc from 'picocolors'; import { AnthropicProvider } from './anthropic-provider.js'; import { OpenAIProvider } from './openai-provider.js'; import { LocalProvider } from './local-provider.js'; import { BedrockProvider } from './bedrock-provider.js'; /** * Registry for managing LLM providers */ export class LLMProviderRegistry { providers = new Map(); constructor() { this.registerDefaultProviders(); } /** * Register a new provider */ register(provider) { this.providers.set(provider.name, provider); } /** * Get a provider by type */ getProvider(type) { const provider = this.providers.get(type); if (!provider) { throw new Error(pc.red(`Provider '${type}' not found. Available providers: ${this.listProviderNames().join(', ')}`)); } return provider; } /** * Get a provider by name */ getProviderByName(name) { return this.providers.get(name); } /** * List all registered providers */ listProviders() { return Array.from(this.providers.values()); } /** * List provider names */ listProviderNames() { return Array.from(this.providers.keys()); } /** * Get provider information for display */ getProviderInfo() { return this.listProviders().map(provider => ({ name: provider.name, displayName: provider.displayName, requiresApiKey: provider.requiresApiKey, defaultModel: provider.defaultModel, availableModels: provider.getAvailableModels() })); } /** * Register default providers */ registerDefaultProviders() { this.register(new AnthropicProvider()); this.register(new OpenAIProvider()); this.register(new LocalProvider()); this.register(new BedrockProvider()); } /** * Validate provider configuration */ validateProviderConfig(providerType, config) { const provider = this.getProvider(providerType); provider.validateConfig(config); } /** * Get environment variable name for API key based on provider */ getApiKeyEnvVar(providerType) { switch (providerType) { case 'anthropic': return 'ANTHROPIC_API_KEY'; case 'openai': return 'OPENAI_API_KEY'; case 'local': return 'LOCAL_API_KEY'; // Optional for local providers default: throw new Error(`Unknown provider type: ${providerType}`); } } /** * Get default configuration for a provider */ getDefaultConfig(providerType) { const provider = this.getProvider(providerType); const apiKeyEnvVar = this.getApiKeyEnvVar(providerType); return { model: provider.defaultModel, apiKey: process.env[apiKeyEnvVar], maxTokens: 8000, temperature: 0.7, ...(providerType === 'local' && { baseURL: 'http://localhost:11434/v1' }) }; } } //# sourceMappingURL=provider-registry.js.map