/** * Tool Display Formatter - AGI CLI style * * Implements the clean, informative tool execution display that AGI CLI uses: * - Tool call indicators with inline args * - Result summaries with status indicators * - Expandable content with previews * - Diff formatting with colors * - Advanced progress indicators * - Compact same-line displays */ export interface ToolCallDisplay { name: string; args: Record; timestamp?: number; } export interface ToolResultDisplay { summary: string; fullOutput?: string; linesShown?: number; totalLines?: number; status: 'success' | 'error' | 'warning'; duration?: number; } export interface DiffLine { lineNumber?: number; type: 'add' | 'remove' | 'context' | 'info'; content: string; } /** * Format tool call display (AGI CLI style) * * Example output: * ⏺ [Read] src/core/agent.ts * ⏺ [Search] pattern: "TODO|FIXME", output_mode: "content", head_limit: 15 */ export declare function formatToolCall(call: ToolCallDisplay, options?: { includePrefix?: boolean; }): string; /** * Format tool result display (AGI CLI style) * * Example output: * ⎿ Read 340 lines * ⎿ Found 15 lines * ⎿ Completed */ export declare function formatToolResult(result: ToolResultDisplay, options?: { includePrefix?: boolean; }): string; /** * Format expandable content preview * * Example: * import { foo } from 'bar'; * … +312 lines */ export declare function formatExpandablePreview(content: string, maxLines?: number): { preview: string; isExpanded: boolean; totalLines: number; }; /** * Format diff output (AGI CLI style) * * Example: * Update(src/core/agent.ts) * ⎿ Updated src/core/agent.ts with 2 additions and 1 removal * 75 private async processConversation(): Promise { * 76 while (true) { * 77 - this.pruneMessagesIfNeeded(); * 77 + await this.pruneMessagesIfNeeded(); * 78 */ export declare function formatDiff(diff: DiffLine[]): string; /** * Format diff summary * Example: "Updated src/core/agent.ts with 2 additions and 1 removal" */ export declare function formatDiffSummary(file: string, additions: number, removals: number): string; /** * Format edit result with advanced graphics * Creates a visually distinct, easy-to-read display for file edits * * Example output: * ╭──────────────────────────────────────────────────────────╮ * │ ✏️ EDIT src/core/agent.ts │ * ├──────────────────────────────────────────────────────────┤ * │ 77 │ - this.pruneMessagesIfNeeded(); │ * │ 77 │ + await this.pruneMessagesIfNeeded(); │ * ├──────────────────────────────────────────────────────────┤ * │ 📊 Summary: +1 line, -1 line │ * ╰──────────────────────────────────────────────────────────╯ */ export declare function formatAdvancedEdit(filePath: string, oldString: string, newString: string, options?: { lineNumber?: number; maxWidth?: number; replaceAll?: boolean; }): string; /** * Format a compact inline edit summary * For when the full box display is too verbose * * Example: "✏️ src/file.ts:42 • +3 −2 lines" */ export declare function formatCompactEdit(filePath: string, lineNumber: number, additions: number, removals: number): string; /** * Format multiline content with indentation (AGI CLI style) * * Adds proper indentation and line wrapping */ export declare function formatIndentedContent(content: string, indent?: number): string; /** * Format token usage indicator * Example: "• Context 5% used (7.2k tokens)" */ export declare function formatTokenUsage(percentage: number, tokens?: number): string; /** * Format timing information * Example: "(1m 43s)" or "(250ms)" */ export declare function formatDuration(ms: number): string; /** * Create a "thinking" indicator * Example: "∴ Thinking…" or "∴ Thought for 2s" */ export declare function formatThinking(durationMs?: number, _hasContent?: boolean): string; /** * Format status line at bottom * Example: "• Ready for prompts (250ms)" */ export declare function formatStatusLine(message: string, durationMs?: number, tokenUsage?: { percentage: number; tokens?: number; }): string; /** * Smart truncate for shell commands * Preserves important parts like command name and key flags */ export declare function truncateCommand(command: string, _maxLength?: number): string; /** * Format file size in human-readable format */ export declare function formatFileSize(bytes: number): string; /** * Format JSON output with syntax highlighting */ export declare function formatJSON(data: unknown, compact?: boolean): string; /** * Format a list of items (AGI CLI style) * Example: * • Item 1 * • Item 2 * • Item 3 */ export declare function formatList(items: string[], bullet?: string): string; /** * Format a key-value pair (AGI CLI style) */ export declare function formatKeyValue(key: string, value: string): string; export interface ToolResultSummaryInput { toolName: string; args: Record; output: string; success: boolean; durationMs?: number; } /** * Format a tool result summary for display in the terminal. * This is the central function for displaying ALL tool results. * * To add support for a new tool: * 1. Add a case in the switch statement below * 2. Create a format function for that tool type * * @returns Formatted string to display, or null if no display needed */ export declare function formatToolResultSummary(input: ToolResultSummaryInput): string | null; /** * Format a compact progress bar */ export declare function formatCompactProgressBar(current: number, total: number, options?: { width?: number; style?: 'bar' | 'braille' | 'dots'; }): string; /** * Format a micro progress indicator (fits in status line) */ export declare function formatMicroProgress(current: number, total: number): string; /** * Format a spinner with elapsed time */ export declare function formatSpinnerWithTime(frame: string, label: string, elapsedMs: number): string; /** * Format multiple tool operations on a single line */ export declare function formatCompactToolLine(operations: Array<{ name: string; status: 'success' | 'error' | 'running'; summary?: string; }>, options?: { separator?: string; maxWidth?: number; }): string; /** * Format a file operation summary with additions/removals */ export declare function formatFileOpSummary(path: string, type: 'read' | 'edit' | 'write', stats?: { lines?: number; additions?: number; removals?: number; }): string; /** * Format a search result summary */ export declare function formatSearchOpSummary(pattern: string, matchCount: number, fileCount?: number, durationMs?: number): string; /** * Format a context usage badge */ export declare function formatContextBadge(usedPercentage: number): string; //# sourceMappingURL=toolDisplay.d.ts.map