export interface AutocompleteItem {
    value: string;
    label: string;
    description?: string;
}
export interface SlashCommand {
    name: string;
    description?: string;
    getArgumentCompletions?(argumentPrefix: string): AutocompleteItem[] | null;
}
export interface AutocompleteProvider {
    getSuggestions(lines: string[], cursorLine: number, cursorCol: number): {
        items: AutocompleteItem[];
        prefix: string;
    } | null;
    applyCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
        lines: string[];
        cursorLine: number;
        cursorCol: number;
    };
}
type SuggestionResult = {
    items: AutocompleteItem[];
    prefix: string;
};
export declare class CombinedAutocompleteProvider implements AutocompleteProvider {
    private readonly basePath;
    private readonly fdPath;
    private readonly cache;
    private readonly commandEngine;
    private readonly attachmentEngine;
    private readonly pathEngine;
    private readonly applyStrategy;
    constructor(commands?: (SlashCommand | AutocompleteItem)[], basePath?: string, fdPath?: string | null);
    getSuggestions(lines: string[], cursorLine: number, cursorCol: number): SuggestionResult | null;
    applyCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
        lines: string[];
        cursorLine: number;
        cursorCol: number;
    };
    clearCache(): void;
    getForceFileSuggestions(lines: string[], cursorLine: number, cursorCol: number): SuggestionResult | null;
    shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean;
}
export interface AsyncAutocompleteProvider {
    getSuggestionsAsync(lines: string[], cursorLine: number, cursorCol: number): Promise<{
        items: AutocompleteItem[];
        prefix: string;
    } | null>;
}
export declare class AsyncAutocompleteChain implements AsyncAutocompleteProvider {
    private readonly providers;
    constructor(providers: AsyncAutocompleteProvider[]);
    getSuggestionsAsync(lines: string[], cursorLine: number, cursorCol: number): Promise<{
        items: AutocompleteItem[];
        prefix: string;
    } | null>;
}
export {};
