MCPcopy Create free account
hub / github.com/anus-dev/ANUS / ensureCorrectEdit

Function ensureCorrectEdit

packages/core/src/utils/editCorrector.ts:158–334  ·  view source on GitHub ↗
(
  filePath: string,
  currentContent: string,
  originalParams: EditToolParams, // This is the EditToolParams from edit.ts, without \'corrected\'
  client: AnusClient,
  abortSignal: AbortSignal,
)

Source from the content-addressed store, hash-verified

156 * EditToolParams (as CorrectedEditParams) and the final occurrences count.
157 */
158export async function ensureCorrectEdit(
159 filePath: string,
160 currentContent: string,
161 originalParams: EditToolParams, // This is the EditToolParams from edit.ts, without \'corrected\'
162 client: AnusClient,
163 abortSignal: AbortSignal,
164): Promise<CorrectedEditResult> {
165 const cacheKey = `${currentContent}---${originalParams.old_string}---${originalParams.new_string}`;
166 const cachedResult = editCorrectionCache.get(cacheKey);
167 if (cachedResult) {
168 return cachedResult;
169 }
170
171 let finalNewString = originalParams.new_string;
172 const newStringPotentiallyEscaped =
173 unescapeStringForAnusBug(originalParams.new_string) !==
174 originalParams.new_string;
175
176 const expectedReplacements = originalParams.expected_replacements ?? 1;
177
178 let finalOldString = originalParams.old_string;
179 let occurrences = countOccurrences(currentContent, finalOldString);
180
181 if (occurrences === expectedReplacements) {
182 if (newStringPotentiallyEscaped) {
183 finalNewString = await correctNewStringEscaping(
184 client,
185 finalOldString,
186 originalParams.new_string,
187 abortSignal,
188 );
189 }
190 } else if (occurrences > expectedReplacements) {
191 const expectedReplacements = originalParams.expected_replacements ?? 1;
192
193 // If user expects multiple replacements, return as-is
194 if (occurrences === expectedReplacements) {
195 const result: CorrectedEditResult = {
196 params: { ...originalParams },
197 occurrences,
198 };
199 editCorrectionCache.set(cacheKey, result);
200 return result;
201 }
202
203 // If user expects 1 but found multiple, try to correct (existing behavior)
204 if (expectedReplacements === 1) {
205 const result: CorrectedEditResult = {
206 params: { ...originalParams },
207 occurrences,
208 };
209 editCorrectionCache.set(cacheKey, result);
210 return result;
211 }
212
213 // If occurrences don't match expected, return as-is (will fail validation later)
214 const result: CorrectedEditResult = {
215 params: { ...originalParams },

Callers 3

calculateEditMethod · 0.85
getCorrectedFileContentFunction · 0.85

Calls 9

unescapeStringForAnusBugFunction · 0.85
countOccurrencesFunction · 0.85
correctNewStringEscapingFunction · 0.85
correctNewStringFunction · 0.85
findLastEditTimestampFunction · 0.85
correctOldStringMismatchFunction · 0.85
trimPairIfPossibleFunction · 0.85
getMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected