import { InputController } from '../input/controller.js'; import type { KeybindingsManager } from '@earendil-works/pi-tui'; import type { AttachSession } from './context.js'; /** What the input layer needs from the rest of the session. Everything here is * a getter or a command — never a value — so nothing can go stale. */ export interface InputWiringHooks { /** Transient footer message. */ setNotice: (message: string) => void; /** pi's agent dir from the live `welcome` state, for the auth pickers. * `undefined` before the first welcome → they fall back to the local default. */ agentDir: () => string | undefined; /** True while the reconnect supervisor has classified the node as dormant. */ isDormant: () => boolean; /** The last assistant message, for `/copy` (ChatView holds it). */ lastAssistantText: () => string | undefined; /** Ctrl+O — flip global tool-output expansion; returns the new state. */ toggleToolsExpanded: () => boolean; /** Ctrl+T — flip thinking-block visibility; returns true when now HIDDEN. */ toggleThinking: () => boolean; /** `/graph` and the graph keybinding. */ toggleGraph: () => void; /** `/node-metadata` — open the viewer-owned Inspector dossier popup. */ openNodeMetadata: () => void; /** `/quit` — detach this viewer; the engine keeps running. Must tear down * locally, since a bare `bye` would just trigger the reconnect loop. */ quit: () => void; /** `/color` — recolor the editor's name chip (`null` clears to default). */ setChipColor: (color: string | null) => void; } /** Build the viewer's InputController with every hook answered. */ export declare function createInputController(ctx: Pick, km: KeybindingsManager, hooks: InputWiringHooks): InputController;