export type TerminalBackendKind = "tmux" | "herdr"; export type HerdrLayout = "attached"; export type ExecutionBackendKind = "sdk" | TerminalBackendKind; export type RequestedBackendKind = "auto" | ExecutionBackendKind; export type TerminalHandle = { backend: "tmux"; resourceId: string; } | { backend: "herdr"; resourceId: string; socketPath: string; terminalId: string; parentPaneId?: string; agentName?: string; tabId?: string; workspaceId?: string; workspaceGroup?: string; herdrLayout?: HerdrLayout; }; export type HerdrTerminalHandle = Extract; export interface TerminalLaunchInput { cwd: string; command?: string; agentArgs?: readonly string[]; initialPrompt?: string; label?: string; direction?: "right" | "down"; env?: Record; remainOnExit?: boolean; workspaceGroup?: string; herdrLayout?: HerdrLayout; signal?: AbortSignal; timeoutMs?: number; } export interface CommandRunOptions { cwd?: string; env?: NodeJS.ProcessEnv; input?: string; signal?: AbortSignal; timeoutMs?: number; } export interface CommandResult { stdout: string; stderr: string; exitCode?: number; } export interface CommandRunner { run(command: string, args: readonly string[], options?: CommandRunOptions): Promise; } export interface TerminalBackend { readonly kind: TerminalBackendKind; available(): Promise; launch(input: TerminalLaunchInput): Promise; isAlive(handle: TerminalHandle): Promise; send(handle: TerminalHandle, message: string): Promise; readTail(handle: TerminalHandle, lines: number): Promise; waitForAttention?(handle: TerminalHandle, options?: { signal?: AbortSignal; timeoutMs?: number; }): Promise<{ status: "idle" | "working" | "blocked" | "done" | "unknown"; }>; close(handle: TerminalHandle): Promise; } export declare function createDefaultCommandRunner(): CommandRunner; export declare function selectTerminalBackend(input: { requested: RequestedBackendKind; hasHerdr: boolean; hasTmux: boolean; }): ExecutionBackendKind | null; export interface TmuxTerminalBackendOptions { run?: CommandRunner["run"]; } export declare function createTmuxTerminalBackend(options?: TmuxTerminalBackendOptions): TerminalBackend; export declare function isTerminalHandle(value: unknown): value is TerminalHandle;