import type { StructuredPatchHunk } from 'diff' import { relative } from 'path' import * as React from 'react' import { useTerminalSize } from 'src/hooks/useTerminalSize.js' import { getCwd } from 'src/utils/cwd.js' import { Box, Text } from '@anthropic/ink' import { HighlightedCode } from './HighlightedCode.js' import { MessageResponse } from './MessageResponse.js' import { StructuredDiffList } from './StructuredDiffList.js' const MAX_LINES_TO_RENDER = 10 type Props = { file_path: string operation: 'write' | 'update' // For updates - show diff patch?: StructuredPatchHunk[] firstLine: string | null fileContent?: string // For new file creation - show content preview content?: string style?: 'condensed' verbose: boolean } export function FileEditToolUseRejectedMessage({ file_path, operation, patch, firstLine, fileContent, content, style, verbose, }: Props): React.ReactNode { const { columns } = useTerminalSize() const text = ( User rejected {operation} to {verbose ? file_path : relative(getCwd(), file_path)} ) // For condensed style, just show the text if (style === 'condensed' && !verbose) { return {text} } // For new file creation, show content preview (dimmed) if (operation === 'write' && content !== undefined) { const lines = content.split('\n') const numLines = lines.length const plusLines = numLines - MAX_LINES_TO_RENDER const truncatedContent = verbose ? content : lines.slice(0, MAX_LINES_TO_RENDER).join('\n') return ( {text} {!verbose && plusLines > 0 && ( … +{plusLines} lines )} ) } // For updates, show diff if (!patch || patch.length === 0) { return {text} } return ( {text} ) }