/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { Disposable } from "../../../base/common/lifecycle.mjs";
import { IProcessEnvironment, OperatingSystem } from "../../../base/common/platform.mjs";
import { IConfigurationService } from "../../configuration/common/configuration.mjs";
import { INativeEnvironmentService } from "../../environment/common/environment.mjs";
import { ILogService } from "../../log/common/log.mjs";
import { IProcessDataEvent, IPtyService, IReconnectConstants, IRequestResolveVariablesEvent, IShellLaunchConfig, ITerminalLaunchError, ITerminalProfile, ITerminalsLayoutInfo, TerminalIcon, IProcessProperty, TitleEventSource, ProcessPropertyType, IProcessPropertyMap, ISerializedTerminalState, ITerminalProcessOptions } from "../common/terminal.mjs";
import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from "../common/terminalProcess.mjs";
import { IPtyHostProcessReplayEvent } from "../common/capabilities/capabilities.mjs";
/**
 * This service implements IPtyService by launching a pty host process, forwarding messages to and
 * from the pty host process and manages the connection.
 */
export declare class PtyHostService extends Disposable implements IPtyService {
    private readonly _reconnectConstants;
    private readonly _configurationService;
    private readonly _environmentService;
    private readonly _logService;
    readonly _serviceBrand: undefined;
    private _client;
    private _proxy;
    private readonly _shellEnv;
    private readonly _resolveVariablesRequestStore;
    private _restartCount;
    private _isResponsive;
    private _isDisposed;
    private _heartbeatFirstTimeout?;
    private _heartbeatSecondTimeout?;
    private readonly _onPtyHostExit;
    readonly onPtyHostExit: import("../../../base/common/event.mjs").Event<number>;
    private readonly _onPtyHostStart;
    readonly onPtyHostStart: import("../../../base/common/event.mjs").Event<void>;
    private readonly _onPtyHostUnresponsive;
    readonly onPtyHostUnresponsive: import("../../../base/common/event.mjs").Event<void>;
    private readonly _onPtyHostResponsive;
    readonly onPtyHostResponsive: import("../../../base/common/event.mjs").Event<void>;
    private readonly _onPtyHostRequestResolveVariables;
    readonly onPtyHostRequestResolveVariables: import("../../../base/common/event.mjs").Event<IRequestResolveVariablesEvent>;
    private readonly _onProcessData;
    readonly onProcessData: import("../../../base/common/event.mjs").Event<{
        id: number;
        event: IProcessDataEvent | string;
    }>;
    private readonly _onProcessReady;
    readonly onProcessReady: import("../../../base/common/event.mjs").Event<{
        id: number;
        event: {
            pid: number;
            cwd: string;
        };
    }>;
    private readonly _onProcessReplay;
    readonly onProcessReplay: import("../../../base/common/event.mjs").Event<{
        id: number;
        event: IPtyHostProcessReplayEvent;
    }>;
    private readonly _onProcessOrphanQuestion;
    readonly onProcessOrphanQuestion: import("../../../base/common/event.mjs").Event<{
        id: number;
    }>;
    private readonly _onDidRequestDetach;
    readonly onDidRequestDetach: import("../../../base/common/event.mjs").Event<{
        requestId: number;
        workspaceId: string;
        instanceId: number;
    }>;
    private readonly _onDidChangeProperty;
    readonly onDidChangeProperty: import("../../../base/common/event.mjs").Event<{
        id: number;
        property: IProcessProperty<any>;
    }>;
    private readonly _onProcessExit;
    readonly onProcessExit: import("../../../base/common/event.mjs").Event<{
        id: number;
        event: number | undefined;
    }>;
    constructor(_reconnectConstants: IReconnectConstants, _configurationService: IConfigurationService, _environmentService: INativeEnvironmentService, _logService: ILogService);
    initialize(): void;
    private get _ignoreProcessNames();
    private _refreshIgnoreProcessNames;
    private _resolveShellEnv;
    private _startPtyHost;
    dispose(): void;
    createProcess(shellLaunchConfig: IShellLaunchConfig, cwd: string, cols: number, rows: number, unicodeVersion: '6' | '11', env: IProcessEnvironment, executableEnv: IProcessEnvironment, options: ITerminalProcessOptions, shouldPersist: boolean, workspaceId: string, workspaceName: string): Promise<number>;
    updateTitle(id: number, title: string, titleSource: TitleEventSource): Promise<void>;
    updateIcon(id: number, userInitiated: boolean, icon: TerminalIcon, color?: string): Promise<void>;
    attachToProcess(id: number): Promise<void>;
    detachFromProcess(id: number, forcePersist?: boolean): Promise<void>;
    listProcesses(): Promise<IProcessDetails[]>;
    reduceConnectionGraceTime(): Promise<void>;
    start(id: number): Promise<ITerminalLaunchError | undefined>;
    shutdown(id: number, immediate: boolean): Promise<void>;
    input(id: number, data: string): Promise<void>;
    processBinary(id: number, data: string): Promise<void>;
    resize(id: number, cols: number, rows: number): Promise<void>;
    acknowledgeDataEvent(id: number, charCount: number): Promise<void>;
    setUnicodeVersion(id: number, version: '6' | '11'): Promise<void>;
    getInitialCwd(id: number): Promise<string>;
    getCwd(id: number): Promise<string>;
    getLatency(id: number): Promise<number>;
    orphanQuestionReply(id: number): Promise<void>;
    installAutoReply(match: string, reply: string): Promise<void>;
    uninstallAllAutoReplies(): Promise<void>;
    uninstallAutoReply(match: string): Promise<void>;
    getDefaultSystemShell(osOverride?: OperatingSystem): Promise<string>;
    getProfiles(workspaceId: string, profiles: unknown, defaultProfile: unknown, includeDetectedProfiles?: boolean): Promise<ITerminalProfile[]>;
    getEnvironment(): Promise<IProcessEnvironment>;
    getWslPath(original: string, direction: 'unix-to-win' | 'win-to-unix'): Promise<string>;
    getRevivedPtyNewId(id: number): Promise<number | undefined>;
    setTerminalLayoutInfo(args: ISetTerminalLayoutInfoArgs): Promise<void>;
    getTerminalLayoutInfo(args: IGetTerminalLayoutInfoArgs): Promise<ITerminalsLayoutInfo | undefined>;
    requestDetachInstance(workspaceId: string, instanceId: number): Promise<IProcessDetails | undefined>;
    acceptDetachInstanceReply(requestId: number, persistentProcessId: number): Promise<void>;
    freePortKillProcess(port: string): Promise<{
        port: string;
        processId: string;
    }>;
    serializeTerminalState(ids: number[]): Promise<string>;
    reviveTerminalProcesses(state: ISerializedTerminalState[], dateTimeFormatLocate: string): Promise<void>;
    refreshProperty<T extends ProcessPropertyType>(id: number, property: T): Promise<IProcessPropertyMap[T]>;
    updateProperty<T extends ProcessPropertyType>(id: number, property: T, value: IProcessPropertyMap[T]): Promise<void>;
    restartPtyHost(): Promise<void>;
    private _disposePtyHost;
    private _handleHeartbeat;
    private _handleHeartbeatFirstTimeout;
    private _handleHeartbeatSecondTimeout;
    private _handleUnresponsiveCreateProcess;
    private _clearHeartbeatTimeouts;
    private _resolveVariables;
    acceptPtyHostResolvedVariables(requestId: number, resolved: string[]): Promise<void>;
}
