/** * providers.ts — Multi-LLM provider management. * Stores provider configs (API keys, base URLs) in a local JSON file. * Provides an HTTP-based LLM runner for non-Claude providers (OpenRouter, OpenAI, etc.) */ export interface ToolPermissions { allowedTools?: string[]; deniedTools?: string[]; maxIterations?: number; toolsEnabled?: boolean; } export interface LLMProvider { id: string; name: string; type: "claude" | "codex" | "openrouter" | "openai" | "ollama" | "huggingface" | "custom"; apiKey: string; baseUrl: string; defaultModel?: string; enabled: boolean; models?: string[]; createdAt: string; toolPermissions?: ToolPermissions; /** Per-model overrides — merges on top of provider-level toolPermissions */ perModelPermissions?: Record>; } export interface LLMRunConfig { provider: string; model: string; prompt: string; systemPrompt?: string; maxTokens?: number; temperature?: number; stream?: boolean; tools?: string[]; } export interface LLMResult { text: string; inputTokens: number; outputTokens: number; durationMs: number; model: string; provider: string; } export declare function loadProviders(): void; export declare function listProviders(): LLMProvider[]; export declare function getProvider(id: string): LLMProvider | undefined; export declare function getProviderFull(id: string): LLMProvider | undefined; export declare function createProvider(p: Omit): LLMProvider; export declare function updateProvider(id: string, patch: Partial): LLMProvider | null; export declare function deleteProvider(id: string): boolean; /** * Resolve a model string to a provider. * Supports formats: * "claude-sonnet-4-6" → auto-detect "claude" * "openrouter/gpt-4o" → explicit provider prefix * "gpt-4o" + provider field → use explicit provider */ export declare function resolveProvider(model: string, explicitProvider?: string): { provider: LLMProvider; model: string; } | null; export declare function runLLMHTTP(config: LLMRunConfig, onChunk?: (chunk: string) => void): Promise; /** Resolve the full denied set for a model (provider defaults + per-model overrides). * Returns tool IDs like "bash", pre-tool IDs like "pre:web_search", MCP IDs like "mcp:sports-hub". */ export declare function getModelDeniedSet(model: string): Set; export declare function testProvider(id: string): Promise<{ ok: boolean; error?: string; models?: string[]; }>; export declare function getAllModels(): Array<{ provider: string; providerName: string; model: string; }>;