import { ClaudeProvider } from '@/modules/providers/list/claude/claude.provider.js'; import { CodexProvider } from '@/modules/providers/list/codex/codex.provider.js'; import { CursorProvider } from '@/modules/providers/list/cursor/cursor.provider.js'; import { GeminiProvider } from '@/modules/providers/list/gemini/gemini.provider.js'; import type { IProvider } from '@/shared/interfaces.js'; import type { LLMProvider } from '@/shared/types.js'; import { AppError } from '@/shared/utils.js'; const providers: Record = { claude: new ClaudeProvider(), codex: new CodexProvider(), cursor: new CursorProvider(), gemini: new GeminiProvider(), }; /** * Central registry for resolving concrete provider implementations by id. */ export const providerRegistry = { listProviders(): IProvider[] { return Object.values(providers); }, resolveProvider(provider: string): IProvider { const key = provider as LLMProvider; const resolvedProvider = providers[key]; if (!resolvedProvider) { throw new AppError(`Unsupported provider "${provider}".`, { code: 'UNSUPPORTED_PROVIDER', statusCode: 400, }); } return resolvedProvider; }, };