import type { BindingId, BindingResolution } from '../../../core/keybindings/index.js'; import type { SessionState } from '../../../core/session-model/session-state.js'; import type { AttachSession } from '../session/context.js'; /** Shell/bash mode: 0 = off, 1 = `!` (output goes to the agent's context), * 2 = `!!` (output hidden from the agent). Drives both the editor border hue * and the leading status segment explaining what will happen. */ export type BashMode = 0 | 1 | 2; export type StatusLineSession = Pick; export interface StatusLineHooks { /** The reducer-folded broker state — role, engine, context tokens, queue. */ state: () => SessionState; /** The editor's current bash level. */ bashMode: () => BashMode; /** Per-node human-ticket counts for this canvas. */ asks: () => Record; /** The live resolved keybinding snapshot (refreshed by /reload), so shortcut * hints never go stale against a rebound key. */ bindings: () => BindingResolution; /** Whether to render the closed-inbox affordance at all. Meaningful only for * a LOCAL in-tmux attach: a remote attach's local inbox registry cannot open * the remote canvas's filesystem tickets. */ inboxAffordance: boolean; } export interface AttachStatusLine { /** Repaint the bar from current state. */ render: () => void; /** Show a transient notice in the right slot. `sticky` keeps it up until * explicitly replaced instead of auto-clearing. */ setNotice: (msg: string, opts?: { sticky?: boolean; }) => void; /** Cancel the pending auto-clear. Part of the viewer's local shutdown. */ dispose: () => void; } export declare function createStatusLine(s: StatusLineSession, hooks: StatusLineHooks): AttachStatusLine;