UNPKG

@sussudio/platform

Version:

Internal APIs for VS Code's service injection the base services.

174 lines (172 loc) 7.31 kB
/*--------------------------------------------------------------------------------------------- * 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 '@sussudio/base/common/lifecycle.mjs'; import { IProcessEnvironment, OperatingSystem } from '@sussudio/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('@sussudio/base/common/event.mjs').Event<number>; private readonly _onPtyHostStart; readonly onPtyHostStart: import('@sussudio/base/common/event.mjs').Event<void>; private readonly _onPtyHostUnresponsive; readonly onPtyHostUnresponsive: import('@sussudio/base/common/event.mjs').Event<void>; private readonly _onPtyHostResponsive; readonly onPtyHostResponsive: import('@sussudio/base/common/event.mjs').Event<void>; private readonly _onPtyHostRequestResolveVariables; readonly onPtyHostRequestResolveVariables: import('@sussudio/base/common/event.mjs').Event<IRequestResolveVariablesEvent>; private readonly _onProcessData; readonly onProcessData: import('@sussudio/base/common/event.mjs').Event<{ id: number; event: IProcessDataEvent | string; }>; private readonly _onProcessReady; readonly onProcessReady: import('@sussudio/base/common/event.mjs').Event<{ id: number; event: { pid: number; cwd: string; }; }>; private readonly _onProcessReplay; readonly onProcessReplay: import('@sussudio/base/common/event.mjs').Event<{ id: number; event: IPtyHostProcessReplayEvent; }>; private readonly _onProcessOrphanQuestion; readonly onProcessOrphanQuestion: import('@sussudio/base/common/event.mjs').Event<{ id: number; }>; private readonly _onDidRequestDetach; readonly onDidRequestDetach: import('@sussudio/base/common/event.mjs').Event<{ requestId: number; workspaceId: string; instanceId: number; }>; private readonly _onDidChangeProperty; readonly onDidChangeProperty: import('@sussudio/base/common/event.mjs').Event<{ id: number; property: IProcessProperty<any>; }>; private readonly _onProcessExit; readonly onProcessExit: import('@sussudio/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>; }