37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
|
|
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<LLMProvider, IProvider> = {
|
||
|
|
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;
|
||
|
|
},
|
||
|
|
};
|