import { EventEmitter } from 'node:events'; import { type VercelTerminalTimeoutOptions, type VercelTerminalTimeoutScheduler } from './terminal-timeout.js'; export type { VercelTerminalTimeoutOptions, VercelTerminalTimeoutScheduler } from './terminal-timeout.js'; export type VercelTerminalHeartbeatScheduler = VercelTerminalTimeoutScheduler; export interface VercelTerminalWebSocket extends EventEmitter { readonly readyState: number; readonly bufferedAmount?: number; readonly isPaused?: boolean; send(data: Buffer | string, callback?: (error?: Error) => void): void | boolean; ping(callback?: (error?: Error) => void): void; pause?: () => void; resume?: () => void; close(code?: number, reason?: string): void; } export interface VercelTerminalInput extends NodeJS.ReadableStream { readonly isTTY?: boolean; isRaw?: boolean; setRawMode?: (mode: boolean) => unknown; readonly readableFlowing?: boolean | null; } export interface VercelTerminalOutput extends NodeJS.WritableStream { readonly columns?: number; readonly rows?: number; } export interface VercelTerminalStreams { stdin: VercelTerminalInput; stdout: VercelTerminalOutput; stderr: NodeJS.WritableStream; } export interface VercelTerminalSize { cols: number; rows: number; } export interface VercelInteractiveSandbox { readonly cwd?: string; readonly createdAt?: Date; readonly expiresAt?: Date; readonly timeout?: number; openInteractive(options?: { signal?: AbortSignal; }): Promise<{ url: string; token: string; }>; extendTimeout?: (durationMs: number, options?: { signal?: AbortSignal; }) => Promise; } export interface VercelTerminalFailure { readonly cause: Error; readonly message: string; } export type VercelTerminalResult = { status: 'exited'; code: number; } | { status: 'detached'; reason: 'close' | 'error' | 'abort' | 'escape' | 'eof' | 'signal'; error?: VercelTerminalFailure; }; export interface VercelTerminalOptions { cwd?: string; args?: readonly string[]; env?: Readonly>; streams?: VercelTerminalStreams; /** Provider-neutral TTY fact; avoids consulting a global process stream. */ tty?: boolean; signal?: AbortSignal; signalSource?: EventEmitter; detachSignals?: readonly ('SIGTERM' | 'SIGHUP')[]; getSize?: () => VercelTerminalSize; connectionTimeoutMs?: number; connectionTimeoutScheduler?: VercelTerminalTimeoutScheduler; heartbeatIntervalMs?: number; heartbeatScheduler?: VercelTerminalHeartbeatScheduler; timeoutExtension?: VercelTerminalTimeoutOptions | false; /** Return true to suppress the adapter's direct stderr rendering. */ onError?: (failure: VercelTerminalFailure) => boolean; maxPendingInputBytes?: number; maxPendingOutputBytes?: number; backpressureTimeoutMs?: number; } export interface VercelTerminalAdapterDependencies { createWebSocket?: (url: string, options: { maxPayload: number; }) => VercelTerminalWebSocket; streams?: VercelTerminalStreams; signalSource?: EventEmitter; } export interface VercelTerminalAdapter { attach(sandbox: VercelInteractiveSandbox, options?: VercelTerminalOptions): Promise; } export declare function createVercelTerminalAdapter(dependencies?: VercelTerminalAdapterDependencies): VercelTerminalAdapter;