import { type AttachBindings } from './bindings.js'; import type { AttachSession } from './context.js'; export interface KeyHooks { /** The live binding snapshot — re-resolved by `/reload`, so read per key. */ bindings: () => AttachBindings; /** How the user would spell the detach binding, for the clear-first hint. */ detachHint: () => string | undefined; /** Terminal focus in/out — the roster owns the editor's cursor styling. */ setPaneFocused: (focused: boolean) => void; /** The roster's chance at a chunk; true when it consumed it. */ rosterHandleKey: (data: string) => boolean; setNotice: (message: string) => void; detach: () => void; cycleMode: () => void; toggleGraph: () => void; cycleModelLadder: (direction: 'forward' | 'backward') => void; inspectLoadedCommand: () => void; /** The file-review chord — open the transcript-file picker + review surface. */ openFileReview: () => void; } /** Install the listener; returns the remover, which teardown MUST call. */ export declare function installGlobalKeys(ctx: Pick, hooks: KeyHooks): () => void;