import type { StructuredPatchHunk } from 'diff'; import * as React from 'react'; import { useTerminalSize } from '../hooks/useTerminalSize.js'; import { Box, Text } from '@anthropic/ink'; import { count } from '../utils/array.js'; import { MessageResponse } from './MessageResponse.js'; import { StructuredDiffList } from './StructuredDiffList.js'; type Props = { filePath: string; structuredPatch: StructuredPatchHunk[]; firstLine: string | null; fileContent?: string; style?: 'condensed'; verbose: boolean; previewHint?: string; }; export function FileEditToolUpdatedMessage({ filePath, structuredPatch, firstLine, fileContent, style, verbose, previewHint, }: Props): React.ReactNode { const { columns } = useTerminalSize(); const numAdditions = structuredPatch.reduce((acc, hunk) => acc + count(hunk.lines, _ => _.startsWith('+')), 0); const numRemovals = structuredPatch.reduce((acc, hunk) => acc + count(hunk.lines, _ => _.startsWith('-')), 0); const text = ( {numAdditions > 0 ? ( <> Added {numAdditions} {numAdditions > 1 ? 'lines' : 'line'} ) : null} {numAdditions > 0 && numRemovals > 0 ? ', ' : null} {numRemovals > 0 ? ( <> {numAdditions === 0 ? 'R' : 'r'}emoved {numRemovals} {numRemovals > 1 ? 'lines' : 'line'} ) : null} ); // Plan files: invert condensed behavior // - Regular mode: just show the hint (user can type /plan to see full content) // - Condensed mode (subagent view): show the diff if (previewHint) { if (style !== 'condensed' && !verbose) { return ( {previewHint} ); } } else if (style === 'condensed' && !verbose) { return text; } return ( {text} ); }