import type { LoadingTip } from './loading-tips.js'; import type { ImageAttachment } from './input/attachments.js'; import type { AutocompleteState } from './input/autocomplete-state.js'; import type { IHistoryRing } from './input/types.js'; import type { SuggestEngine, SuggestContext } from './input/suggest.js'; export type { SuggestEngine, SuggestContext }; export interface LogUpdateFn { render: (content: string, targetBottomRow: number, anchorFloor?: number) => void; clear: (extraRows?: number) => void; done: () => void; readonly topRow?: number; resetGeometry?: () => void; measure?: (content: string, targetBottomRow: number) => { topRow: number; lineCount: number; }; setEraseBottomOverride?: (row: number) => void; } export interface KeyInfo { name?: string; sequence?: string; ctrl?: boolean; meta?: boolean; shift?: boolean; } export declare const SPINNER_FRAMES: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]; export interface BandRowMeta { logicalText: string; isHead: boolean; } export interface SpinnerState { frameIndex: number; verb: string; nextVerbRotateAt: number; startedAt: number; tipPool: readonly LoadingTip[]; currentTip: LoadingTip | null; } export interface CompositorScrollRegionGuard { withFullScrollRegion(fn: () => T): T; getExtraRows(): number; } export type CompositorInputMode = 'idle' | 'streaming' | 'picker'; export type FramePlacementMode = 'cursor-follow' | 'bottom-pinned'; export interface PickerController { renderRows: () => readonly string[]; onKey: (char: string | undefined, key: { name?: string; ctrl?: boolean; shift?: boolean; meta?: boolean; sequence?: string; }) => void; } export interface SubmissionPayload { text: string; displayText?: string; attachments: readonly ImageAttachment[]; } export interface TerminalCompositorOptions { stdout: NodeJS.WriteStream; stdin: NodeJS.ReadStream; onCancel?: () => void; onSoftStop?: () => void; onBackground?: () => void; onPauseInterrupt?: () => void; onShiftTab?: () => void; onTaskView?: () => boolean; onOpenEditor?: () => void; onSubmit?: (payload: SubmissionPayload) => void; promptText?: string | ((buffer: string) => string); history?: IHistoryRing; autocompleteState?: AutocompleteState; formatInputBuffer?: (segment: string) => string; scrollRegion?: CompositorScrollRegionGuard; captureMode?: boolean; goblinSpinner?: boolean; caretBlink?: boolean; caretBlinkIntervalMs?: number; anchorRow?: number; suggest?: { engine: SuggestEngine; getContext: () => SuggestContext; }; }