import type { ContextUsageSnapshot } from "../../llm/token-usage.js"; import type { Mode } from "../../types.js"; import type { InkTheme } from "../render/ink-theme.js"; import type { StatusRowsWanted } from "./row-budget.js"; export declare const STATUS_INSET_COLUMNS = 1; export interface StatusViewInput { readonly ink: InkTheme; readonly columns: number; readonly allocatedRows: number; readonly mode: Mode; readonly contextChip: string | undefined; readonly contextUsage: ContextUsageSnapshot | undefined; readonly contextLimitEditing?: boolean | undefined; readonly contextLimitDraft?: string | undefined; readonly running: boolean; readonly compacting: boolean; readonly activity: string | undefined; readonly cancelArmed: boolean; readonly tick: number; readonly hasDraft: boolean; readonly queued: number; readonly planVisible: boolean; readonly hasActivePlan: boolean; readonly thinkingExpanded?: boolean | undefined; readonly outputExpanded?: boolean | undefined; } export declare function formatElapsed(seconds: number): string; export declare function relativizeHome(path: string, home: string): string; /** * Priority-ordered prefix fit: segments join with `separator` and the tail * segments that would overflow the budget are dropped whole, so a row never * ends in a ragged mid-word ellipsis at ordinary widths. */ export declare function fitSegments(segments: readonly string[], budget: number, separator: string): string; export declare function statusRowsWanted(): StatusRowsWanted; /** * One straight row under the composer: mode badge + hints (or activity while * busy) on the left, context usage flush right — the opentui status-line * arrangement, inset one column on each side so no glyph ever touches the * composer box's border columns. Scroll position lives on the right-edge * scrollbar now, not in this row. */ export declare function statusRows(input: StatusViewInput): readonly string[];