import type * as vscode from 'vscode';
import { ICopilotTokenManager } from './_internal/platform/authentication/common/copilotTokenManager';
import { ObservableWorkspace } from './_internal/platform/inlineEdits/common/observableWorkspace';
import { IFetcher } from './_internal/platform/networking/common/networking';
import { CancellationToken } from './_internal/util/vs/base/common/cancellation';
/**
 * Log levels (taken from vscode.d.ts)
 */
export declare enum LogLevel {
    /**
     * No messages are logged with this level.
     */
    Off = 0,
    /**
     * All messages are logged with this level.
     */
    Trace = 1,
    /**
     * Messages with debug and higher log level are logged with this level.
     */
    Debug = 2,
    /**
     * Messages with info and higher log level are logged with this level.
     */
    Info = 3,
    /**
     * Messages with warning and higher log level are logged with this level.
     */
    Warning = 4,
    /**
     * Only error messages are logged with this level.
     */
    Error = 5
}
export interface ILogTarget {
    logIt(level: LogLevel, metadataStr: string, ...extra: any[]): void;
    show?(preserveFocus?: boolean): void;
}
export interface ITelemetrySender {
    sendTelemetryEvent(eventName: string, properties?: Record<string, string | undefined>, measurements?: Record<string, number | undefined>): void;
}
export interface INESProviderOptions {
    readonly workspace: ObservableWorkspace;
    readonly fetcher: IFetcher;
    readonly copilotTokenManager: ICopilotTokenManager;
    readonly telemetrySender: ITelemetrySender;
    readonly logTarget?: ILogTarget;
}
export interface INESResult {
    readonly result?: {
        readonly newText: string;
        readonly range: {
            readonly start: number;
            readonly endExclusive: number;
        };
    };
}
export interface INESProvider<T extends INESResult = INESResult> {
    getId(): string;
    getNextEdit(documentUri: vscode.Uri, cancellationToken: CancellationToken): Promise<T>;
    handleShown(suggestion: T): void;
    handleAcceptance(suggestion: T): void;
    handleRejection(suggestion: T): void;
    handleIgnored(suggestion: T, supersededByRequestUuid: T | undefined): void;
    dispose(): void;
}
export declare function createNESProvider(options: INESProviderOptions): INESProvider<INESResult>;
//# sourceMappingURL=main.d.ts.map