/**
 * Manifest registry — indexes extension manifests without loading runtime code.
 */
import type { DiscoveredExtension } from './types/loader.js';
import type { ExtensionManifest } from './types/manifest.js';
export interface ManifestRegistryEntry {
    id: string;
    manifest: ExtensionManifest;
    source: 'workspace' | 'global' | 'bundled' | 'config';
    path: string;
}
export declare class ManifestRegistry {
    private entries;
    private providerIndex;
    private speechProviderIndex;
    private mediaUnderstandingProviderIndex;
    private channelIndex;
    private modelPrefixIndex;
    private envVarIndex;
    static fromDiscovered(discovered: DiscoveredExtension[]): ManifestRegistry;
    addEntry(entry: ManifestRegistryEntry): void;
    private buildIndexesForEntry;
    getAllEntries(): ManifestRegistryEntry[];
    getEntry(id: string): ManifestRegistryEntry | undefined;
    findByProvider(providerId: string): ManifestRegistryEntry | undefined;
    findBySpeechProvider(providerId: string): ManifestRegistryEntry | undefined;
    findByMediaUnderstandingProvider(providerId: string): ManifestRegistryEntry | undefined;
    findByChannel(channelId: string): ManifestRegistryEntry | undefined;
    findByModelId(modelId: string): ManifestRegistryEntry | undefined;
    findByEnvVar(envVarName: string): ManifestRegistryEntry | undefined;
    detectAvailableByEnv(env: NodeJS.ProcessEnv): ManifestRegistryEntry[];
    listProviderExtensions(): ManifestRegistryEntry[];
    listChannelExtensions(): ManifestRegistryEntry[];
    listEnabledByDefault(): ManifestRegistryEntry[];
    private matchesModelPatterns;
}
