import { IRPCProtocol } from '@opensumi/ide-connection';
import { DisposableStore, IExtensionInfo } from '@opensumi/ide-core-common';
import { IBuiltInCommand } from '../../../common/ext.process';
import { ArgumentProcessor, CommandHandler, Handler, ICommandHandlerDescription, IExtHostCommands, IExtensionDescription } from '../../../common/vscode';
import { Disposable } from '../../../common/vscode/ext-types';
import * as modes from '../../../common/vscode/model.api';
import { CommandDto } from '../../../common/vscode/scm';
import { ExtensionHostEditorService } from './editor/editor.host';
import { ApiCommand } from './ext.host.api.command';
import type vscode from 'vscode';
export declare function createCommandsApiFactory(extHostCommands: IExtHostCommands, extHostEditors: ExtensionHostEditorService, extension: IExtensionDescription): typeof vscode.commands;
export declare class ExtHostCommands implements IExtHostCommands {
    #private;
    private buildInCommands?;
    protected readonly logger: import("@opensumi/ide-core-common").IDebugLog;
    protected readonly commands: Map<string, CommandHandler<any>>;
    protected readonly argumentProcessors: ArgumentProcessor[];
    private readonly _apiCommands;
    converter: CommandsConverter;
    constructor(rpcProtocol: IRPCProtocol, buildInCommands?: IBuiltInCommand[] | undefined);
    private registerUriArgProcessor;
    $registerCommandConverter(): void;
    $registerBuiltInCommands(): void;
    registerApiCommand(apiCommand: ApiCommand): Disposable;
    private register;
    registerCommand(global: boolean, id: string, handler: CommandHandler | Handler, thisArg?: any, description?: ICommandHandlerDescription): Disposable;
    $executeContributedCommand<T>(id: string, ...args: any[]): Promise<T>;
    private convertArguments;
    $executeCommandWithExtensionInfo<T>(id: string, extensionInfo: IExtensionInfo, ...args: any[]): Promise<T | undefined>;
    executeCommand<T>(id: string, ...args: any[]): Promise<T>;
    private executeLocalCommand;
    private processArguments;
    getCommands(filterUnderscoreCommands?: boolean): Promise<string[]>;
    registerArgumentProcessor(processor: ArgumentProcessor): void;
    private isPermittedCommand;
}
export declare class CommandsConverter {
    #private;
    private readonly _lookupApiCommand;
    private readonly _delegatingCommandId;
    private readonly _cache;
    private _cachIdPool;
    constructor(commands: ExtHostCommands, _lookupApiCommand: (id: string) => ApiCommand | undefined);
    toInternal(command: vscode.Command | undefined, disposables: DisposableStore): CommandDto | undefined;
    fromInternal(command: modes.VSCommand): vscode.Command | undefined;
    private _executeConvertedCommand;
}
//# sourceMappingURL=ext.host.command.d.ts.map