claude-code/components/FileEditToolUseRejectedMessage.tsx

170 lines
15 KiB
TypeScript
Raw Permalink Normal View History

import { c as _c } from "react/compiler-runtime";
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 '../ink.js';
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(t0) {
const $ = _c(38);
const {
file_path,
operation,
patch,
firstLine,
fileContent,
content,
style,
verbose
} = t0;
const {
columns
} = useTerminalSize();
let t1;
if ($[0] !== operation) {
t1 = <Text color="subtle">User rejected {operation} to </Text>;
$[0] = operation;
$[1] = t1;
} else {
t1 = $[1];
}
let t2;
if ($[2] !== file_path || $[3] !== verbose) {
t2 = verbose ? file_path : relative(getCwd(), file_path);
$[2] = file_path;
$[3] = verbose;
$[4] = t2;
} else {
t2 = $[4];
}
let t3;
if ($[5] !== t2) {
t3 = <Text bold={true} color="subtle">{t2}</Text>;
$[5] = t2;
$[6] = t3;
} else {
t3 = $[6];
}
let t4;
if ($[7] !== t1 || $[8] !== t3) {
t4 = <Box flexDirection="row">{t1}{t3}</Box>;
$[7] = t1;
$[8] = t3;
$[9] = t4;
} else {
t4 = $[9];
}
const text = t4;
if (style === "condensed" && !verbose) {
let t5;
if ($[10] !== text) {
t5 = <MessageResponse>{text}</MessageResponse>;
$[10] = text;
$[11] = t5;
} else {
t5 = $[11];
}
return t5;
}
if (operation === "write" && content !== undefined) {
let plusLines;
let t5;
if ($[12] !== content || $[13] !== verbose) {
const lines = content.split("\n");
const numLines = lines.length;
plusLines = numLines - MAX_LINES_TO_RENDER;
t5 = verbose ? content : lines.slice(0, MAX_LINES_TO_RENDER).join("\n");
$[12] = content;
$[13] = verbose;
$[14] = plusLines;
$[15] = t5;
} else {
plusLines = $[14];
t5 = $[15];
}
const truncatedContent = t5;
const t6 = truncatedContent || "(No content)";
const t7 = columns - 12;
let t8;
if ($[16] !== file_path || $[17] !== t6 || $[18] !== t7) {
t8 = <HighlightedCode code={t6} filePath={file_path} width={t7} dim={true} />;
$[16] = file_path;
$[17] = t6;
$[18] = t7;
$[19] = t8;
} else {
t8 = $[19];
}
let t9;
if ($[20] !== plusLines || $[21] !== verbose) {
t9 = !verbose && plusLines > 0 && <Text dimColor={true}> +{plusLines} lines</Text>;
$[20] = plusLines;
$[21] = verbose;
$[22] = t9;
} else {
t9 = $[22];
}
let t10;
if ($[23] !== t8 || $[24] !== t9 || $[25] !== text) {
t10 = <MessageResponse><Box flexDirection="column">{text}{t8}{t9}</Box></MessageResponse>;
$[23] = t8;
$[24] = t9;
$[25] = text;
$[26] = t10;
} else {
t10 = $[26];
}
return t10;
}
if (!patch || patch.length === 0) {
let t5;
if ($[27] !== text) {
t5 = <MessageResponse>{text}</MessageResponse>;
$[27] = text;
$[28] = t5;
} else {
t5 = $[28];
}
return t5;
}
const t5 = columns - 12;
let t6;
if ($[29] !== fileContent || $[30] !== file_path || $[31] !== firstLine || $[32] !== patch || $[33] !== t5) {
t6 = <StructuredDiffList hunks={patch} dim={true} width={t5} filePath={file_path} firstLine={firstLine} fileContent={fileContent} />;
$[29] = fileContent;
$[30] = file_path;
$[31] = firstLine;
$[32] = patch;
$[33] = t5;
$[34] = t6;
} else {
t6 = $[34];
}
let t7;
if ($[35] !== t6 || $[36] !== text) {
t7 = <MessageResponse><Box flexDirection="column">{text}{t6}</Box></MessageResponse>;
$[35] = t6;
$[36] = text;
$[37] = t7;
} else {
t7 = $[37];
}
return t7;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdHJ1Y3R1cmVkUGF0Y2hIdW5rIiwicmVsYXRpdmUiLCJSZWFjdCIsInVzZVRlcm1pbmFsU2l6ZSIsImdldEN3ZCIsIkJveCIsIlRleHQiLCJIaWdobGlnaHRlZENvZGUiLCJNZXNzYWdlUmVzcG9uc2UiLCJTdHJ1Y3R1cmVkRGlmZkxpc3QiLCJNQVhfTElORVNfVE9fUkVOREVSIiwiUHJvcHMiLCJmaWxlX3BhdGgiLCJvcGVyYXRpb24iLCJwYXRjaCIsImZpcnN0TGluZSIsImZpbGVDb250ZW50IiwiY29udGVudCIsInN0eWxlIiwidmVyYm9zZSIsIkZpbGVFZGl0VG9vbFVzZVJlamVjdGVkTWVzc2FnZSIsInQwIiwiJCIsIl9jIiwiY29sdW1ucyIsInQxIiwidDIiLCJ0MyIsInQ0IiwidGV4dCIsInQ1IiwidW5kZWZpbmVkIiwicGx1c0xpbmVzIiwibGluZXMiLCJzcGxpdCIsIm51bUxpbmVzIiwibGVuZ3RoIiwic2xpY2UiLCJqb2luIiwidHJ1bmNhdGVkQ29udGVudCIsInQ2IiwidDciLCJ0OCIsInQ5IiwidDEwIl0sInNvdXJjZXMiOlsiRmlsZUVkaXRUb29sVXNlUmVqZWN0ZWRNZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cnVjdHVyZWRQYXRjaEh1bmsgfSBmcm9tICdkaWZmJ1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdwYXRoJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUZXJtaW5hbFNpemUgfSBmcm9tICdzcmMvaG9va3MvdXNlVGVybWluYWxTaXplLmpzJ1xuaW1wb3J0IHsgZ2V0Q3dkIH0gZnJvbSAnc3JjL3V0aWxzL2N3ZC5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uL2luay5qcydcbmltcG9ydCB7IEhpZ2hsaWdodGVkQ29kZSB9IGZyb20gJy4vSGlnaGxpZ2h0ZWRDb2RlLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZVJlc3BvbnNlIH0gZnJvbSAnLi9NZXNzYWdlUmVzcG9uc2UuanMnXG5pbXBvcnQgeyBTdHJ1Y3R1cmVkRGlmZkxpc3QgfSBmcm9tICcuL1N0cnVjdHVyZWREaWZmTGlzdC5qcydcblxuY29uc3QgTUFYX0xJTkVTX1RPX1JFTkRFUiA9IDEwXG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZpbGVfcGF0aDogc3RyaW5nXG4gIG9wZXJhdGlvbjogJ3dyaXRlJyB8ICd1cGRhdGUnXG4gIC8vIEZvciB1cGRhdGVzIC0gc2hvdyBkaWZmXG4gIHBhdGNoPzogU3RydWN0dXJlZFBhdGNoSHVua1tdXG4gIGZpcnN0TGluZTogc3RyaW5nIHwgbnVsbFxuICBmaWxlQ29udGVudD86IHN0cmluZ1xuICAvLyBGb3IgbmV3IGZpbGUgY3JlYXRpb24gLSBzaG93IGNvbnRlbnQgcHJldmlld1xuICBjb250ZW50Pzogc3RyaW5nXG4gIHN0eWxlPzogJ2NvbmRlbnNlZCdcbiAgdmVyYm9zZTogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZUVkaXRUb29sVXNlUmVqZWN0ZWRNZXNzYWdlKHtcbiAgZmlsZV9wYXRoLFxuICBvcGVyYXRpb24sXG4gIHBhdGNoLFxuICBmaXJzdExpbmUsXG4gIGZpbGVDb250ZW50LFxuICBjb250ZW50LFxuICBzdHlsZSxcbiAgdmVyYm9zZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBjb2x1bW5zIH0gPSB1c2VUZXJtaW5hbFNpemUoKVxuICBjb25zdCB0ZXh0ID0gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cInJvd1wiPlxuICAgICAgPFRleHQgY29sb3I9XCJzdWJ0bGVcIj5Vc2VyIHJlamVjdGVkIHtvcGVyYXRpb259IHRvIDwvVGV4dD5cbiAgICAgIDxUZXh0IGJvbGQgY29sb3I9XCJzdWJ0bGVcIj5cbiAgICAgICAge3ZlcmJvc2UgPyBmaWxlX3BhdGggOiByZWxhdGl2ZShnZXRDd2QoKSwgZmlsZV9wYXRoKX1cbiAgICAgIDwvVGV4dD5cbiAgICA8L0JveD5cbiAgKVxuXG4gIC8vIEZvciBjb25kZW5zZWQgc3R5bGUsIGp1c3Qgc2hvdyB0aGUgdGV4dFxuICBpZiAoc3R5bGUgPT09ICdjb25kZW5zZWQnICYmICF2ZXJib3NlKSB7XG4gICAgcmV0dXJuIDxNZXNzYWdlUmVzcG9uc2U+e3RleHR9PC9NZXNzYWdlUmVzcG9uc2U+XG4gIH1cblxuICAvLyBGb3IgbmV3IGZpbGUgY3JlYXRpb24sIHNob3cgY29udGVudCBwcmV2aWV3IChkaW1tZWQpXG4gIGlmIChvcGVyYXRpb24gPT09ICd3cml0ZScgJiYgY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKVxuICAgIGNvbnN0IG51bUxpbmVzID0gbGluZXMubGVuZ3RoXG4gICAgY29uc3QgcGx1c0xpbmVzID0gbnVtTGluZXMgLSBNQVhfTElORVNfVE9fUkVOREVSXG4gICAgY29uc3QgdHJ1bmNhdGVkQ29udGVudCA9IHZlcmJvc2VcbiAgICAgID8gY29udGVudFxuICAgICAgOiBsaW5lcy5zbGljZSgwLCBNQVhfTElORVNfVE9fUkVOREVSKS5qb2luKCdcXG4nKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlUmVzcG9uc2U+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHt0ZXh0fVxuICAgICAgICAgIDxIaWdobGlnaHRlZENvZGVcbiAgICAgICAgICAgIGNvZGU9e3RydW5jYXRlZENvbnRlbnQgfHwgJyhObyBjb250ZW50KSd9XG4gICAgICAgICAgICBmaWxlUGF0aD17ZmlsZV9wYXRofVxuICAgICAgICAgICAgd2lkdGg9e2NvbHVtbnMgLSAxMn1cbiAgICAgICAgICAgIGRpbVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyF2ZXJib3NlICYmIHBsdXNMaW5lcyA+IDAgJiYgKFxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+4oCmICt7cGx1c0xpbmVzfSBsaW5lczwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L0JveD5cbiAgICAgIDwvTWVzc2FnZVJlc3BvbnNlPlxuICAgIClcbiAgfVxuXG4gIC8vIEZvciB1cGRhdGVzLCBzaG93IGRpZmZcbiAgaWYgKCFwYXRjaCB8fCBwYXRjaC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gPE1lc3NhZ2VSZXNwb25zZT57dGV4dH08L01lc3NhZ2VSZXNwb25zZT5cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE1lc3NhZ2VSZXNwb25zZT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICB7dGV4dH1cbiAgICAgICAgPFN0cnVjdHVyZWREaWZmTGlzdFxuICAgICAgICAgIGh1bmt