source dump of claude code
at main 161 lines 16 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import { basename, relative } from 'path'; 3import React, { useMemo } from 'react'; 4import type { z } from 'zod/v4'; 5import { Text } from '../../../ink.js'; 6import { FileWriteTool } from '../../../tools/FileWriteTool/FileWriteTool.js'; 7import { getCwd } from '../../../utils/cwd.js'; 8import { isENOENT } from '../../../utils/errors.js'; 9import { readFileSync } from '../../../utils/fileRead.js'; 10import { FilePermissionDialog } from '../FilePermissionDialog/FilePermissionDialog.js'; 11import { createSingleEditDiffConfig, type FileEdit, type IDEDiffSupport } from '../FilePermissionDialog/ideDiffConfig.js'; 12import type { PermissionRequestProps } from '../PermissionRequest.js'; 13import { FileWriteToolDiff } from './FileWriteToolDiff.js'; 14type FileWriteToolInput = z.infer<typeof FileWriteTool.inputSchema>; 15const ideDiffSupport: IDEDiffSupport<FileWriteToolInput> = { 16 getConfig: (input: FileWriteToolInput) => { 17 let oldContent: string; 18 try { 19 oldContent = readFileSync(input.file_path); 20 } catch (e) { 21 if (!isENOENT(e)) throw e; 22 oldContent = ''; 23 } 24 return createSingleEditDiffConfig(input.file_path, oldContent, input.content, false // For file writes, we replace the entire content 25 ); 26 }, 27 applyChanges: (input: FileWriteToolInput, modifiedEdits: FileEdit[]) => { 28 const firstEdit = modifiedEdits[0]; 29 if (firstEdit) { 30 return { 31 ...input, 32 content: firstEdit.new_string 33 }; 34 } 35 return input; 36 } 37}; 38export function FileWritePermissionRequest(props) { 39 const $ = _c(30); 40 const parseInput = _temp; 41 let t0; 42 if ($[0] !== props.toolUseConfirm.input) { 43 t0 = parseInput(props.toolUseConfirm.input); 44 $[0] = props.toolUseConfirm.input; 45 $[1] = t0; 46 } else { 47 t0 = $[1]; 48 } 49 const parsed = t0; 50 const { 51 file_path, 52 content 53 } = parsed; 54 let t1; 55 if ($[2] !== file_path) { 56 ; 57 try { 58 t1 = { 59 fileExists: true, 60 oldContent: readFileSync(file_path) 61 }; 62 } catch (t2) { 63 const e = t2; 64 if (!isENOENT(e)) { 65 throw e; 66 } 67 let t3; 68 if ($[4] === Symbol.for("react.memo_cache_sentinel")) { 69 t3 = { 70 fileExists: false, 71 oldContent: "" 72 }; 73 $[4] = t3; 74 } else { 75 t3 = $[4]; 76 } 77 t1 = t3; 78 } 79 $[2] = file_path; 80 $[3] = t1; 81 } else { 82 t1 = $[3]; 83 } 84 const { 85 fileExists, 86 oldContent 87 } = t1; 88 const actionText = fileExists ? "overwrite" : "create"; 89 const t2 = props.toolUseConfirm; 90 const t3 = props.toolUseContext; 91 const t4 = props.onDone; 92 const t5 = props.onReject; 93 const t6 = props.workerBadge; 94 const t7 = fileExists ? "Overwrite file" : "Create file"; 95 let t8; 96 if ($[5] !== file_path) { 97 t8 = relative(getCwd(), file_path); 98 $[5] = file_path; 99 $[6] = t8; 100 } else { 101 t8 = $[6]; 102 } 103 let t9; 104 if ($[7] !== file_path) { 105 t9 = basename(file_path); 106 $[7] = file_path; 107 $[8] = t9; 108 } else { 109 t9 = $[8]; 110 } 111 let t10; 112 if ($[9] !== t9) { 113 t10 = <Text bold={true}>{t9}</Text>; 114 $[9] = t9; 115 $[10] = t10; 116 } else { 117 t10 = $[10]; 118 } 119 let t11; 120 if ($[11] !== actionText || $[12] !== t10) { 121 t11 = <Text>Do you want to {actionText} {t10}?</Text>; 122 $[11] = actionText; 123 $[12] = t10; 124 $[13] = t11; 125 } else { 126 t11 = $[13]; 127 } 128 let t12; 129 if ($[14] !== content || $[15] !== fileExists || $[16] !== file_path || $[17] !== oldContent) { 130 t12 = <FileWriteToolDiff file_path={file_path} content={content} fileExists={fileExists} oldContent={oldContent} />; 131 $[14] = content; 132 $[15] = fileExists; 133 $[16] = file_path; 134 $[17] = oldContent; 135 $[18] = t12; 136 } else { 137 t12 = $[18]; 138 } 139 let t13; 140 if ($[19] !== file_path || $[20] !== props.onDone || $[21] !== props.onReject || $[22] !== props.toolUseConfirm || $[23] !== props.toolUseContext || $[24] !== props.workerBadge || $[25] !== t11 || $[26] !== t12 || $[27] !== t7 || $[28] !== t8) { 141 t13 = <FilePermissionDialog toolUseConfirm={t2} toolUseContext={t3} onDone={t4} onReject={t5} workerBadge={t6} title={t7} subtitle={t8} question={t11} content={t12} path={file_path} completionType="write_file_single" parseInput={parseInput} ideDiffSupport={ideDiffSupport} />; 142 $[19] = file_path; 143 $[20] = props.onDone; 144 $[21] = props.onReject; 145 $[22] = props.toolUseConfirm; 146 $[23] = props.toolUseContext; 147 $[24] = props.workerBadge; 148 $[25] = t11; 149 $[26] = t12; 150 $[27] = t7; 151 $[28] = t8; 152 $[29] = t13; 153 } else { 154 t13 = $[29]; 155 } 156 return t13; 157} 158function _temp(input) { 159 return FileWriteTool.inputSchema.parse(input); 160} 161//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlbmFtZSIsInJlbGF0aXZlIiwiUmVhY3QiLCJ1c2VNZW1vIiwieiIsIlRleHQiLCJGaWxlV3JpdGVUb29sIiwiZ2V0Q3dkIiwiaXNFTk9FTlQiLCJyZWFkRmlsZVN5bmMiLCJGaWxlUGVybWlzc2lvbkRpYWxvZyIsImNyZWF0ZVNpbmdsZUVkaXREaWZmQ29uZmlnIiwiRmlsZUVkaXQiLCJJREVEaWZmU3VwcG9ydCIsIlBlcm1pc3Npb25SZXF1ZXN0UHJvcHMiLCJGaWxlV3JpdGVUb29sRGlmZiIsIkZpbGVXcml0ZVRvb2xJbnB1dCIsImluZmVyIiwiaW5wdXRTY2hlbWEiLCJpZGVEaWZmU3VwcG9ydCIsImdldENvbmZpZyIsImlucHV0Iiwib2xkQ29udGVudCIsImZpbGVfcGF0aCIsImUiLCJjb250ZW50IiwiYXBwbHlDaGFuZ2VzIiwibW9kaWZpZWRFZGl0cyIsImZpcnN0RWRpdCIsIm5ld19zdHJpbmciLCJGaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdCIsInByb3BzIiwiJCIsIl9jIiwicGFyc2VJbnB1dCIsIl90ZW1wIiwidDAiLCJ0b29sVXNlQ29uZmlybSIsInBhcnNlZCIsInQxIiwiZmlsZUV4aXN0cyIsInQyIiwidDMiLCJTeW1ib2wiLCJmb3IiLCJhY3Rpb25UZXh0IiwidG9vbFVzZUNvbnRleHQiLCJ0NCIsIm9uRG9uZSIsInQ1Iiwib25SZWplY3QiLCJ0NiIsIndvcmtlckJhZGdlIiwidDciLCJ0OCIsInQ5IiwidDEwIiwidDExIiwidDEyIiwidDEzIiwicGFyc2UiXSwic291cmNlcyI6WyJGaWxlV3JpdGVQZXJtaXNzaW9uUmVxdWVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUsIHJlbGF0aXZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tICd6b2QvdjQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnLi4vLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgRmlsZVdyaXRlVG9vbCB9IGZyb20gJy4uLy4uLy4uL3Rvb2xzL0ZpbGVXcml0ZVRvb2wvRmlsZVdyaXRlVG9vbC5qcydcbmltcG9ydCB7IGdldEN3ZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2N3ZC5qcydcbmltcG9ydCB7IGlzRU5PRU5UIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZXJyb3JzLmpzJ1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZVJlYWQuanMnXG5pbXBvcnQgeyBGaWxlUGVybWlzc2lvbkRpYWxvZyB9IGZyb20gJy4uL0ZpbGVQZXJtaXNzaW9uRGlhbG9nL0ZpbGVQZXJtaXNzaW9uRGlhbG9nLmpzJ1xuaW1wb3J0IHtcbiAgY3JlYXRlU2luZ2xlRWRpdERpZmZDb25maWcsXG4gIHR5cGUgRmlsZUVkaXQsXG4gIHR5cGUgSURFRGlmZlN1cHBvcnQsXG59IGZyb20gJy4uL0ZpbGVQZXJtaXNzaW9uRGlhbG9nL2lkZURpZmZDb25maWcuanMnXG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25SZXF1ZXN0UHJvcHMgfSBmcm9tICcuLi9QZXJtaXNzaW9uUmVxdWVzdC5qcydcbmltcG9ydCB7IEZpbGVXcml0ZVRvb2xEaWZmIH0gZnJvbSAnLi9GaWxlV3JpdGVUb29sRGlmZi5qcydcblxudHlwZSBGaWxlV3JpdGVUb29sSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBGaWxlV3JpdGVUb29sLmlucHV0U2NoZW1hPlxuXG5jb25zdCBpZGVEaWZmU3VwcG9ydDogSURFRGlmZlN1cHBvcnQ8RmlsZVdyaXRlVG9vbElucHV0PiA9IHtcbiAgZ2V0Q29uZmlnOiAoaW5wdXQ6IEZpbGVXcml0ZVRvb2xJbnB1dCkgPT4ge1xuICAgIGxldCBvbGRDb250ZW50OiBzdHJpbmdcbiAgICB0cnkge1xuICAgICAgb2xkQ29udGVudCA9IHJlYWRGaWxlU3luYyhpbnB1dC5maWxlX3BhdGgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCFpc0VOT0VOVChlKSkgdGhyb3cgZVxuICAgICAgb2xkQ29udGVudCA9ICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVNpbmdsZUVkaXREaWZmQ29uZmlnKFxuICAgICAgaW5wdXQuZmlsZV9wYXRoLFxuICAgICAgb2xkQ29udGVudCxcbiAgICAgIGlucHV0LmNvbnRlbnQsXG4gICAgICBmYWxzZSwgLy8gRm9yIGZpbGUgd3JpdGVzLCB3ZSByZXBsYWNlIHRoZSBlbnRpcmUgY29udGVudFxuICAgIClcbiAgfSxcbiAgYXBwbHlDaGFuZ2VzOiAoaW5wdXQ6IEZpbGVXcml0ZVRvb2xJbnB1dCwgbW9kaWZpZWRFZGl0czogRmlsZUVkaXRbXSkgPT4ge1xuICAgIGNvbnN0IGZpcnN0RWRpdCA9IG1vZGlmaWVkRWRpdHNbMF1cbiAgICBpZiAoZmlyc3RFZGl0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbnB1dCxcbiAgICAgICAgY29udGVudDogZmlyc3RFZGl0Lm5ld19zdHJpbmcsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnB1dFxuICB9LFxufVxuXG5leHBvcnQgZnVuY3Rpb24gRmlsZVdyaXRlUGVybWlzc2lvblJlcXVlc3QoXG4gIHByb3BzOiBQZXJtaXNzaW9uUmVxdWVzdFByb3BzLFxuKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgcGFyc2VJbnB1dCA9IChpbnB1dDogdW5rbm93bik6IEZpbGVXcml0ZVRvb2xJbnB1dCA9PiB7XG4gICAgcmV0dXJuIEZpbGVXcml0ZVRvb2wuaW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpXG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUlucHV0KHByb3BzLnRvb2xVc2VDb25maXJtLmlucHV0KVxuICBjb25zdCB7IGZpbGVfcGF0aCwgY29udGVudCB9ID0gcGFyc2VkXG5cbiAgLy8gU2luZ2xlIHJlYWQgZHJpdmVzIGJvdGggVUkgdGV4dCAoXCJDcmVhdGVcIiB2cyBcIk92ZXJ3cml0ZVwiKSBhbmQgdGhlIGRpZmZcbiAgLy8gc2hvd24gYnkgRmlsZVdyaXRlVG9vbERpZmYg4oCUIGF2b2lkcyBhIHJlZHVuZGFudCBleGlzdHNTeW5jIHN0YXQgdGhhdCB3b3VsZFxuICAvLyBibG9jayBmaXJzdC1tb3VudCBjb21taXQgb24gc2xvdy9uZXR3b3JrZWQgZmlsZXN5c3RlbXMuXG4gIGNvbnN0IHsgZmlsZUV4aXN0cywgb2xkQ29udGVudCB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IGZpbGVFeGlzdHM6IHRydWUsIG9sZENvbnRlbnQ6IHJlYWRGaWxlU3luYyhmaWxlX3BhdGgpIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoIWlzRU5PRU5UKGUpKSB0aHJvdyBlXG4gICAgICByZXR1cm4geyBmaWxlRXhpc3RzOiBmYWxzZSwgb2xkQ29udGVudDogJycgfVxuICAgIH1cbiAgfSwgW2ZpbGVfcGF0aF0pXG5cbiAgY29uc3QgYWN0aW9uVGV4dCA9IGZpbGVFeGlzdHMgPyAnb3ZlcndyaXRlJyA6ICdjcmVhdGUnXG5cbiAgcmV0dXJuIChcbiAgICA8RmlsZVBlcm1pc3Npb25EaWFsb2dcbiAgICAgIHRvb2xVc2VDb25maXJtPXtwcm9wcy50b29sVXNlQ29uZmlybX1cbiAgICAgIHRvb2xVc2VDb250ZXh0PXtwcm9wcy50b29sVXNlQ29udGV4dH1cbiAgICAgIG9uRG9uZT17cHJvcHMub25Eb25lfVxuICAgICAgb25SZWplY3Q9e3Byb3BzLm9uUmVqZWN0fVxuICAgICAgd29ya2VyQmFkZ2U9e3Byb3BzLndvcmtlckJhZGdlfVxuICAgICAgdGl0bGU9e2ZpbGVFeGlzdHMgPyAnT3ZlcndyaXRlIGZpbGUnIDogJ0NyZWF0ZSBmaWxlJ31cbiAgICAgIHN1YnRpdGxlPXtyZWxhdGl2ZShnZXRDd2QoKSwgZmlsZV9wYXRoKX1cbiAgICAgIHF1ZXN0aW9uPXtcbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgRG8geW91IHdhbnQgdG8ge2FjdGlvblRleHR9IDxUZXh0IGJvbGQ+e2Jhc2VuYW1lKGZpbGVfcGF0aCl9PC9UZXh0Pj9cbiAgICAgICAgPC9UZXh0PlxuICAgICAgfVxuICAgICAgY29udGVudD17XG4gICAgICAgIDxGaWxlV3JpdGVUb29sRGlmZlxuICAgICAgICAgIGZpbGVfcGF0aD17ZmlsZV9wYXRofVxuICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgICAgZmlsZUV4aXN0cz17ZmlsZUV4aXN0c31cbiAgICAgICAgICBvbGRDb250ZW50PXtvbGRDb250ZW50fVxuICAgICAgICAvPlxuICAgICAgfVxuICAgICAgcGF0aD17ZmlsZV9wYXRofVxuICAgICAgY29tcGxldGlvblR5cGU9XCJ3cml0ZV9maWxlX3NpbmdsZVwiXG4gICAgICBwYXJzZUlucHV0PXtwYXJzZUlucHV0fVxuICAgICAgaWRlRGlmZlN1cHBvcnQ9e2lkZURpZmZTdXBwb3J0fVxuICAgIC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLFFBQVEsRUFBRUMsUUFBUSxRQUFRLE1BQU07QUFDekMsT0FBT0MsS0FBSyxJQUFJQyxPQUFPLFFBQVEsT0FBTztBQUN0QyxjQUFjQyxDQUFDLFFBQVEsUUFBUTtBQUMvQixTQUFTQyxJQUFJLFFBQVEsaUJBQWlCO0FBQ3RDLFNBQVNDLGFBQWEsUUFBUSwrQ0FBK0M7QUFDN0UsU0FBU0MsTUFBTSxRQUFRLHVCQUF1QjtBQUM5QyxTQUFTQyxRQUFRLFFBQVEsMEJBQTBCO0FBQ25ELFNBQVNDLFlBQVksUUFBUSw0QkFBNEI7QUFDekQsU0FBU0Msb0JBQW9CLFFBQVEsaURBQWlEO0FBQ3RGLFNBQ0VDLDBCQUEwQixFQUMxQixLQUFLQyxRQUFRLEVBQ2IsS0FBS0MsY0FBYyxRQUNkLDBDQUEwQztBQUNqRCxjQUFjQyxzQkFBc0IsUUFBUSx5QkFBeUI7QUFDckUsU0FBU0MsaUJBQWlCLFFBQVEsd0JBQXdCO0FBRTFELEtBQUtDLGtCQUFrQixHQUFHWixDQUFDLENBQUNhLEtBQUssQ0FBQyxPQUFPWCxhQUFhLENBQUNZLFdBQVcsQ0FB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