export declare const RUNNER_CONTROL_PREFIX = "\u001B]777;botmux:"; export declare const RUNNER_CONTROL_END = "\u0007"; export declare const MAX_RUNNER_CONTROL_BYTES: number; /** Runner display text is model/user/tool controlled and shares a PTY byte * stream with botmux OSC control frames. Escaping every ESC byte makes the * separation structural and naturally safe across arbitrary delta chunks. */ export declare function escapeRunnerDisplay(value: unknown): string; type WriteChunk = (chunk: string) => unknown; /** The only producer allowed to write a raw botmux OSC prefix. */ export declare class RunnerControlWriter { private readonly stdout; private readonly stderr; constructor(stdout?: WriteChunk, stderr?: WriteChunk); display(value: unknown): void; line(value?: unknown): void; error(value: unknown): void; marker(kind: string, payload: unknown): void; } /** Stateful decoder for control frames that may be split across PTY chunks. * Oversized/unterminated candidates are rendered inert instead of buffering * without bound or invoking a partial control message. */ export declare class RunnerControlDecoder { private readonly maxControlBytes; private pending; constructor(maxControlBytes?: number); push(data: string, enabled: boolean, onMarker: (body: string) => void): string; reset(): void; /** Test/diagnostic visibility only; never expose pending control bytes. */ pendingBytes(): number; } export {}; //# sourceMappingURL=runner-control-channel.d.ts.map