mcp-code-context 3.5.3 → 3.6.1
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/CHANGELOG.md +96 -3
- package/INSTRUCTIONS.md +274 -0
- package/README.md +59 -6
- package/SECURITY.md +14 -14
- package/dist/src/core/cacheManager.d.ts +48 -0
- package/dist/src/core/cacheManager.js +255 -0
- package/dist/src/core/cacheManager.js.map +1 -0
- package/dist/src/core/engine.d.ts +1 -1
- package/dist/src/core/engine.js +1 -1
- package/dist/src/core/validator.d.ts +1 -1
- package/dist/src/core/validator.js +19 -7
- package/dist/src/core/validator.js.map +1 -1
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.js +227 -21
- package/dist/src/index.js.map +1 -1
- package/dist/src/operations/compress.d.ts +3 -1
- package/dist/src/operations/compress.js +47 -48
- package/dist/src/operations/compress.js.map +1 -1
- package/dist/src/operations/confirmationStore.d.ts +3 -1
- package/dist/src/operations/confirmationStore.js +2 -1
- package/dist/src/operations/confirmationStore.js.map +1 -1
- package/dist/src/operations/read.d.ts +7 -1
- package/dist/src/operations/read.js +115 -64
- package/dist/src/operations/read.js.map +1 -1
- package/dist/src/operations/write.d.ts +3 -2
- package/dist/src/operations/write.js +88 -59
- package/dist/src/operations/write.js.map +1 -1
- package/dist/src/parsers/base.d.ts +1 -1
- package/dist/src/parsers/base.js +1 -1
- package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
- package/dist/src/parsers/dartTreeSitter.js +1 -1
- package/dist/src/parsers/php.d.ts +1 -1
- package/dist/src/parsers/php.js +1 -1
- package/dist/src/parsers/python.d.ts +1 -1
- package/dist/src/parsers/python.js +1 -1
- package/dist/src/parsers/registry.d.ts +1 -1
- package/dist/src/parsers/registry.js +1 -1
- package/dist/src/parsers/typescript.d.ts +1 -1
- package/dist/src/parsers/typescript.js +1 -1
- package/dist/src/utils/auditLogger.d.ts +1 -1
- package/dist/src/utils/auditLogger.js +3 -2
- package/dist/src/utils/auditLogger.js.map +1 -1
- package/dist/src/utils/backupManager.d.ts +30 -9
- package/dist/src/utils/backupManager.js +75 -33
- package/dist/src/utils/backupManager.js.map +1 -1
- package/dist/src/utils/constants.d.ts +13 -2
- package/dist/src/utils/constants.js +21 -2
- package/dist/src/utils/constants.js.map +1 -1
- package/dist/src/utils/diff.d.ts +37 -7
- package/dist/src/utils/diff.js +91 -101
- package/dist/src/utils/diff.js.map +1 -1
- package/dist/src/utils/fileLock.d.ts +25 -50
- package/dist/src/utils/fileLock.js +66 -100
- package/dist/src/utils/fileLock.js.map +1 -1
- package/dist/src/utils/fileWalker.d.ts +28 -0
- package/dist/src/utils/fileWalker.js +57 -0
- package/dist/src/utils/fileWalker.js.map +1 -0
- package/dist/src/utils/fileWatcher.d.ts +23 -0
- package/dist/src/utils/fileWatcher.js +80 -0
- package/dist/src/utils/fileWatcher.js.map +1 -0
- package/dist/src/utils/fuzzySearch.d.ts +22 -0
- package/dist/src/utils/fuzzySearch.js +36 -0
- package/dist/src/utils/fuzzySearch.js.map +1 -0
- package/dist/src/utils/logger.d.ts +19 -0
- package/dist/src/utils/logger.js +50 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/rateLimiter.d.ts +1 -1
- package/dist/src/utils/rateLimiter.js +1 -1
- package/dist/src/utils/safeRegex.d.ts +1 -1
- package/dist/src/utils/safeRegex.js +1 -1
- package/dist/src/utils/searchTools.d.ts +14 -0
- package/dist/src/utils/searchTools.js +94 -0
- package/dist/src/utils/searchTools.js.map +1 -0
- package/dist/src/utils/streaming.d.ts +1 -1
- package/dist/src/utils/streaming.js +1 -1
- package/dist/src/utils/telemetry.d.ts +1 -1
- package/dist/src/utils/telemetry.js +1 -1
- package/llms.txt +5 -5
- package/package.json +28 -10
- package/vitest.config.ts +37 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Confirmation Store - v3.
|
|
2
|
+
* Confirmation Store - v3.6.1
|
|
3
3
|
* Two-phase write: dry-run preview → confirm with token
|
|
4
4
|
* Stores pending write operations with auto-expiry
|
|
5
5
|
*/
|
|
@@ -12,6 +12,7 @@ export interface PendingOperation {
|
|
|
12
12
|
diff: string;
|
|
13
13
|
createdAt: number;
|
|
14
14
|
expiresAt: number;
|
|
15
|
+
originalHash?: string;
|
|
15
16
|
/** Multi-file pending writes for rename operations */
|
|
16
17
|
pendingWrites?: Array<{
|
|
17
18
|
filePath: string;
|
|
@@ -31,6 +32,7 @@ declare class ConfirmationStore {
|
|
|
31
32
|
symbolName?: string;
|
|
32
33
|
newContent: string;
|
|
33
34
|
diff: string;
|
|
35
|
+
originalHash?: string;
|
|
34
36
|
pendingWrites?: Array<{
|
|
35
37
|
filePath: string;
|
|
36
38
|
newContent: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Confirmation Store - v3.
|
|
2
|
+
* Confirmation Store - v3.6.1
|
|
3
3
|
* Two-phase write: dry-run preview → confirm with token
|
|
4
4
|
* Stores pending write operations with auto-expiry
|
|
5
5
|
*/
|
|
@@ -44,6 +44,7 @@ class ConfirmationStore {
|
|
|
44
44
|
diff: params.diff,
|
|
45
45
|
createdAt: now,
|
|
46
46
|
expiresAt: now + EXPIRY_MS,
|
|
47
|
+
originalHash: params.originalHash,
|
|
47
48
|
pendingWrites: params.pendingWrites,
|
|
48
49
|
});
|
|
49
50
|
// Enforce max pending limit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"confirmationStore.js","sourceRoot":"","sources":["../../../src/operations/confirmationStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"confirmationStore.js","sourceRoot":"","sources":["../../../src/operations/confirmationStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read Operations - v3.
|
|
2
|
+
* Read Operations - v3.6.1
|
|
3
3
|
* FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern
|
|
4
4
|
*/
|
|
5
5
|
import { BaseParser } from "../parsers/base.js";
|
|
6
|
+
import { CacheManager } from "../core/cacheManager.js";
|
|
6
7
|
export interface ReadResult {
|
|
7
8
|
success: boolean;
|
|
8
9
|
content?: string;
|
|
@@ -18,6 +19,8 @@ export declare function extractSymbol(params: {
|
|
|
18
19
|
symbolName: string;
|
|
19
20
|
className?: string;
|
|
20
21
|
parser: BaseParser;
|
|
22
|
+
useCache?: boolean;
|
|
23
|
+
cache?: CacheManager | null;
|
|
21
24
|
}): Promise<ReadResult>;
|
|
22
25
|
/**
|
|
23
26
|
* Read specific line ranges from a file
|
|
@@ -40,6 +43,9 @@ export declare function searchPattern(params: {
|
|
|
40
43
|
showContext?: boolean;
|
|
41
44
|
contextLines?: number;
|
|
42
45
|
maxResults?: number;
|
|
46
|
+
startIndex?: number;
|
|
47
|
+
fuzzyMatch?: boolean;
|
|
48
|
+
fuzzyThreshold?: number;
|
|
43
49
|
}): Promise<ReadResult>;
|
|
44
50
|
/**
|
|
45
51
|
* Analyze file dependencies (impact analysis)
|
|
@@ -1,19 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Read Operations - v3.
|
|
2
|
+
* Read Operations - v3.6.1
|
|
3
3
|
* FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "node:fs/promises";
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
-
import
|
|
7
|
+
import * as crypto from "node:crypto";
|
|
8
|
+
import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS, MAX_FILES_SEARCH, OPERATION_TIMEOUT_MS } from "../utils/constants.js";
|
|
8
9
|
import { safeRegexFindFirst, safeRegexMultiFileBatchTest, validateRegexPattern } from "../utils/safeRegex.js";
|
|
10
|
+
import { walkDir } from "../utils/fileWalker.js";
|
|
11
|
+
import { fuzzySearch } from "../utils/fuzzySearch.js";
|
|
12
|
+
import { searchWithNativeTool } from "../utils/searchTools.js";
|
|
13
|
+
const DEFAULT_MAX_RESULTS = 10; // Changed from 50 for pagination
|
|
14
|
+
const SCAN_TIMEOUT_BASE_MS = 1000;
|
|
15
|
+
const SCAN_TIMEOUT_PER_FILE_MS = 10;
|
|
16
|
+
async function getFileHash(filePath) {
|
|
17
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
18
|
+
return crypto.createHash('md5').update(content).digest('hex');
|
|
19
|
+
}
|
|
9
20
|
/**
|
|
10
21
|
* Extract a specific symbol from a file
|
|
11
22
|
*/
|
|
12
23
|
export async function extractSymbol(params) {
|
|
13
24
|
try {
|
|
25
|
+
const cache = params.cache;
|
|
26
|
+
// Try cache first
|
|
27
|
+
if (cache) {
|
|
28
|
+
const hash = await getFileHash(params.filePath);
|
|
29
|
+
const cached = await cache.get(params.filePath, hash);
|
|
30
|
+
if (cached) {
|
|
31
|
+
const symbol = cached.symbols.find(s => s.name === params.symbolName && (!params.className || s.className === params.className));
|
|
32
|
+
if (symbol) {
|
|
33
|
+
const content = await fs.readFile(params.filePath, "utf-8");
|
|
34
|
+
const tree = params.parser.parse(content);
|
|
35
|
+
const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
|
|
36
|
+
if (extracted) {
|
|
37
|
+
return { success: true, content: extracted };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Cache miss - parse file
|
|
14
43
|
const content = await fs.readFile(params.filePath, "utf-8");
|
|
15
44
|
const tree = params.parser.parse(content);
|
|
16
|
-
|
|
45
|
+
const symbols = params.parser.findSymbols(tree);
|
|
46
|
+
// Update cache
|
|
47
|
+
if (cache) {
|
|
48
|
+
const hash = await getFileHash(params.filePath);
|
|
49
|
+
const stat = await fs.stat(params.filePath);
|
|
50
|
+
await cache.set({
|
|
51
|
+
filePath: params.filePath,
|
|
52
|
+
hash,
|
|
53
|
+
symbols,
|
|
54
|
+
lastModified: stat.mtimeMs,
|
|
55
|
+
cachedAt: Date.now(),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
17
58
|
const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
|
|
18
59
|
if (!extracted) {
|
|
19
60
|
const symbols = params.parser.findSymbols(tree);
|
|
@@ -109,8 +150,23 @@ export async function readLines(params) {
|
|
|
109
150
|
*/
|
|
110
151
|
export async function searchPattern(params) {
|
|
111
152
|
try {
|
|
112
|
-
const maxResults = params.maxResults ||
|
|
113
|
-
//
|
|
153
|
+
const maxResults = params.maxResults || DEFAULT_MAX_RESULTS;
|
|
154
|
+
// Try native tools first (ripgrep > ugrep > ag > findstr/grep)
|
|
155
|
+
const nativeResult = await searchWithNativeTool(params.pattern, params.rootDir, maxResults, 10000);
|
|
156
|
+
if (nativeResult && !nativeResult.timedOut) {
|
|
157
|
+
const startIdx = params.startIndex || 0;
|
|
158
|
+
const paginatedMatches = nativeResult.matches.slice(startIdx, startIdx + maxResults);
|
|
159
|
+
const results = paginatedMatches.map(m => ({
|
|
160
|
+
file: m.file,
|
|
161
|
+
line: m.line,
|
|
162
|
+
content: m.content,
|
|
163
|
+
}));
|
|
164
|
+
const totalResults = nativeResult.matches.length;
|
|
165
|
+
const hasMore = startIdx + maxResults < totalResults;
|
|
166
|
+
const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results (via ${nativeResult.tool})${hasMore ? ' (use startIndex to see more)' : ''}`;
|
|
167
|
+
return { success: true, content: JSON.stringify(results, null, 2) + footer };
|
|
168
|
+
}
|
|
169
|
+
// Fallback to regex-based search
|
|
114
170
|
const validation = validateRegexPattern(params.pattern);
|
|
115
171
|
if (!validation.safe) {
|
|
116
172
|
return {
|
|
@@ -123,35 +179,23 @@ export async function searchPattern(params) {
|
|
|
123
179
|
const excludeDirs = params.excludeDirs || EXCLUDE_DIRS;
|
|
124
180
|
// Step 1: Collect all files and their lines
|
|
125
181
|
const fileEntries = [];
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
else if (entry.isFile()) {
|
|
136
|
-
const ext = path.extname(entry.name);
|
|
137
|
-
if (extensions.includes(ext)) {
|
|
138
|
-
const content = await fs.readFile(fullPath, "utf-8");
|
|
139
|
-
fileEntries.push({ path: fullPath, lines: content.split("\n") });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
await walkDir(params.rootDir);
|
|
182
|
+
await walkDir(params.rootDir, {
|
|
183
|
+
extensions,
|
|
184
|
+
excludeDirs,
|
|
185
|
+
onFile: async (fullPath) => {
|
|
186
|
+
const content = await fs.readFile(fullPath, "utf-8");
|
|
187
|
+
fileEntries.push({ path: fullPath, lines: content.split("\n") });
|
|
188
|
+
},
|
|
189
|
+
});
|
|
145
190
|
// CRITICAL: Prevent OOM in large monorepos
|
|
146
|
-
|
|
147
|
-
if (fileEntries.length > MAX_FILES) {
|
|
191
|
+
if (fileEntries.length > MAX_FILES_SEARCH) {
|
|
148
192
|
return {
|
|
149
193
|
success: false,
|
|
150
|
-
error: `Too many files to search (${fileEntries.length}). Maximum: ${
|
|
194
|
+
error: `Too many files to search (${fileEntries.length}). Maximum: ${MAX_FILES_SEARCH}. Try narrowing your search with fileExtensions or excludeDirs.`
|
|
151
195
|
};
|
|
152
196
|
}
|
|
153
197
|
// Step 2: ONE worker for ALL files — eliminates N worker spawns
|
|
154
|
-
const scanTimeout = Math.min(
|
|
198
|
+
const scanTimeout = Math.min(OPERATION_TIMEOUT_MS, SCAN_TIMEOUT_BASE_MS + fileEntries.length * SCAN_TIMEOUT_PER_FILE_MS);
|
|
155
199
|
const batchResult = await safeRegexMultiFileBatchTest(regex, fileEntries, scanTimeout);
|
|
156
200
|
if (batchResult.timedOut) {
|
|
157
201
|
console.warn(`\u26a0\ufe0f Regex scan timed out across ${fileEntries.length} files`);
|
|
@@ -160,20 +204,38 @@ export async function searchPattern(params) {
|
|
|
160
204
|
if (!batchResult.success) {
|
|
161
205
|
return { success: false, error: batchResult.error };
|
|
162
206
|
}
|
|
163
|
-
// Step 3: Collect results
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
207
|
+
// Step 3: Collect results with pagination
|
|
208
|
+
const startIdx = params.startIndex || 0;
|
|
209
|
+
const maxRes = params.maxResults || DEFAULT_MAX_RESULTS;
|
|
210
|
+
const allMatches = batchResult.results;
|
|
211
|
+
// Apply fuzzy filtering if requested
|
|
212
|
+
let filteredMatches = allMatches;
|
|
213
|
+
if (params.fuzzyMatch) {
|
|
214
|
+
const fuzzyThreshold = params.fuzzyThreshold ?? 0.4;
|
|
215
|
+
const searchItems = allMatches.map(m => ({
|
|
216
|
+
...m,
|
|
217
|
+
searchText: `${m.file} ${m.content}`,
|
|
218
|
+
}));
|
|
219
|
+
const fuzzyResults = fuzzySearch(searchItems, params.pattern, {
|
|
220
|
+
threshold: fuzzyThreshold,
|
|
221
|
+
keys: ['searchText'],
|
|
172
222
|
});
|
|
223
|
+
filteredMatches = fuzzyResults.map(r => r.item);
|
|
173
224
|
}
|
|
225
|
+
// Paginate results
|
|
226
|
+
const paginatedMatches = filteredMatches.slice(startIdx, startIdx + maxRes);
|
|
227
|
+
const results = paginatedMatches.map(match => ({
|
|
228
|
+
file: match.file,
|
|
229
|
+
line: match.index + 1,
|
|
230
|
+
content: match.content,
|
|
231
|
+
}));
|
|
232
|
+
// Add pagination footer
|
|
233
|
+
const totalResults = filteredMatches.length;
|
|
234
|
+
const hasMore = startIdx + maxRes < totalResults;
|
|
235
|
+
const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results${hasMore ? ' (use startIndex to see more)' : ''}`;
|
|
174
236
|
return {
|
|
175
237
|
success: true,
|
|
176
|
-
content: JSON.stringify(results, null, 2),
|
|
238
|
+
content: JSON.stringify(results, null, 2) + footer,
|
|
177
239
|
};
|
|
178
240
|
}
|
|
179
241
|
catch (error) {
|
|
@@ -190,33 +252,22 @@ export async function analyzeImpact(params) {
|
|
|
190
252
|
try {
|
|
191
253
|
const dependents = [];
|
|
192
254
|
const targetFile = path.basename(params.filePath);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
// Check for imports/requires
|
|
207
|
-
const importPatterns = [
|
|
208
|
-
new RegExp(`import.*from.*['"].*${targetFile.replace(/\.[^.]+$/, "")}`, "g"),
|
|
209
|
-
new RegExp(`require\\(['"].*${targetFile}`, "g"),
|
|
210
|
-
new RegExp(`from.*${targetFile.replace(/\.[^.]+$/, "")}.*import`, "g"),
|
|
211
|
-
];
|
|
212
|
-
if (importPatterns.some(pattern => pattern.test(content))) {
|
|
213
|
-
dependents.push(fullPath);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
255
|
+
await walkDir(params.rootDir, {
|
|
256
|
+
extensions: SUPPORTED_EXTENSIONS,
|
|
257
|
+
excludeDirs: EXCLUDE_DIRS,
|
|
258
|
+
onFile: async (fullPath) => {
|
|
259
|
+
const content = await fs.readFile(fullPath, "utf-8");
|
|
260
|
+
// Check for imports/requires
|
|
261
|
+
const importPatterns = [
|
|
262
|
+
new RegExp(`import.*from.*['"].*${targetFile.replace(/\.[^.]+$/, "")}`, "g"),
|
|
263
|
+
new RegExp(`require\\(['"].*${targetFile}`, "g"),
|
|
264
|
+
new RegExp(`from.*${targetFile.replace(/\.[^.]+$/, "")}.*import`, "g"),
|
|
265
|
+
];
|
|
266
|
+
if (importPatterns.some(pattern => pattern.test(content))) {
|
|
267
|
+
dependents.push(fullPath);
|
|
216
268
|
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
await walkDir(params.rootDir);
|
|
269
|
+
},
|
|
270
|
+
});
|
|
220
271
|
return {
|
|
221
272
|
success: true,
|
|
222
273
|
content: JSON.stringify({ file: params.filePath, dependents }, null, 2),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Write Operations - v3.
|
|
2
|
+
* Write Operations - v3.6.1
|
|
3
3
|
* FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
|
|
4
4
|
* CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
|
|
5
5
|
*/
|
|
@@ -9,6 +9,7 @@ export interface WriteResult {
|
|
|
9
9
|
newContent?: string;
|
|
10
10
|
error?: string;
|
|
11
11
|
diff?: string;
|
|
12
|
+
originalHash?: string;
|
|
12
13
|
/** Multi-file changes for rename operations (Phase 1 accumulation) */
|
|
13
14
|
pendingWrites?: Array<{
|
|
14
15
|
filePath: string;
|
|
@@ -53,7 +54,7 @@ export declare function insertCode(options: InsertOptions): Promise<WriteResult>
|
|
|
53
54
|
export declare function removeSymbol(options: RemoveOptions): Promise<WriteResult>;
|
|
54
55
|
/**
|
|
55
56
|
* Rename symbol using AST-aware replacement
|
|
56
|
-
* v3.
|
|
57
|
+
* v3.6.1 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk)
|
|
57
58
|
* All changes are accumulated in pendingWrites for Phase 2 confirmation.
|
|
58
59
|
*/
|
|
59
60
|
export declare function renameSymbol(params: {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Write Operations - v3.
|
|
2
|
+
* Write Operations - v3.6.1
|
|
3
3
|
* FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
|
|
4
4
|
* CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from "node:fs/promises";
|
|
7
|
-
import
|
|
7
|
+
import { createHash } from "node:crypto";
|
|
8
8
|
import { SecurityValidator } from "../core/validator.js";
|
|
9
9
|
import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS } from "../utils/constants.js";
|
|
10
10
|
import { generateUnifiedDiff } from "../utils/diff.js";
|
|
11
11
|
import { sanitizeRegexPattern } from "../utils/safeRegex.js";
|
|
12
|
+
import { walkDir } from "../utils/fileWalker.js";
|
|
12
13
|
/**
|
|
13
14
|
* Validate syntax of generated code
|
|
14
15
|
*/
|
|
@@ -37,6 +38,7 @@ export async function replaceSymbol(options) {
|
|
|
37
38
|
}
|
|
38
39
|
try {
|
|
39
40
|
const content = await fs.readFile(validation.resolvedPath, "utf-8");
|
|
41
|
+
const originalHash = createHash('md5').update(content).digest('hex');
|
|
40
42
|
const tree = parser.parse(content);
|
|
41
43
|
// Use AST-based replacement
|
|
42
44
|
let result;
|
|
@@ -59,6 +61,7 @@ export async function replaceSymbol(options) {
|
|
|
59
61
|
success: true,
|
|
60
62
|
newContent: result,
|
|
61
63
|
diff,
|
|
64
|
+
originalHash,
|
|
62
65
|
};
|
|
63
66
|
}
|
|
64
67
|
catch (error) {
|
|
@@ -80,6 +83,7 @@ export async function insertCode(options) {
|
|
|
80
83
|
}
|
|
81
84
|
try {
|
|
82
85
|
const content = await fs.readFile(validation.resolvedPath, "utf-8");
|
|
86
|
+
const originalHash = createHash('md5').update(content).digest('hex');
|
|
83
87
|
const tree = parser.parse(content);
|
|
84
88
|
let insertIndex;
|
|
85
89
|
if (!anchorSymbol) {
|
|
@@ -122,6 +126,7 @@ export async function insertCode(options) {
|
|
|
122
126
|
success: true,
|
|
123
127
|
newContent: result,
|
|
124
128
|
diff,
|
|
129
|
+
originalHash,
|
|
125
130
|
};
|
|
126
131
|
}
|
|
127
132
|
catch (error) {
|
|
@@ -171,23 +176,88 @@ export async function removeSymbol(options) {
|
|
|
171
176
|
};
|
|
172
177
|
}
|
|
173
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Validate rename parameters and return validated paths
|
|
181
|
+
*/
|
|
182
|
+
async function validateRenameParams(params) {
|
|
183
|
+
const validator = new SecurityValidator(params.projectRoot);
|
|
184
|
+
// Validate definition file path
|
|
185
|
+
const defValidation = await validator.validateFilePath(params.filePath);
|
|
186
|
+
if (!defValidation.valid) {
|
|
187
|
+
return { valid: false, error: defValidation.error };
|
|
188
|
+
}
|
|
189
|
+
// Sanitize to prevent regex injection
|
|
190
|
+
const sanitizedOld = sanitizeRegexPattern(params.oldName);
|
|
191
|
+
return {
|
|
192
|
+
valid: true,
|
|
193
|
+
resolvedPath: defValidation.resolvedPath,
|
|
194
|
+
sanitizedOld
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Find all files that depend on the symbol being renamed
|
|
199
|
+
*/
|
|
200
|
+
async function findDependentFiles(rootDir, sanitizedOldName, projectRoot) {
|
|
201
|
+
const dependents = [];
|
|
202
|
+
const validator = new SecurityValidator(projectRoot);
|
|
203
|
+
await walkDir(rootDir, {
|
|
204
|
+
extensions: SUPPORTED_EXTENSIONS,
|
|
205
|
+
excludeDirs: EXCLUDE_DIRS,
|
|
206
|
+
onFile: async (fullPath) => {
|
|
207
|
+
const depValidation = await validator.validateFilePath(fullPath);
|
|
208
|
+
if (!depValidation.valid)
|
|
209
|
+
return;
|
|
210
|
+
const fileContent = await fs.readFile(fullPath, "utf-8");
|
|
211
|
+
const importPatterns = [
|
|
212
|
+
new RegExp(`import.*\\b${sanitizedOldName}\\b`, "g"),
|
|
213
|
+
new RegExp(`from.*\\b${sanitizedOldName}\\b`, "g"),
|
|
214
|
+
new RegExp(`require.*\\b${sanitizedOldName}\\b`, "g"),
|
|
215
|
+
new RegExp(`use.*\\b${sanitizedOldName}\\b`, "g"),
|
|
216
|
+
];
|
|
217
|
+
if (importPatterns.some(p => p.test(fileContent))) {
|
|
218
|
+
dependents.push({ path: fullPath, content: fileContent });
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
return dependents;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Generate all rename changes (definition + dependents) and consolidated diff
|
|
226
|
+
*/
|
|
227
|
+
function generateRenameChanges(oldName, newName, sanitizedOld, definitionPath, definitionContent, definitionNewContent, dependents) {
|
|
228
|
+
const pendingWrites = [];
|
|
229
|
+
const diffParts = [];
|
|
230
|
+
// Accumulate dependent file changes (reuse cached content — no second read)
|
|
231
|
+
for (const dep of dependents) {
|
|
232
|
+
const depNewContent = dep.content.replace(new RegExp(`\\b${sanitizedOld}\\b`, "g"), newName);
|
|
233
|
+
pendingWrites.push({ filePath: dep.path, newContent: depNewContent });
|
|
234
|
+
diffParts.push(`--- ${dep.path}\n${generateDiff(dep.content, depNewContent)}`);
|
|
235
|
+
}
|
|
236
|
+
// Accumulate definition file change
|
|
237
|
+
pendingWrites.push({ filePath: definitionPath, newContent: definitionNewContent });
|
|
238
|
+
diffParts.push(`--- ${definitionPath}\n${generateDiff(definitionContent, definitionNewContent)}`);
|
|
239
|
+
const consolidatedDiff = `Renamed "${oldName}" \u2192 "${newName}" in ${pendingWrites.length} files\n\n${diffParts.join("\n\n")}`;
|
|
240
|
+
return { pendingWrites, diff: consolidatedDiff };
|
|
241
|
+
}
|
|
174
242
|
/**
|
|
175
243
|
* Rename symbol using AST-aware replacement
|
|
176
|
-
* v3.
|
|
244
|
+
* v3.6.1 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk)
|
|
177
245
|
* All changes are accumulated in pendingWrites for Phase 2 confirmation.
|
|
178
246
|
*/
|
|
179
247
|
export async function renameSymbol(params) {
|
|
180
248
|
try {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
249
|
+
// Step 1: Validate parameters
|
|
250
|
+
const validation = await validateRenameParams({
|
|
251
|
+
filePath: params.filePath,
|
|
252
|
+
projectRoot: params.projectRoot,
|
|
253
|
+
oldName: params.oldName,
|
|
254
|
+
});
|
|
255
|
+
if (!validation.valid) {
|
|
256
|
+
return { success: false, error: validation.error };
|
|
186
257
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const content = await fs.readFile(defValidation.resolvedPath, "utf-8");
|
|
258
|
+
const { resolvedPath, sanitizedOld } = validation;
|
|
259
|
+
// Step 2: Rename in definition file using AST
|
|
260
|
+
const content = await fs.readFile(resolvedPath, "utf-8");
|
|
191
261
|
const tree = params.parser.parse(content);
|
|
192
262
|
const symbols = params.parser.findSymbols(tree);
|
|
193
263
|
const targetSymbol = symbols.find(s => s.name === params.oldName);
|
|
@@ -202,55 +272,14 @@ export async function renameSymbol(params) {
|
|
|
202
272
|
content.substring(targetSymbol.startIndex, targetSymbol.endIndex)
|
|
203
273
|
.replace(new RegExp(`\\b${sanitizedOld}\\b`, "g"), params.newName) +
|
|
204
274
|
content.substring(targetSymbol.endIndex);
|
|
205
|
-
// Step
|
|
206
|
-
const dependents =
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
for (const entry of entries) {
|
|
210
|
-
const fullPath = path.join(dir, entry.name);
|
|
211
|
-
if (entry.isDirectory()) {
|
|
212
|
-
if (!EXCLUDE_DIRS.includes(entry.name)) {
|
|
213
|
-
await walkDir(fullPath);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
else if (entry.isFile()) {
|
|
217
|
-
const ext = path.extname(entry.name);
|
|
218
|
-
if (SUPPORTED_EXTENSIONS.includes(ext)) {
|
|
219
|
-
const depValidation = await validator.validateFilePath(fullPath);
|
|
220
|
-
if (!depValidation.valid)
|
|
221
|
-
continue;
|
|
222
|
-
const fileContent = await fs.readFile(fullPath, "utf-8");
|
|
223
|
-
const importPatterns = [
|
|
224
|
-
new RegExp(`import.*\\b${sanitizedOld}\\b`, "g"),
|
|
225
|
-
new RegExp(`from.*\\b${sanitizedOld}\\b`, "g"),
|
|
226
|
-
new RegExp(`require.*\\b${sanitizedOld}\\b`, "g"),
|
|
227
|
-
new RegExp(`use.*\\b${sanitizedOld}\\b`, "g"),
|
|
228
|
-
];
|
|
229
|
-
if (importPatterns.some(p => p.test(fileContent))) {
|
|
230
|
-
dependents.push({ path: fullPath, content: fileContent });
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
await walkDir(params.rootDir);
|
|
237
|
-
// Step 3: Accumulate ALL changes in memory — NO writes in Phase 1
|
|
238
|
-
const pendingWrites = [];
|
|
239
|
-
const diffParts = [];
|
|
240
|
-
// Accumulate dependent file changes (reuse cached content — no second read)
|
|
241
|
-
for (const dep of dependents) {
|
|
242
|
-
const depNewContent = dep.content.replace(new RegExp(`\\b${sanitizedOld}\\b`, "g"), params.newName);
|
|
243
|
-
pendingWrites.push({ filePath: dep.path, newContent: depNewContent });
|
|
244
|
-
diffParts.push(`--- ${dep.path}\n${generateDiff(dep.content, depNewContent)}`);
|
|
245
|
-
}
|
|
246
|
-
// Accumulate definition file change
|
|
247
|
-
pendingWrites.push({ filePath: defValidation.resolvedPath, newContent });
|
|
248
|
-
diffParts.push(`--- ${defValidation.resolvedPath}\n${generateDiff(content, newContent)}`);
|
|
249
|
-
const consolidatedDiff = `Renamed "${params.oldName}" \u2192 "${params.newName}" in ${pendingWrites.length} files\n\n${diffParts.join("\n\n")}`;
|
|
275
|
+
// Step 3: Find dependent files
|
|
276
|
+
const dependents = await findDependentFiles(params.rootDir, sanitizedOld, params.projectRoot);
|
|
277
|
+
// Step 4: Generate all changes and consolidated diff
|
|
278
|
+
const { pendingWrites, diff } = generateRenameChanges(params.oldName, params.newName, sanitizedOld, resolvedPath, content, newContent, dependents);
|
|
250
279
|
return {
|
|
251
280
|
success: true,
|
|
252
281
|
newContent,
|
|
253
|
-
diff
|
|
282
|
+
diff,
|
|
254
283
|
pendingWrites,
|
|
255
284
|
};
|
|
256
285
|
}
|
|
@@ -273,6 +302,6 @@ export async function writeFile(filePath, content) {
|
|
|
273
302
|
* Generate unified diff
|
|
274
303
|
*/
|
|
275
304
|
function generateDiff(oldContent, newContent) {
|
|
276
|
-
return generateUnifiedDiff(oldContent, newContent
|
|
305
|
+
return generateUnifiedDiff(oldContent, newContent);
|
|
277
306
|
}
|
|
278
307
|
//# sourceMappingURL=write.js.map
|