/**
 * The REPL runner — a minimal interactive loop behind the {@link InteractiveView}
 * seam.
 *
 * This is the runner behind the default interactive launch (`repl` mode): read a
 * line, submit it to the agent, stream the answer back, repeat until the user
 * leaves or input ends. It is deliberately *minimal* — a plain readline loop
 * with line-oriented console output and no cursor tricks, colours, or layout.
 *
 * The presentation lives entirely behind the {@link InteractiveView} seam. This
 * file ships one trivial implementation, {@link TextView}, that does plain text
 * writes over a readline interface. THIS IS A PLACEHOLDER: a richer terminal UI
 * is expected to implement the same `render`/`prompt`/`close` interface and be
 * injected via {@link BootContext.view}, at which point this runner drives it
 * unchanged. Keeping the loop UI-agnostic is the whole point — nothing here
 * imports a UI toolkit, and nothing here will need to change when one arrives.
 */
import { type InteractiveView, type RunEvent, type Runner } from "./contract";
/**
 * The default plain-text {@link InteractiveView}.
 *
 * A thin wrapper over `node:readline`: {@link prompt} asks for one line and
 * resolves it (rejecting with {@link EndOfInput} on EOF / Ctrl-D), and
 * {@link render} writes streamed text deltas inline and a single newline once a
 * turn settles. It owns nothing the agent needs to know about — it is the
 * stand-in the seam exists for.
 */
export declare class TextView implements InteractiveView {
    private readonly input;
    private readonly output;
    private readonly rl;
    /** Set once the underlying stream signals end-of-input. */
    private ended;
    /** True while we are mid-assistant-turn, so settle knows to break the line. */
    private midTurn;
    constructor(input: NodeJS.ReadableStream, output: NodeJS.WritableStream);
    /** Present one run event as plain text. */
    render(event: RunEvent): void;
    /**
     * Ask for one line of input, rejecting with {@link EndOfInput} once the input
     * stream has closed.
     */
    prompt(): Promise<string>;
    /** Tear down the readline interface. Safe to call more than once. */
    close(): void;
}
/**
 * The interactive runner. Accepts the `repl` mode the parser derives for an
 * attended, prompt-less launch.
 */
export declare const ReplRunner: Runner;
