export type TimelineStageId = 'PLAN' | 'READ' | 'EDIT' | 'VERIFY' | 'SUMMARY'; export type TimelineStageStatus = 'done' | 'active' | 'pending'; export interface TimelineAction { type: string; target: string; result: string; } export interface TimelineStage { id: TimelineStageId; status: TimelineStageStatus; summary: string; detail: string; } export interface TimelineFile { type: 'write' | 'edit' | 'delete' | 'mkdir'; target: string; result: string; } export interface TimelineCheck { target: string; result: string; } export interface AgentTimelineModel { currentStage: TimelineStageId; currentTarget: string; stages: TimelineStage[]; files: TimelineFile[]; checks: TimelineCheck[]; progress: number; } export declare function buildAgentTimelineModel(args: { actions: TimelineAction[]; thinking: string; waitingForAI: boolean; iteration: number; maxIterations: number; }): AgentTimelineModel; export declare function formatElapsed(milliseconds: number): string; /** * Truncate to a column budget, not a code-unit budget: Screen.write advances * by charWidth, so a CJK/emoji prompt measured with String.length would draw * up to twice as wide as the pane it was sized for. */ export declare function truncateMiddle(value: string, maxLength: number): string;