@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.
- package/README.md +6 -14
- package/dist/src/core/client.js +17 -3
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +19 -2
- package/dist/src/core/geminiChat.js +153 -56
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/subagentOrchestrator.js +8 -4
- package/dist/src/core/subagentOrchestrator.js.map +1 -1
- package/dist/src/core/turn.d.ts +6 -2
- package/dist/src/core/turn.js +6 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/debug/ConfigurationManager.js +6 -0
- package/dist/src/debug/ConfigurationManager.js.map +1 -1
- package/dist/src/parsers/TextToolCallParser.d.ts +17 -1
- package/dist/src/parsers/TextToolCallParser.js +540 -186
- package/dist/src/parsers/TextToolCallParser.js.map +1 -1
- package/dist/src/providers/LoggingProviderWrapper.d.ts +1 -0
- package/dist/src/providers/LoggingProviderWrapper.js +89 -4
- package/dist/src/providers/LoggingProviderWrapper.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +5 -6
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +18 -4
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/runtime/AgentRuntimeContext.d.ts +1 -1
- package/dist/src/runtime/createAgentRuntimeContext.js +8 -1
- package/dist/src/runtime/createAgentRuntimeContext.js.map +1 -1
- package/dist/src/services/complexity-analyzer.d.ts +4 -1
- package/dist/src/services/complexity-analyzer.js +73 -21
- package/dist/src/services/complexity-analyzer.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +22 -12
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/settings/SettingsService.js +7 -0
- package/dist/src/settings/SettingsService.js.map +1 -1
- package/dist/src/telemetry/sdk.js +2 -2
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/tools/edit.js +27 -7
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/fuzzy-replacer.d.ts +61 -0
- package/dist/src/tools/fuzzy-replacer.js +450 -0
- package/dist/src/tools/fuzzy-replacer.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +1 -1
- package/dist/src/tools/mcp-tool.js +1 -1
- package/dist/src/tools/tool-registry.js +1 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/utils/editor.js +10 -8
- package/dist/src/utils/editor.js.map +1 -1
- package/package.json +1 -1
package/dist/src/tools/edit.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|