@vybestack/llxprt-code-core 0.5.0-nightly.251102.f115237d → 0.5.0-nightly.251104.319bfefc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +6 -14
  2. package/dist/src/core/client.js +17 -3
  3. package/dist/src/core/client.js.map +1 -1
  4. package/dist/src/core/geminiChat.d.ts +19 -2
  5. package/dist/src/core/geminiChat.js +153 -56
  6. package/dist/src/core/geminiChat.js.map +1 -1
  7. package/dist/src/core/subagentOrchestrator.js +8 -4
  8. package/dist/src/core/subagentOrchestrator.js.map +1 -1
  9. package/dist/src/core/turn.d.ts +6 -2
  10. package/dist/src/core/turn.js +6 -0
  11. package/dist/src/core/turn.js.map +1 -1
  12. package/dist/src/debug/ConfigurationManager.js +6 -0
  13. package/dist/src/debug/ConfigurationManager.js.map +1 -1
  14. package/dist/src/parsers/TextToolCallParser.d.ts +17 -1
  15. package/dist/src/parsers/TextToolCallParser.js +540 -186
  16. package/dist/src/parsers/TextToolCallParser.js.map +1 -1
  17. package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
  18. package/dist/src/providers/LoggingProviderWrapper.js +89 -4
  19. package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
  20. package/dist/src/providers/gemini/GeminiProvider.js +5 -6
  21. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  22. package/dist/src/providers/openai/OpenAIProvider.js +18 -4
  23. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  24. package/dist/src/runtime/AgentRuntimeContext.d.ts +1 -1
  25. package/dist/src/runtime/createAgentRuntimeContext.js +8 -1
  26. package/dist/src/runtime/createAgentRuntimeContext.js.map +1 -1
  27. package/dist/src/services/complexity-analyzer.d.ts +4 -1
  28. package/dist/src/services/complexity-analyzer.js +73 -21
  29. package/dist/src/services/complexity-analyzer.js.map +1 -1
  30. package/dist/src/services/shellExecutionService.js +22 -12
  31. package/dist/src/services/shellExecutionService.js.map +1 -1
  32. package/dist/src/settings/SettingsService.js +7 -0
  33. package/dist/src/settings/SettingsService.js.map +1 -1
  34. package/dist/src/telemetry/sdk.js +2 -2
  35. package/dist/src/telemetry/sdk.js.map +1 -1
  36. package/dist/src/tools/edit.js +27 -7
  37. package/dist/src/tools/edit.js.map +1 -1
  38. package/dist/src/tools/fuzzy-replacer.d.ts +61 -0
  39. package/dist/src/tools/fuzzy-replacer.js +450 -0
  40. package/dist/src/tools/fuzzy-replacer.js.map +1 -0
  41. package/dist/src/tools/mcp-tool.d.ts +1 -1
  42. package/dist/src/tools/mcp-tool.js +1 -1
  43. package/dist/src/tools/tool-registry.js +1 -1
  44. package/dist/src/tools/tool-registry.js.map +1 -1
  45. package/dist/src/utils/editor.js +10 -8
  46. package/dist/src/utils/editor.js.map +1 -1
  47. package/package.json +1 -1
@@ -16,6 +16,7 @@ import { ReadFileTool } from './read-file.js';
16
16
  import { IDEConnectionStatus } from '../ide/ide-client.js';
17
17
  import { getGitStatsService } from '../services/git-stats-service.js';
18
18
  import { EmojiFilter } from '../filters/EmojiFilter.js';
19
+ import { fuzzyReplace } from './fuzzy-replacer.js';
19
20
  /**
20
21
  * Gets emoji filter instance based on configuration
21
22
  */
@@ -52,6 +53,17 @@ export function applyReplacement(currentContent, oldString, newString, isNewFile
52
53
  // This would cause an infinite loop as indexOf("", n) always returns n
53
54
  throw new Error('Cannot perform multiple replacements with empty old_string');
54
55
  }
