/** * TerminalService - Terminal management layer above PTYSessionManager * * Manages HeadlessTerminal and VirtualTerminal instances for PTY sessions. * Handles dimension synchronization with active/passive modes. * * NOTE: Unlike the original, this does NOT depend on @xterm/headless or Electron. * Headless terminal support requires the consumer to provide an xterm factory. * The store sync interface is abstracted - no Electron BrowserWindow references. */ import { EventEmitter } from 'events'; import type { TerminalType, TerminalMode, CreateTerminalOptions, TerminalInfo } from '#types'; import type { ITerminalStoreSync } from './terminal-store-sync.js'; export type { TerminalType, TerminalMode, CreateTerminalOptions, TerminalInfo }; /** * Minimal session info required by TerminalService */ export interface PTYSessionInfo { readonly id: string; readonly cols: number; readonly rows: number; } /** * Common interface for PTY session providers. * PTYSessionManager implements this interface naturally. */ export interface IPTYSessionSource extends EventEmitter { getSession(sessionId: string): PTYSessionInfo | null; resize(sessionId: string, cols: number, rows: number): boolean; getOutputBuffer(sessionId: string, maxBytes?: number): Buffer | null; } export interface TerminalDimensions { cols: number; rows: number; } export interface TerminalService extends EventEmitter { setStoreSync(storeSync: ITerminalStoreSync): void; setActive(terminalId: string): void; applyModeFromStore(terminalId: string, mode: TerminalMode): void; createVirtualTerminal(sessionId: string, options: CreateTerminalOptions, canonicalSessionId?: string): string; createHeadlessTerminal(sessionId: string, options: CreateTerminalOptions, canonicalSessionId?: string): string; getTerminal(terminalId: string): TerminalInfo | null; getSessionTerminals(sessionId: string): TerminalInfo[]; getAllTerminals(): TerminalInfo[]; getTerminalInfo(terminalId: string): TerminalInfo | null; hasActiveTerminal(sessionId: string): boolean; getActiveTerminal(sessionId: string): TerminalInfo | null; resize(terminalId: string, cols: number, rows: number): boolean; getDimensions(terminalId: string): TerminalDimensions | null; getSessionDimensions(sessionId: string): TerminalDimensions | null; destroyTerminal(terminalId: string): void; destroySessionTerminals(sessionId: string): void; shutdown(): void; } export declare class TerminalServiceImpl extends EventEmitter implements TerminalService { private sessionSource; private terminals; private sessionTerminals; private outputHandlers; private ptyExitHandler; private ptySessionLostHandler; private ptySessionResizedHandler; private storeSync; constructor(sessionSource: IPTYSessionSource); setStoreSync(storeSync: ITerminalStoreSync): void; setActive(terminalId: string): void; applyModeFromStore(terminalId: string, mode: TerminalMode): void; createVirtualTerminal(sessionId: string, options: CreateTerminalOptions, canonicalSessionId?: string): string; createHeadlessTerminal(sessionId: string, options: CreateTerminalOptions, canonicalSessionId?: string): string; getTerminal(terminalId: string): TerminalInfo | null; getSessionTerminals(sessionId: string): TerminalInfo[]; getAllTerminals(): TerminalInfo[]; getTerminalInfo(terminalId: string): TerminalInfo | null; hasActiveTerminal(sessionId: string): boolean; getActiveTerminal(sessionId: string): TerminalInfo | null; resize(terminalId: string, cols: number, rows: number): boolean; getDimensions(terminalId: string): TerminalDimensions | null; getSessionDimensions(sessionId: string): TerminalDimensions | null; destroyTerminal(terminalId: string): void; destroySessionTerminals(sessionId: string): void; shutdown(): void; private validateSession; private validateActiveMode; private addToSession; private toTerminalInfo; private syncPassiveTerminals; private applySessionResize; private ensureOutputRouting; private replayOutputBufferToTerminal; private removeOutputRouting; private routeOutputToTerminals; } export declare function createTerminalService(sessionSource: IPTYSessionSource): TerminalService; //# sourceMappingURL=terminal-service.d.ts.map