/**
 * The interactive Ink app — a real REPL over the new runtime.
 *
 * This is the live terminal surface: it composes the copied react-ink components
 * (`MessageList`, `TaskPanel`, `StatusLine`, `Footer`) and drives them from the
 * new runtime's {@link Agent}. The agent owns the conversation; this component is
 * a *view* over it: on every {@link RunEvent} it re-reads `agent.snapshot()`,
 * projects it through the ui-bridge adapter (`toAgentMessages` / `liveUsage`),
 * and folds the result into React state so the screen live-updates as text
 * streams and tools run.
 *
 * Input is a minimal `useInput`-driven controlled buffer (the task allows this
 * over reusing the heavier TUI editor primitives): printable keys extend the
 * draft, Backspace trims it, Enter submits it to the agent, and Ctrl-C / Esc tear
 * the session down. While a run is active the prompt is locked and a "working"
 * indicator shows; pressing Esc mid-run aborts the run rather than exiting.
 *
 * Nothing here mutates the copied react-ink files — it only consumes their public
 * props (verified against their sources): `MessageList` takes `AgentMessage[]` +
 * an `InkThemeAdapter`; `Footer`/`StatusLine`/`TaskPanel` take a `SessionSnapshot`
 * built here from the adapter's `liveUsage` aggregates.
 */
import type { Agent } from "../runtime";
/** Options the host passes when mounting the interactive app. */
export interface InteractiveAppOptions {
    /** The model id this run is bound to (rendered in the Footer). */
    readonly model: string;
    /** The working directory shown in the Footer's cwd line. */
    readonly cwd: string;
    /** Called when the user asks to leave (Ctrl-C / Esc at the prompt, /exit). */
    readonly onExit: () => void;
}
interface InteractiveAppProps extends InteractiveAppOptions {
    /** The live runtime agent this view renders and drives. */
    readonly agent: Agent;
}
export declare function InteractiveApp({ agent, cwd, model, onExit }: InteractiveAppProps): JSX.Element;
export {};