56
+ // Try fuzzy matching first
57
+ const fuzzyResult = fuzzyReplace(currentContent, oldString, newString, expectedReplacements > 1);
58
+ if (fuzzyResult) {
59
+ // Verify the number of replacements matches expectations
60
+ if (fuzzyResult.occurrences === expectedReplacements) {
61
+ return fuzzyResult.result;
62
+ }
63
+ // If fuzzy matching found a different number of occurrences,
64
+ // fall through to the strict matching below which will properly report the error
65
+ }
66
+ // Fall back to strict matching (original behavior)
55
67
  // Use a more precise replacement that only replaces the expected number of occurrences
56
68
  if (expectedReplacements === 1) {
57
69
  // For single replacement, use replace() instead of replaceAll()
@@ -157,20 +169,28 @@ class EditToolInvocation {
157
169
  };
158
170
  }
159
171
  else if (currentContent !== null) {
160
- // Editing an existing file - count occurrences directly
172
+ // Editing an existing file - count occurrences
161
173
  finalOldString = filteredParams.old_string;
162
174
  finalNewString = filteredParams.new_string;
163
175
  if (finalOldString === '') {
164
176
  occurrences = 0;
165
177
  }
166
178
  else {
167
- let count = 0;
168
- let pos = currentContent.indexOf(finalOldString);
169
- while (pos !== -1) {
170
- count++;
171
- pos = currentContent.indexOf(finalOldString, pos + finalOldString.length);
179
+ // Try fuzzy matching first to count occurrences
180
+ const fuzzyResult = fuzzyReplace(currentContent, finalOldString, finalNewString, expectedReplacements > 1);
181
+ if (fuzzyResult) {
182
+ occurrences = fuzzyResult.occurrences;
183
+ }
184
+ else {
185
+ // Fall back to strict counting
186
+ let count = 0;
187
+ let pos = currentContent.indexOf(finalOldString);
188
+ while (pos !== -1) {
189
+ count++;
190
+ pos = currentContent.indexOf(finalOldString, pos + finalOldString.length);
191
+ }
192
+ occurrences = count;
172
193
  }
173
- occurrences = count;
174
194
  }
175
195
  if (filteredParams.old_string === '' && expectedReplacements > 1) {
176
196
  // Error: Invalid combination that would cause infinite loop
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Ported from opencode (https://github.com/opencodenpm/opencode).
3
+ * Original by opencode contributors.
4
+ * Adapted for llxprt-code by Vybestack.
5
+ */
6
+ /**
7
+ * Type definition for replacer functions that generate potential matches
8
+ */
9
+ export type Replacer = (content: string, find: string) => Generator<string, void, unknown>;
10
+ /**
11
+ * Levenshtein distance algorithm implementation
12
+ */
13
+ export declare function levenshtein(a: string, b: string): number;
14
+ /**
15
+ * Simple exact match replacer
16
+ */
17
+ export declare const SimpleReplacer: Replacer;
18
+ /**
19
+ * Replacer that matches lines with trimmed content
20
+ */
21
+ export declare const LineTrimmedReplacer: Replacer;
22
+ /**
23
+ * Replacer that matches blocks using first and last line anchors with fuzzy middle content
24
+ */
25
+ export declare const BlockAnchorReplacer: Replacer;
26
+ /**
27
+ * Replacer that normalizes whitespace before matching
28
+ */
29
+ export declare const WhitespaceNormalizedReplacer: Replacer;
30
+ /**
31
+ * Replacer that matches content regardless of indentation level
32
+ */
33
+ export declare const IndentationFlexibleReplacer: Replacer;
34
+ /**
35
+ * Replacer that handles escape sequences
36
+ */
37
+ export declare const EscapeNormalizedReplacer: Replacer;
38
+ /**
39
+ * Replacer that yields all exact matches for handling multiple occurrences
40
+ */
41
+ export declare const MultiOccurrenceReplacer: Replacer;
42
+ /**
43
+ * Replacer that tries to match trimmed versions of the find string
44
+ */
45
+ export declare const TrimmedBoundaryReplacer: Replacer;
46
+ /**
47
+ * Replacer that uses first and last lines as context anchors with similarity checking
48
+ */
49
+ export declare const ContextAwareReplacer: Replacer;
50
+ /**
51
+ * Main fuzzy replace function that tries multiple replacement strategies
52
+ * @param content - The content to search in
53
+ * @param oldString - The string to find and replace
54
+ * @param newString - The replacement string
55
+ * @param replaceAll - Whether to replace all occurrences (default: false)
56
+ * @returns Object with result and occurrences count, or null if no replacement was made
57
+ */
58
+ export declare function fuzzyReplace(content: string, oldString: string, newString: string, replaceAll?: boolean): {
59
+ result: string;
60
+ occurrences: number;
61
+ } | null;
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Ported from opencode (https://github.com/opencodenpm/opencode).
3
+ * Original by opencode contributors.
4
+ * Adapted for llxprt-code by Vybestack.
5
+ */
6
+ // Similarity thresholds for block anchor fallback matching
7
+ const SINGLE_CANDIDATE_SIMILARITY_THRESHOLD = 0.0;
8
+ const MULTIPLE_CANDIDATES_SIMILARITY_THRESHOLD = 0.3;
9
+ /**
10
+ * Levenshtein distance algorithm implementation
11
+ */
12
+ export function levenshtein(a, b) {
13
+ // Handle empty strings
14
+ if (a === '' || b === '') {
15
+ return Math.max(a.length, b.length);
16
+ }
17
+ const matrix = Array.from({ length: a.length + 1 }, (_, i) => Array.from({ length: b.length + 1 }, (_, j) => i === 0 ? j : j === 0 ? i : 0));
18
+ for (let i = 1; i <= a.length; i++) {
19
+ for (let j = 1; j <= b.length; j++) {
20
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
21
+ matrix[i][j] = Math.min(matrix[i - 1][j] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j - 1] + cost);
22
+ }
23
+ }
24
+ return matrix[a.length][b.length];
25
+ }
26
+ /**
27
+ * Helper function to escape special regex characters
28
+ */
29
+ const escapeRegExp = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
30
+ /**
31
+ * Simple exact match replacer
32
+ */
33
+ export const SimpleReplacer = function* (_content, find) {
34
+ yield find;
35
+ };
36
+ /**
37
+ * Replacer that matches lines with trimmed content
38
+ */
39
+ export const LineTrimmedReplacer = function* (content, find) {
40
+ const originalLines = content.split('\n');
41
+ const searchLines = find.split('\n');
42
+ if (searchLines[searchLines.length - 1] === '') {
43
+ searchLines.pop();
44
+ }
45
+ for (let i = 0; i <= originalLines.length - searchLines.length; i++) {
46
+ let matches = true;
47
+ for (let j = 0; j < searchLines.length; j++) {
48
+ const originalTrimmed = originalLines[i + j].trim();
49
+ const searchTrimmed = searchLines[j].trim();
50
+ if (originalTrimmed !== searchTrimmed) {
51
+ matches = false;
52
+ break;
53
+ }
54
+ }
55
+ if (matches) {
56
+ let matchStartIndex = 0;
57
+ for (let k = 0; k < i; k++) {
58
+ matchStartIndex += originalLines[k].length + 1;
59
+ }
60
+ let matchEndIndex = matchStartIndex;
61
+ for (let k = 0; k < searchLines.length; k++) {
62
+ matchEndIndex += originalLines[i + k].length;
63
+ if (k < searchLines.length - 1) {
64
+ matchEndIndex += 1; // Add newline character except for the last line
65
+ }
66
+ }
67
+ yield content.substring(matchStartIndex, matchEndIndex);
68
+ }
69
+ }
70
+ };
71
+ /**
72
+ * Replacer that matches blocks using first and last line anchors with fuzzy middle content
73
+ */
74
+ export const BlockAnchorReplacer = function* (content, find) {
75
+ const originalLines = content.split('\n');
76
+ const searchLines = find.split('\n');
77
+ if (searchLines.length < 3) {
78
+ return;
79
+ }
80
+ if (searchLines[searchLines.length - 1] === '') {
81
+ searchLines.pop();
82
+ }
83
+ const firstLineSearch = searchLines[0].trim();
84
+ const lastLineSearch = searchLines[searchLines.length - 1].trim();
85
+ const searchBlockSize = searchLines.length;
86
+ // Collect all candidate positions where both anchors match
87
+ const candidates = [];
88
+ for (let i = 0; i < originalLines.length; i++) {
89
+ if (originalLines[i].trim() !== firstLineSearch) {
90
+ continue;
91
+ }
92
+ // Look for the matching last line after this first line
93
+ for (let j = i + 2; j < originalLines.length; j++) {
94
+ if (originalLines[j].trim() === lastLineSearch) {
95
+ candidates.push({ startLine: i, endLine: j });
96
+ break; // Only match the first occurrence of the last line
97
+ }
98
+ }
99
+ }
100
+ // Return immediately if no candidates
101
+ if (candidates.length === 0) {
102
+ return;
103
+ }
104
+ // Handle single candidate scenario (using relaxed threshold)
105
+ if (candidates.length === 1) {
106
+ const { startLine, endLine } = candidates[0];
107
+ const actualBlockSize = endLine - startLine + 1;
108
+ let similarity = 0;
109
+ const linesToCheck = Math.min(searchBlockSize - 2, actualBlockSize - 2); // Middle lines only
110
+ if (linesToCheck > 0) {
111
+ for (let j = 1; j < searchBlockSize - 1 && j < actualBlockSize - 1; j++) {
112
+ const originalLine = originalLines[startLine + j].trim();
113
+ const searchLine = searchLines[j].trim();
114
+ const maxLen = Math.max(originalLine.length, searchLine.length);
115
+ if (maxLen === 0) {
116
+ continue;
117
+ }
118
+ const distance = levenshtein(originalLine, searchLine);
119
+ similarity += (1 - distance / maxLen) / linesToCheck;
120
+ // Exit early when threshold is reached
121
+ if (similarity >= SINGLE_CANDIDATE_SIMILARITY_THRESHOLD) {
122
+ break;
123
+ }
124
+ }
125
+ }
126
+ else {
127
+ // No middle lines to compare, just accept based on anchors
128
+ similarity = 1.0;
129
+ }
130
+ if (similarity >= SINGLE_CANDIDATE_SIMILARITY_THRESHOLD) {
131
+ let matchStartIndex = 0;
132
+ for (let k = 0; k < startLine; k++) {
133
+ matchStartIndex += originalLines[k].length + 1;
134
+ }
135
+ let matchEndIndex = matchStartIndex;
136
+ for (let k = startLine; k <= endLine; k++) {
137
+ matchEndIndex += originalLines[k].length;
138
+ if (k < endLine) {
139
+ matchEndIndex += 1; // Add newline character except for the last line
140
+ }
141
+ }
142
+ yield content.substring(matchStartIndex, matchEndIndex);
143
+ }
144
+ return;
145
+ }
146
+ // Calculate similarity for multiple candidates
147
+ let bestMatch = null;
148
+ let maxSimilarity = -1;
149
+ for (const candidate of candidates) {
150
+ const { startLine, endLine } = candidate;
151
+ const actualBlockSize = endLine - startLine + 1;
152
+ let similarity = 0;
153
+ const linesToCheck = Math.min(searchBlockSize - 2, actualBlockSize - 2); // Middle lines only
154
+ if (linesToCheck > 0) {
155
+ for (let j = 1; j < searchBlockSize - 1 && j < actualBlockSize - 1; j++) {
156
+ const originalLine = originalLines[startLine + j].trim();
157
+ const searchLine = searchLines[j].trim();
158
+ const maxLen = Math.max(originalLine.length, searchLine.length);
159
+ if (maxLen === 0) {
160
+ continue;
161
+ }
162
+ const distance = levenshtein(originalLine, searchLine);
163
+ similarity += 1 - distance / maxLen;
164
+ }
165
+ similarity /= linesToCheck; // Average similarity
166
+ }
167
+ else {
168
+ // No middle lines to compare, just accept based on anchors
169
+ similarity = 1.0;
170
+ }
171
+ if (similarity > maxSimilarity) {
172
+ maxSimilarity = similarity;
173
+ bestMatch = candidate;
174
+ }
175
+ }
176
+ // Threshold judgment
177
+ if (maxSimilarity >= MULTIPLE_CANDIDATES_SIMILARITY_THRESHOLD && bestMatch) {
178
+ const { startLine, endLine } = bestMatch;
179
+ let matchStartIndex = 0;
180
+ for (let k = 0; k < startLine; k++) {
181
+ matchStartIndex += originalLines[k].length + 1;
182
+ }
183
+ let matchEndIndex = matchStartIndex;
184
+ for (let k = startLine; k <= endLine; k++) {
185
+ matchEndIndex += originalLines[k].length;
186
+ if (k < endLine) {
187
+ matchEndIndex += 1;
188
+ }
189
+ }
190
+ yield content.substring(matchStartIndex, matchEndIndex);
191
+ }
192
+ };
193
+ /**
194
+ * Replacer that normalizes whitespace before matching
195
+ */
196
+ export const WhitespaceNormalizedReplacer = function* (content, find) {
197
+ const normalizeWhitespace = (text) => text.replace(/\s+/g, ' ').trim();
198
+ const normalizedFind = normalizeWhitespace(find);
199
+ // Handle single line matches
200
+ const lines = content.split('\n');
201
+ for (let i = 0; i < lines.length; i++) {
202
+ const line = lines[i];
203
+ if (normalizeWhitespace(line) === normalizedFind) {
204
+ yield line;
205
+ }
206
+ else {
207
+ // Only check for substring matches if the full line doesn't match
208
+ const normalizedLine = normalizeWhitespace(line);
209
+ if (normalizedLine.includes(normalizedFind)) {
210
+ // Find the actual substring in the original line that matches
211
+ const words = find.trim().split(/\s+/);
212
+ if (words.length > 0) {
213
+ const pattern = words.map((word) => escapeRegExp(word)).join('\\s+');
214
+ try {
215
+ const regex = new RegExp(pattern);
216
+ const match = line.match(regex);
217
+ if (match) {
218
+ yield match[0];
219
+ }
220
+ }
221
+ catch {
222
+ // Invalid regex pattern, skip
223
+ }
224
+ }
225
+ }
226
+ }
227
+ }
228
+ // Handle multi-line matches
229
+ const findLines = find.split('\n');
230
+ if (findLines.length > 1) {
231
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
232
+ const block = lines.slice(i, i + findLines.length);
233
+ if (normalizeWhitespace(block.join('\n')) === normalizedFind) {
234
+ yield block.join('\n');
235
+ }
236
+ }
237
+ }
238
+ };
239
+ /**
240
+ * Replacer that matches content regardless of indentation level
241
+ */
242
+ export const IndentationFlexibleReplacer = function* (content, find) {
243
+ const removeIndentation = (text) => {
244
+ const lines = text.split('\n');
245
+ const nonEmptyLines = lines.filter((line) => line.trim().length > 0);
246
+ if (nonEmptyLines.length === 0)
247
+ return text;
248
+ const minIndent = Math.min(...nonEmptyLines.map((line) => {
249
+ const match = line.match(/^(\s*)/);
250
+ return match ? match[1].length : 0;
251
+ }));
252
+ return lines
253
+ .map((line) => (line.trim().length === 0 ? line : line.slice(minIndent)))
254
+ .join('\n');
255
+ };
256
+ const normalizedFind = removeIndentation(find);
257
+ const contentLines = content.split('\n');
258
+ const findLines = find.split('\n');
259
+ for (let i = 0; i <= contentLines.length - findLines.length; i++) {
260
+ const block = contentLines.slice(i, i + findLines.length).join('\n');
261
+ if (removeIndentation(block) === normalizedFind) {
262
+ yield block;
263
+ }
264
+ }
265
+ };
266
+ /**
267
+ * Replacer that handles escape sequences
268
+ */
269
+ export const EscapeNormalizedReplacer = function* (content, find) {
270
+ const unescapeString = (str) => str.replace(/\\(n|t|r|'|"|`|\\|\n|\$)/g, (match, capturedChar) => {
271
+ switch (capturedChar) {
272
+ case 'n':
273
+ return '\n';
274
+ case 't':
275
+ return '\t';
276
+ case 'r':
277
+ return '\r';
278
+ case "'":
279
+ return "'";
280
+ case '"':
281
+ return '"';
282
+ case '`':
283
+ return '`';
284
+ case '\\':
285
+ return '\\';
286
+ case '\n':
287
+ return '\n';
288
+ case '$':
289
+ return '$';
290
+ default:
291
+ return match;
292
+ }
293
+ });
294
+ const unescapedFind = unescapeString(find);
295
+ // Try direct match with unescaped find string
296
+ if (content.includes(unescapedFind)) {
297
+ yield unescapedFind;
298
+ }
299
+ // Also try finding escaped versions in content that match unescaped find
300
+ const lines = content.split('\n');
301
+ const findLines = unescapedFind.split('\n');
302
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
303
+ const block = lines.slice(i, i + findLines.length).join('\n');
304
+ const unescapedBlock = unescapeString(block);
305
+ if (unescapedBlock === unescapedFind) {
306
+ yield block;
307
+ }
308
+ }
309
+ };
310
+ /**
311
+ * Replacer that yields all exact matches for handling multiple occurrences
312
+ */
313
+ export const MultiOccurrenceReplacer = function* (content, find) {
314
+ // This replacer yields all exact matches, allowing the replace function
315
+ // to handle multiple occurrences based on replaceAll parameter
316
+ let startIndex = 0;
317
+ while (true) {
318
+ const index = content.indexOf(find, startIndex);
319
+ if (index === -1)
320
+ break;
321
+ yield find;
322
+ startIndex = index + find.length;
323
+ }
324
+ };
325
+ /**
326
+ * Replacer that tries to match trimmed versions of the find string
327
+ */
328
+ export const TrimmedBoundaryReplacer = function* (content, find) {
329
+ const trimmedFind = find.trim();
330
+ if (trimmedFind === find) {
331
+ // Already trimmed, no point in trying
332
+ return;
333
+ }
334
+ // Try to find the trimmed version
335
+ if (content.includes(trimmedFind)) {
336
+ yield trimmedFind;
337
+ }
338
+ // Also try finding blocks where trimmed content matches
339
+ const lines = content.split('\n');
340
+ const findLines = find.split('\n');
341
+ for (let i = 0; i <= lines.length - findLines.length; i++) {
342
+ const block = lines.slice(i, i + findLines.length).join('\n');
343
+ if (block.trim() === trimmedFind) {
344
+ yield block;
345
+ }
346
+ }
347
+ };
348
+ /**
349
+ * Replacer that uses first and last lines as context anchors with similarity checking
350
+ */
351
+ export const ContextAwareReplacer = function* (content, find) {
352
+ const findLines = find.split('\n');
353
+ if (findLines.length < 3) {
354
+ // Need at least 3 lines to have meaningful context
355
+ return;
356
+ }
357
+ // Remove trailing empty line if present
358
+ if (findLines[findLines.length - 1] === '') {
359
+ findLines.pop();
360
+ }
361
+ const contentLines = content.split('\n');
362
+ // Extract first and last lines as context anchors
363
+ const firstLine = findLines[0].trim();
364
+ const lastLine = findLines[findLines.length - 1].trim();
365
+ // Find blocks that start and end with the context anchors
366
+ for (let i = 0; i < contentLines.length; i++) {
367
+ if (contentLines[i].trim() !== firstLine)
368
+ continue;
369
+ // Look for the matching last line
370
+ for (let j = i + 2; j < contentLines.length; j++) {
371
+ if (contentLines[j].trim() === lastLine) {
372
+ // Found a potential context block
373
+ const blockLines = contentLines.slice(i, j + 1);
374
+ const block = blockLines.join('\n');
375
+ // Check if the middle content has reasonable similarity
376
+ // (simple heuristic: at least 50% of non-empty lines should match when trimmed)
377
+ if (blockLines.length === findLines.length) {
378
+ let matchingLines = 0;
379
+ let totalNonEmptyLines = 0;
380
+ for (let k = 1; k < blockLines.length - 1; k++) {
381
+ const blockLine = blockLines[k].trim();
382
+ const findLine = findLines[k].trim();
383
+ if (blockLine.length > 0 || findLine.length > 0) {
384
+ totalNonEmptyLines++;
385
+ if (blockLine === findLine) {
386
+ matchingLines++;
387
+ }
388
+ }
389
+ }
390
+ if (totalNonEmptyLines === 0 ||
391
+ matchingLines / totalNonEmptyLines >= 0.5) {
392
+ yield block;
393
+ break; // Only match the first occurrence
394
+ }
395
+ }
396
+ break;
397
+ }
398
+ }
399
+ }
400
+ };
401
+ /**
402
+ * Main fuzzy replace function that tries multiple replacement strategies
403
+ * @param content - The content to search in
404
+ * @param oldString - The string to find and replace
405
+ * @param newString - The replacement string
406
+ * @param replaceAll - Whether to replace all occurrences (default: false)
407
+ * @returns Object with result and occurrences count, or null if no replacement was made
408
+ */
409
+ export function fuzzyReplace(content, oldString, newString, replaceAll = false) {
410
+ if (oldString === newString) {
411
+ return null;
412
+ }
413
+ let notFound = true;
414
+ for (const replacer of [
415
+ SimpleReplacer,
416
+ LineTrimmedReplacer,
417
+ BlockAnchorReplacer,
418
+ WhitespaceNormalizedReplacer,
419
+ IndentationFlexibleReplacer,
420
+ EscapeNormalizedReplacer,
421
+ TrimmedBoundaryReplacer,
422
+ ContextAwareReplacer,
423
+ MultiOccurrenceReplacer,
424
+ ]) {
425
+ for (const search of replacer(content, oldString)) {
426
+ const index = content.indexOf(search);
427
+ if (index === -1)
428
+ continue;
429
+ notFound = false;
430
+ if (replaceAll) {
431
+ const result = content.replaceAll(search, newString);
432
+ const occurrences = content.split(search).length - 1;
433
+ return { result, occurrences };
434
+ }
435
+ const lastIndex = content.lastIndexOf(search);
436
+ if (index !== lastIndex)
437
+ continue;
438
+ const result = content.substring(0, index) +
439
+ newString +
440
+ content.substring(index + search.length);
441
+ return { result, occurrences: 1 };
442
+ }
443
+ }
444
+ if (notFound) {
445
+ return null;
446
+ }
447
+ // Found multiple matches but couldn't replace (ambiguous)
448
+ return null;
449
+ }
450
+ //# sourceMappingURL=fuzzy-replacer.js.map