import type { ActiveTerminalProcess, TerminalProcessSnapshot } from "./terminal-agent-adapter.js"; import { type TerminalControlCapability, type TerminalControlRef, type TerminalEndpointRef, type TerminalProviderCapability } from "./terminal-control-ref.js"; export interface TerminalPane { kind: "tmux"; target: string; socketPath?: string; serverSocketPath?: string; paneId?: string; session: string; window: number; pane: number; panePid: number; currentCommand?: string; currentPath?: string; columns?: number; rows?: number; } export interface TerminalViewport { columns: number; rows: number; } export type TerminalDiscoveryDiagnosticLog = (event: string, fields: Readonly>) => void; export interface TerminalControlProvider { readonly kind: string; readonly supportedCapabilities: readonly TerminalControlCapability[]; readonly providerCapabilities: readonly TerminalProviderCapability[]; diagnostics(): Promise>; listTerminals(): Promise; endpoint(terminalControl: TerminalControlRef): TerminalEndpointRef; toControlRef(terminal: TerminalEndpointRef, capabilities?: readonly TerminalControlCapability[]): TerminalControlRef; resolve(terminal: TerminalEndpointRef): Promise; inspectViewport?(terminal: TerminalEndpointRef): Promise; containsProcess(terminal: TerminalEndpointRef, process: Pick, processes: readonly Pick[]): boolean; capture(terminal: TerminalEndpointRef, options?: { scrollbackLines?: number; preserveEscapes?: boolean; }): Promise; sendText(terminal: TerminalEndpointRef, text: string): Promise; sendKeys(terminal: TerminalEndpointRef, keys: readonly string[]): Promise; } export declare class TerminalControlProviderRegistry { private readonly diagnosticLog?; private readonly providers; private facade?; constructor(providers?: readonly TerminalControlProvider[], diagnosticLog?: TerminalDiscoveryDiagnosticLog | undefined); register(provider: TerminalControlProvider): this; get(kind: string): TerminalControlProvider | undefined; require(kind: string): TerminalControlProvider; list(): TerminalControlProvider[]; /** * Exposes all registered providers through the same provider boundary used * by the terminal bridge. Discovery is aggregated, while every operation on * an existing endpoint is dispatched only to that endpoint's provider. * * The facade advertises only capabilities shared by every registered * provider. This keeps generic preflight checks conservative; the selected * provider still performs its own endpoint-specific checks when dispatched. */ asProvider(): TerminalControlProvider; } export declare function createTerminalControlProviderRegistry(providers?: readonly TerminalControlProvider[], diagnosticLog?: TerminalDiscoveryDiagnosticLog): TerminalControlProviderRegistry; /** * Stable-resource resolution found no controllable instance of the requested * terminal endpoint. Ambiguity, identity drift, malformed provider data, and * transport integrity failures must use another error and remain fail-closed. */ export declare class TerminalControlUnavailableError extends Error { constructor(message: string, options?: { cause?: unknown; }); } /** * A provider-level failure proving that no terminal input operation succeeded. * Unknown/time-out outcomes must use an ordinary Error instead. */ export declare class TerminalControlInputNotSentError extends Error { readonly code = "AKK_TERMINAL_INPUT_NOT_SENT"; constructor(message: string); } export interface CommandResult { status: number | null; stdout: string; stderr: string; error?: Error; } export interface TmuxTerminalControlDiagnostics { commands: string[]; socketPaths: string[]; attempts: Array<{ command: string; socketPath?: string; status: number | null; stdoutBytes: number; stdoutPreview?: string; stderr?: string; error?: string; paneCount: number; }>; paneCount: number; panes: TerminalPane[]; } export declare class TmuxTerminalControlProvider implements TerminalControlProvider { readonly kind = "tmux"; readonly supportedCapabilities: readonly TerminalControlCapability[]; readonly providerCapabilities: readonly TerminalProviderCapability[]; private readonly runCommand; private readonly socketPaths; private readonly commands; constructor(options?: { runCommand?: (command: string, args: string[]) => CommandResult; socketPaths?: string[]; commands?: string[]; }); listPanes(): Promise; listTerminals(): Promise; endpoint(terminalControl: TerminalControlRef): TerminalEndpointRef; toControlRef(terminal: TerminalEndpointRef, capabilities?: readonly TerminalControlCapability[]): TerminalControlRef; resolve(terminal: TerminalEndpointRef): Promise; containsProcess(terminal: TerminalEndpointRef, process: Pick, processes: readonly Pick[]): boolean; diagnose(): Promise; diagnostics(): Promise>; capture(terminal: TerminalEndpointRef, options?: { scrollbackLines?: number; preserveEscapes?: boolean; }): Promise; inspectViewport(terminal: TerminalEndpointRef): Promise; sendKeys(terminal: TerminalEndpointRef, keys: readonly string[]): Promise; sendText(terminal: TerminalEndpointRef, text: string): Promise; } export declare class StaticTerminalControlProvider implements TerminalControlProvider { readonly kind = "tmux"; readonly supportedCapabilities: readonly TerminalControlCapability[]; readonly providerCapabilities: readonly TerminalProviderCapability[]; private readonly panes; private readonly screens; readonly sentKeys: { target: string; keys: string[]; }[]; constructor(options?: { panes?: TerminalPane[]; screens?: Record; }); listPanes(): Promise; diagnostics(): Promise>; listTerminals(): Promise; endpoint(terminalControl: TerminalControlRef): TerminalEndpointRef; toControlRef(terminal: TerminalEndpointRef, capabilities?: readonly TerminalControlCapability[]): TerminalControlRef; resolve(terminal: TerminalEndpointRef): Promise; containsProcess(terminal: TerminalEndpointRef, process: Pick, processes: readonly Pick[]): boolean; capture(terminal: TerminalEndpointRef): Promise; inspectViewport(terminal: TerminalEndpointRef): Promise; sendText(terminal: TerminalEndpointRef, text: string): Promise; sendKeys(terminal: TerminalEndpointRef, keys: readonly string[]): Promise; } export declare function parseTmuxListPanes(output: string, socketPath?: string): TerminalPane[]; export declare function enrichActiveProcessesWithTerminalControl(processes: T[], provider: TerminalControlProvider, options?: { capabilities?: readonly TerminalControlCapability[]; processTree?: readonly TerminalProcessSnapshot[]; diagnosticLog?: TerminalDiscoveryDiagnosticLog; }): Promise; export declare function terminalRefFromPane(pane: TerminalPane, capabilities?: readonly TerminalControlCapability[]): TerminalControlRef; export declare function terminalPaneContainsProcess(process: Pick, pane: TerminalPane, processes: readonly Pick[]): boolean; export declare function discoverTmuxSocketPaths(root: string): string[];