/**
 * MediaUnderstandingProviderRegistry — central lookup for STT/image/video
 * provider plugins.
 *
 * Mirrors the SpeechProviderRegistry pattern at src/voice/tts/speech-registry.ts
 * intentionally — same registration semantics, same alias handling, same
 * conflict-warn-and-overwrite policy.
 *
 * DECISION: The two registries are kept separate (rather than a single
 * "media provider" registry) because:
 *   1. SpeechProviderPlugin and MediaUnderstandingProvider have different
 *      method shapes (synthesize vs transcribeAudio + describeImage).
 *   2. Many vendors implement only one side (Edge TTS has no STT; Whisper has
 *      no TTS), so a unified registry would require a sparse capability matrix
 *      anyway.
 *   3. Discovery UIs naturally split by direction (TTS list vs STT list).
 *
 * When a vendor implements BOTH (e.g. OpenAI), the registration code creates
 * two separate plugin objects sharing config — this stays explicit and avoids
 * "is this method on this object?" guessing in callers.
 */
import type { MediaCapability, MediaUnderstandingProvider } from './types.js';
export declare function registerMediaUnderstandingProvider(provider: MediaUnderstandingProvider): () => void;
export declare function getMediaUnderstandingProvider(id: string): MediaUnderstandingProvider | undefined;
export declare function listMediaUnderstandingProviders(): MediaUnderstandingProvider[];
/**
 * List providers that DECLARE the requested capability via `capabilities[]`
 * AND have an actual method implementation. The runner uses this to build
 * the per-capability fallback chain.
 */
export declare function listProvidersForCapability(capability: MediaCapability): MediaUnderstandingProvider[];
/** Test-only: clear the registry. Not exported from the package barrel. */
export declare function _clearMediaUnderstandingRegistryForTests(): void;
