import type { InputEnvelope, ProviderModule } from './contracts.js';
export type InputMediaType = 'text' | 'image' | 'audio' | 'video' | 'resource';
export type InputAttachmentStrategy = 'native' | 'native_acp' | 'resource_link' | 'text_fallback' | 'paste' | 'upload';
export interface InputMediaStrategyDescriptor {
    mediaType: InputMediaType;
    strategies: InputAttachmentStrategy[];
    native?: boolean;
    degradation?: InputAttachmentStrategy[];
}
export interface MessageInputSupport {
    text: boolean;
    multipart: boolean;
    mediaTypes: InputMediaType[];
    strategies: InputMediaStrategyDescriptor[];
}
export declare const TEXT_ONLY_MESSAGE_INPUT_SUPPORT: MessageInputSupport;
export declare function assertTextOnlyInput(provider: Pick<ProviderModule, 'name' | 'type'> | null | undefined, input: InputEnvelope): void;
export declare function getDeclaredProviderInputSupport(provider?: Pick<ProviderModule, 'capabilities'> | null): {
    multipart: boolean;
    mediaTypes: Set<InputMediaType>;
    strategies: InputMediaStrategyDescriptor[];
};
export declare function normalizeInputStrategyDescriptors(raw: unknown): InputMediaStrategyDescriptor[];
export declare function getEffectiveMessageInputSupport(provider?: Pick<ProviderModule, 'category' | 'capabilities'> | null, runtimeCapabilities?: Record<string, any> | null): MessageInputSupport;
export declare function assertProviderSupportsDeclaredInput(provider: Pick<ProviderModule, 'name' | 'type' | 'capabilities'> | null | undefined, input: InputEnvelope): void;
