mcp-code-context
Advanced tools
| /** | ||
| * Cache Manager - v3.6.0 | ||
| * WASM SQLite cache with debounced persistence | ||
| */ | ||
| export interface CachedFile { | ||
| filePath: string; | ||
| hash: string; | ||
| symbols: any[]; | ||
| lastModified: number; | ||
| cachedAt: number; | ||
| } | ||
| export declare class CacheManager { | ||
| private db; | ||
| private dbPath; | ||
| private cacheDir; | ||
| private isDirty; | ||
| private persistTimer; | ||
| private initPromise; | ||
| private watcher; | ||
| private projectRoot; | ||
| constructor(projectRoot: string); | ||
| private init; | ||
| private initSchema; | ||
| get(filePath: string, currentHash: string): Promise<CachedFile | null>; | ||
| set(file: CachedFile): Promise<void>; | ||
| invalidate(filePath: string): Promise<void>; | ||
| clear(): Promise<void>; | ||
| getStats(): Promise<{ | ||
| totalEntries: number; | ||
| totalSize: number; | ||
| oldestEntry: number | null; | ||
| newestEntry: number | null; | ||
| }>; | ||
| private schedulePersist; | ||
| private persist; | ||
| private persistSync; | ||
| close(): Promise<void>; | ||
| startWatcher(debounceMs?: number): void; | ||
| stopWatcher(): void; | ||
| getWatcherStatus(): { | ||
| isWatching: boolean; | ||
| watchedFiles: number; | ||
| }; | ||
| } |
| /** | ||
| * Cache Manager - v3.6.0 | ||
| * WASM SQLite cache with debounced persistence | ||
| */ | ||
| import initSqlJs from 'sql.js'; | ||
| import * as fs from 'node:fs/promises'; | ||
| import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; | ||
| import * as path from 'path'; | ||
| import * as crypto from 'node:crypto'; | ||
| import { tmpdir } from 'os'; | ||
| import { logger } from '../utils/logger.js'; | ||
| import { FileWatcher } from '../utils/fileWatcher.js'; | ||
| export class CacheManager { | ||
| db = null; | ||
| dbPath; | ||
| cacheDir; | ||
| isDirty = false; | ||
| persistTimer = null; | ||
| initPromise; | ||
| watcher = null; | ||
| projectRoot; | ||
| constructor(projectRoot) { | ||
| this.projectRoot = projectRoot; | ||
| const projectHash = crypto.createHash('md5') | ||
| .update(projectRoot) | ||
| .digest('hex') | ||
| .substring(0, 8); | ||
| this.cacheDir = path.join(tmpdir(), 'mcp-cache', projectHash); | ||
| this.dbPath = path.join(this.cacheDir, 'cache.db'); | ||
| // Initialize on construction | ||
| this.initPromise = this.init(); | ||
| // Persist on process exit | ||
| process.on('SIGINT', () => this.persistSync()); | ||
| process.on('SIGTERM', () => this.persistSync()); | ||
| process.on('exit', () => this.persistSync()); | ||
| } | ||
| async init() { | ||
| try { | ||
| // Ensure cache directory exists (OS cleanup recovery) | ||
| if (!existsSync(this.cacheDir)) { | ||
| logger.warn({ cacheDir: this.cacheDir }, 'Cache directory deleted by OS, recreating'); | ||
| mkdirSync(this.cacheDir, { recursive: true }); | ||
| } | ||
| const SQL = await initSqlJs(); | ||
| // Load existing database or create new | ||
| if (existsSync(this.dbPath)) { | ||
| const buffer = readFileSync(this.dbPath); | ||
| this.db = new SQL.Database(buffer); | ||
| logger.debug({ dbPath: this.dbPath }, 'Loaded existing cache database'); | ||
| } | ||
| else { | ||
| this.db = new SQL.Database(); | ||
| this.initSchema(); | ||
| logger.info({ dbPath: this.dbPath }, 'Created new cache database'); | ||
| } | ||
| } | ||
| catch (error) { | ||
| logger.error({ error }, 'Failed to initialize cache'); | ||
| throw error; | ||
| } | ||
| } | ||
| initSchema() { | ||
| if (!this.db) | ||
| return; | ||
| this.db.run(` | ||
| CREATE TABLE IF NOT EXISTS file_cache ( | ||
| file_path TEXT PRIMARY KEY, | ||
| hash TEXT NOT NULL, | ||
| symbols TEXT NOT NULL, | ||
| last_modified INTEGER NOT NULL, | ||
| cached_at INTEGER NOT NULL | ||
| ) | ||
| `); | ||
| this.db.run(` | ||
| CREATE INDEX IF NOT EXISTS idx_cached_at ON file_cache(cached_at) | ||
| `); | ||
| } | ||
| async get(filePath, currentHash) { | ||
| await this.initPromise; | ||
| if (!this.db) | ||
| return null; | ||
| try { | ||
| const stmt = this.db.prepare('SELECT * FROM file_cache WHERE file_path = ? AND hash = ?'); | ||
| stmt.bind([filePath, currentHash]); | ||
| if (stmt.step()) { | ||
| const row = stmt.getAsObject(); | ||
| stmt.free(); | ||
| return { | ||
| filePath: row.file_path, | ||
| hash: row.hash, | ||
| symbols: JSON.parse(row.symbols), | ||
| lastModified: row.last_modified, | ||
| cachedAt: row.cached_at, | ||
| }; | ||
| } | ||
| stmt.free(); | ||
| return null; | ||
| } | ||
| catch (error) { | ||
| logger.error({ error, filePath }, 'Cache get failed'); | ||
| return null; | ||
| } | ||
| } | ||
| async set(file) { | ||
| await this.initPromise; | ||
| if (!this.db) | ||
| return; | ||
| try { | ||
| this.db.run(`INSERT OR REPLACE INTO file_cache | ||
| (file_path, hash, symbols, last_modified, cached_at) | ||
| VALUES (?, ?, ?, ?, ?)`, [ | ||
| file.filePath, | ||
| file.hash, | ||
| JSON.stringify(file.symbols), | ||
| file.lastModified, | ||
| file.cachedAt, | ||
| ]); | ||
| this.isDirty = true; | ||
| this.schedulePersist(); | ||
| } | ||
| catch (error) { | ||
| logger.error({ error, filePath: file.filePath }, 'Cache set failed'); | ||
| } | ||
| } | ||
| async invalidate(filePath) { | ||
| await this.initPromise; | ||
| if (!this.db) | ||
| return; | ||
| try { | ||
| this.db.run('DELETE FROM file_cache WHERE file_path = ?', [filePath]); | ||
| this.isDirty = true; | ||
| this.schedulePersist(); | ||
| } | ||
| catch (error) { | ||
| logger.error({ error, filePath }, 'Cache invalidate failed'); | ||
| } | ||
| } | ||
| async clear() { | ||
| await this.initPromise; | ||
| if (!this.db) | ||
| return; | ||
| try { | ||
| this.db.run('DELETE FROM file_cache'); | ||
| this.isDirty = true; | ||
| await this.persist(); | ||
| logger.info('Cache cleared'); | ||
| } | ||
| catch (error) { | ||
| logger.error({ error }, 'Cache clear failed'); | ||
| } | ||
| } | ||
| async getStats() { | ||
| await this.initPromise; | ||
| if (!this.db) { | ||
| return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null }; | ||
| } | ||
| try { | ||
| const stmt = this.db.prepare(` | ||
| SELECT | ||
| COUNT(*) as count, | ||
| MIN(cached_at) as oldest, | ||
| MAX(cached_at) as newest | ||
| FROM file_cache | ||
| `); | ||
| stmt.step(); | ||
| const row = stmt.getAsObject(); | ||
| stmt.free(); | ||
| const totalSize = existsSync(this.dbPath) | ||
| ? (await fs.stat(this.dbPath)).size | ||
| : 0; | ||
| return { | ||
| totalEntries: row.count, | ||
| totalSize, | ||
| oldestEntry: row.oldest, | ||
| newestEntry: row.newest, | ||
| }; | ||
| } | ||
| catch (error) { | ||
| logger.error({ error }, 'Failed to get cache stats'); | ||
| return { totalEntries: 0, totalSize: 0, oldestEntry: null, newestEntry: null }; | ||
| } | ||
| } | ||
| schedulePersist() { | ||
| if (this.persistTimer) | ||
| clearTimeout(this.persistTimer); | ||
| this.persistTimer = setTimeout(() => this.persist(), 5000); | ||
| } | ||
| async persist() { | ||
| if (!this.isDirty || !this.db) | ||
| return; | ||
| try { | ||
| const data = this.db.export(); | ||
| const buffer = Buffer.from(data); | ||
| await fs.writeFile(this.dbPath, buffer); | ||
| this.isDirty = false; | ||
| logger.debug({ dbPath: this.dbPath, size: buffer.length }, 'Cache persisted'); | ||
| } | ||
| catch (error) { | ||
| logger.error({ error }, 'Failed to persist cache'); | ||
| } | ||
| } | ||
| persistSync() { | ||
| if (!this.isDirty || !this.db) | ||
| return; | ||
| try { | ||
| const data = this.db.export(); | ||
| const buffer = Buffer.from(data); | ||
| writeFileSync(this.dbPath, buffer); | ||
| this.isDirty = false; | ||
| } | ||
| catch (error) { | ||
| console.error('Failed to persist cache on exit:', error); | ||
| } | ||
| } | ||
| async close() { | ||
| if (this.watcher) { | ||
| this.watcher.stop(); | ||
| this.watcher = null; | ||
| } | ||
| if (this.persistTimer) { | ||
| clearTimeout(this.persistTimer); | ||
| this.persistTimer = null; | ||
| } | ||
| await this.persist(); | ||
| if (this.db) { | ||
| this.db.close(); | ||
| this.db = null; | ||
| } | ||
| } | ||
| startWatcher(debounceMs = 500) { | ||
| if (this.watcher) { | ||
| logger.warn({ projectRoot: this.projectRoot }, 'Watcher already started'); | ||
| return; | ||
| } | ||
| this.watcher = new FileWatcher({ | ||
| debounceMs, | ||
| ignored: [], | ||
| onFileChange: async (filePath) => { | ||
| await this.invalidate(filePath); | ||
| logger.debug({ filePath }, 'Cache invalidated by file watcher'); | ||
| }, | ||
| }); | ||
| this.watcher.start(this.projectRoot); | ||
| } | ||
| stopWatcher() { | ||
| if (this.watcher) { | ||
| this.watcher.stop(); | ||
| this.watcher = null; | ||
| } | ||
| } | ||
| getWatcherStatus() { | ||
| return this.watcher ? this.watcher.getStatus() : { isWatching: false, watchedFiles: 0 }; | ||
| } | ||
| } | ||
| //# sourceMappingURL=cacheManager.js.map |
| {"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/core/cacheManager.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * File Walker Utility - v3.6.0 | ||
| * Centralized directory traversal with filtering | ||
| */ | ||
| export interface WalkOptions { | ||
| /** Extensions to include (e.g., [".ts", ".js"]) */ | ||
| extensions?: readonly string[]; | ||
| /** Directories to exclude (e.g., ["node_modules", ".git"]) */ | ||
| excludeDirs?: readonly string[]; | ||
| /** Maximum files to collect (prevents OOM) */ | ||
| maxFiles?: number; | ||
| /** Maximum total size in bytes (prevents OOM) */ | ||
| maxSize?: number; | ||
| /** Callback for each file found */ | ||
| onFile?: (filePath: string) => Promise<void> | void; | ||
| } | ||
| /** | ||
| * Recursively walks a directory tree with filtering options. | ||
| * Supports extension filtering, directory exclusion, and size/count limits. | ||
| * | ||
| * @param dir - Root directory to walk | ||
| * @param options - Filtering and callback options | ||
| * @param state - Internal state for tracking counts (do not pass manually) | ||
| */ | ||
| export declare function walkDir(dir: string, options?: WalkOptions, state?: { | ||
| fileCount: number; | ||
| totalSize: number; | ||
| }): Promise<void>; |
| /** | ||
| * File Walker Utility - v3.6.0 | ||
| * Centralized directory traversal with filtering | ||
| */ | ||
| import * as fs from "node:fs/promises"; | ||
| import * as path from "node:path"; | ||
| /** | ||
| * Recursively walks a directory tree with filtering options. | ||
| * Supports extension filtering, directory exclusion, and size/count limits. | ||
| * | ||
| * @param dir - Root directory to walk | ||
| * @param options - Filtering and callback options | ||
| * @param state - Internal state for tracking counts (do not pass manually) | ||
| */ | ||
| export async function walkDir(dir, options = {}, state = { fileCount: 0, totalSize: 0 }) { | ||
| // Check limits | ||
| if (options.maxFiles && state.fileCount >= options.maxFiles) | ||
| return; | ||
| if (options.maxSize && state.totalSize >= options.maxSize) | ||
| return; | ||
| const entries = await fs.readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| // Check limits again in loop | ||
| if (options.maxFiles && state.fileCount >= options.maxFiles) | ||
| break; | ||
| if (options.maxSize && state.totalSize >= options.maxSize) | ||
| break; | ||
| const fullPath = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| // Recurse if not excluded | ||
| if (!options.excludeDirs || !options.excludeDirs.includes(entry.name)) { | ||
| await walkDir(fullPath, options, state); | ||
| } | ||
| } | ||
| else if (entry.isFile()) { | ||
| // Check extension filter | ||
| if (options.extensions) { | ||
| const ext = path.extname(entry.name); | ||
| if (!options.extensions.includes(ext)) | ||
| continue; | ||
| } | ||
| // Update size tracking | ||
| if (options.maxSize) { | ||
| const stat = await fs.stat(fullPath); | ||
| if (state.totalSize + stat.size > options.maxSize) | ||
| break; | ||
| state.totalSize += stat.size; | ||
| } | ||
| // Increment count and invoke callback | ||
| state.fileCount++; | ||
| if (options.onFile) { | ||
| await options.onFile(fullPath); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| //# sourceMappingURL=fileWalker.js.map |
| {"version":3,"file":"fileWalker.js","sourceRoot":"","sources":["../../../src/utils/fileWalker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAelC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAW,EACX,UAAuB,EAAE,EACzB,QAAkD,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;IAEhF,eAAe;IACf,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO;IACpE,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO;IAElE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,6BAA6B;QAC7B,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM;QACnE,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM;QAEjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,0BAA0B;YAC1B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,MAAM,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,yBAAyB;YACzB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,SAAS;YAClD,CAAC;YAED,uBAAuB;YACvB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO;oBAAE,MAAM;gBACzD,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC;YAC/B,CAAC;YAED,sCAAsC;YACtC,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"} |
| /** | ||
| * File Watcher - v3.6.0 | ||
| * Auto-invalidate cache on file changes with chokidar | ||
| */ | ||
| export interface FileWatcherConfig { | ||
| debounceMs: number; | ||
| ignored: string[]; | ||
| onFileChange: (filePath: string) => void | Promise<void>; | ||
| } | ||
| export declare class FileWatcher { | ||
| private watcher; | ||
| private config; | ||
| private debounceTimers; | ||
| private isWatching; | ||
| constructor(config: FileWatcherConfig); | ||
| start(rootDir: string): void; | ||
| stop(): void; | ||
| getStatus(): { | ||
| isWatching: boolean; | ||
| watchedFiles: number; | ||
| }; | ||
| private handleChange; | ||
| } |
| /** | ||
| * File Watcher - v3.6.0 | ||
| * Auto-invalidate cache on file changes with chokidar | ||
| */ | ||
| import chokidar from 'chokidar'; | ||
| import { logger } from './logger.js'; | ||
| import { EXCLUDE_DIRS } from './constants.js'; | ||
| export class FileWatcher { | ||
| watcher = null; | ||
| config; | ||
| debounceTimers = new Map(); | ||
| isWatching = false; | ||
| constructor(config) { | ||
| this.config = config; | ||
| } | ||
| start(rootDir) { | ||
| if (this.isWatching) { | ||
| logger.warn({ rootDir }, 'File watcher already running'); | ||
| return; | ||
| } | ||
| this.watcher = chokidar.watch(rootDir, { | ||
| ignored: [ | ||
| /(^|[\/\\])\../, // Hidden files | ||
| ...EXCLUDE_DIRS.map(dir => `**/${dir}/**`), | ||
| ...this.config.ignored, | ||
| ], | ||
| persistent: true, | ||
| ignoreInitial: true, | ||
| awaitWriteFinish: { | ||
| stabilityThreshold: 500, | ||
| pollInterval: 100, | ||
| }, | ||
| }); | ||
| this.watcher | ||
| .on('change', (filePath) => this.handleChange(filePath)) | ||
| .on('unlink', (filePath) => this.handleChange(filePath)) | ||
| .on('error', (error) => logger.error({ error }, 'File watcher error')); | ||
| this.isWatching = true; | ||
| logger.info({ rootDir, debounceMs: this.config.debounceMs }, 'File watcher started'); | ||
| } | ||
| stop() { | ||
| if (this.watcher) { | ||
| this.watcher.close(); | ||
| this.watcher = null; | ||
| } | ||
| // Clear all pending debounce timers | ||
| for (const timer of this.debounceTimers.values()) { | ||
| clearTimeout(timer); | ||
| } | ||
| this.debounceTimers.clear(); | ||
| this.isWatching = false; | ||
| logger.info('File watcher stopped'); | ||
| } | ||
| getStatus() { | ||
| return { | ||
| isWatching: this.isWatching, | ||
| watchedFiles: this.watcher ? Object.keys(this.watcher.getWatched()).length : 0, | ||
| }; | ||
| } | ||
| handleChange(filePath) { | ||
| // Clear existing timer for this file | ||
| const existingTimer = this.debounceTimers.get(filePath); | ||
| if (existingTimer) { | ||
| clearTimeout(existingTimer); | ||
| } | ||
| // Set new debounced timer | ||
| const timer = setTimeout(() => { | ||
| this.debounceTimers.delete(filePath); | ||
| try { | ||
| this.config.onFileChange(filePath); | ||
| logger.debug({ filePath }, 'File change processed'); | ||
| } | ||
| catch (error) { | ||
| logger.error({ error, filePath }, 'Error processing file change'); | ||
| } | ||
| }, this.config.debounceMs); | ||
| this.debounceTimers.set(filePath, timer); | ||
| } | ||
| } | ||
| //# sourceMappingURL=fileWatcher.js.map |
| {"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../../src/utils/fileWatcher.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Fuzzy Search - v3.6.0 | ||
| * Typo-tolerant search with fuse.js | ||
| */ | ||
| export interface FuzzySearchOptions { | ||
| threshold?: number; | ||
| keys?: string[]; | ||
| includeScore?: boolean; | ||
| } | ||
| export interface FuzzySearchResult<T> { | ||
| item: T; | ||
| score?: number; | ||
| matches?: readonly any[]; | ||
| } | ||
| /** | ||
| * Perform fuzzy search on array of items | ||
| */ | ||
| export declare function fuzzySearch<T>(items: T[], query: string, options?: FuzzySearchOptions): FuzzySearchResult<T>[]; | ||
| /** | ||
| * Fuzzy match a single string against a query | ||
| */ | ||
| export declare function fuzzyMatch(text: string, query: string, threshold?: number): boolean; |
| /** | ||
| * Fuzzy Search - v3.6.0 | ||
| * Typo-tolerant search with fuse.js | ||
| */ | ||
| import Fuse from 'fuse.js'; | ||
| /** | ||
| * Perform fuzzy search on array of items | ||
| */ | ||
| export function fuzzySearch(items, query, options = {}) { | ||
| const fuse = new Fuse(items, { | ||
| threshold: options.threshold ?? 0.4, | ||
| keys: options.keys, | ||
| includeScore: options.includeScore ?? true, | ||
| includeMatches: true, | ||
| minMatchCharLength: 2, | ||
| ignoreLocation: true, | ||
| }); | ||
| const results = fuse.search(query); | ||
| return results.map(result => ({ | ||
| item: result.item, | ||
| score: result.score, | ||
| matches: result.matches, | ||
| })); | ||
| } | ||
| /** | ||
| * Fuzzy match a single string against a query | ||
| */ | ||
| export function fuzzyMatch(text, query, threshold = 0.4) { | ||
| const fuse = new Fuse([text], { | ||
| threshold, | ||
| includeScore: true, | ||
| }); | ||
| const results = fuse.search(query); | ||
| return results.length > 0; | ||
| } | ||
| //# sourceMappingURL=fuzzySearch.js.map |
| {"version":3,"file":"fuzzySearch.js","sourceRoot":"","sources":["../../../src/utils/fuzzySearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,SAAS,CAAC;AAc3B;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAU,EACV,KAAa,EACb,UAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;QAC3B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;QACnC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC1C,cAAc,EAAE,IAAI;QACpB,kBAAkB,EAAE,CAAC;QACrB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,KAAa,EAAE,YAAoB,GAAG;IAC7E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;QAC5B,SAAS;QACT,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,CAAC"} |
| /** | ||
| * Logger - v3.6.0 | ||
| * Structured logging with pino (JSON to stderr, MCP-safe) | ||
| */ | ||
| import pino from 'pino'; | ||
| /** | ||
| * Create pino logger instance | ||
| * - Development: Pretty print to stderr | ||
| * - Production: JSON to stderr (MCP-safe) | ||
| */ | ||
| export declare const logger: pino.Logger<never, boolean>; | ||
| /** | ||
| * Create child logger with context | ||
| */ | ||
| export declare function createLogger(context: Record<string, any>): pino.Logger<never, boolean>; | ||
| /** | ||
| * Log directory path (for audit logs if needed) | ||
| */ | ||
| export declare const LOG_DIR: string; |
| /** | ||
| * Logger - v3.6.0 | ||
| * Structured logging with pino (JSON to stderr, MCP-safe) | ||
| */ | ||
| import pino from 'pino'; | ||
| import { tmpdir } from 'os'; | ||
| import path from 'path'; | ||
| import crypto from 'crypto'; | ||
| const isDevelopment = process.env.NODE_ENV !== 'production'; | ||
| // Calculate project-specific log directory in OS temp | ||
| const projectHash = crypto.createHash('md5') | ||
| .update(process.cwd()) | ||
| .digest('hex') | ||
| .substring(0, 8); | ||
| const logDir = path.join(tmpdir(), 'mcp-logs', projectHash); | ||
| /** | ||
| * Create pino logger instance | ||
| * - Development: Pretty print to stderr | ||
| * - Production: JSON to stderr (MCP-safe) | ||
| */ | ||
| export const logger = pino({ | ||
| level: process.env.LOG_LEVEL || (isDevelopment ? 'debug' : 'info'), | ||
| transport: isDevelopment | ||
| ? { | ||
| target: 'pino-pretty', | ||
| options: { | ||
| colorize: true, | ||
| translateTime: 'HH:MM:ss', | ||
| ignore: 'pid,hostname', | ||
| destination: 2, // stderr | ||
| }, | ||
| } | ||
| : undefined, | ||
| base: { | ||
| pid: process.pid, | ||
| service: 'mcp-code-context', | ||
| }, | ||
| timestamp: pino.stdTimeFunctions.isoTime, | ||
| }); | ||
| /** | ||
| * Create child logger with context | ||
| */ | ||
| export function createLogger(context) { | ||
| return logger.child(context); | ||
| } | ||
| /** | ||
| * Log directory path (for audit logs if needed) | ||
| */ | ||
| export const LOG_DIR = logDir; | ||
| //# sourceMappingURL=logger.js.map |
| {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;AAE5D,sDAAsD;AACtD,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;KACzC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;KACrB,MAAM,CAAC,KAAK,CAAC;KACb,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,SAAS,EAAE,aAAa;QACtB,CAAC,CAAC;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,UAAU;gBACzB,MAAM,EAAE,cAAc;gBACtB,WAAW,EAAE,CAAC,EAAE,SAAS;aAC1B;SACF;QACH,CAAC,CAAC,SAAS;IACb,IAAI,EAAE;QACJ,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,kBAAkB;KAC5B;IACD,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;CACzC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC"} |
| /** | ||
| * Search Tools - Native tool detection (ripgrep > ugrep > ag > findstr/grep) | ||
| * Uses spawn + readline to avoid buffer overflow on large outputs | ||
| */ | ||
| export interface SearchToolResult { | ||
| tool: string; | ||
| matches: Array<{ | ||
| file: string; | ||
| line: number; | ||
| content: string; | ||
| }>; | ||
| timedOut: boolean; | ||
| } | ||
| export declare function searchWithNativeTool(pattern: string, dir: string, maxResults?: number, timeoutMs?: number): Promise<SearchToolResult | null>; |
| /** | ||
| * Search Tools - Native tool detection (ripgrep > ugrep > ag > findstr/grep) | ||
| * Uses spawn + readline to avoid buffer overflow on large outputs | ||
| */ | ||
| import { spawn } from 'child_process'; | ||
| import { createInterface } from 'readline'; | ||
| import { logger } from './logger.js'; | ||
| const SEARCH_TOOLS = [ | ||
| { name: 'rg', args: (pattern, dir) => ['--json', pattern, dir] }, | ||
| { name: 'ugrep', args: (pattern, dir) => ['--json', pattern, dir] }, | ||
| { name: 'ag', args: (pattern, dir) => ['--json', pattern, dir] }, | ||
| { name: 'findstr', args: (pattern, dir) => ['/S', '/N', pattern, `${dir}\\*`] }, | ||
| { name: 'grep', args: (pattern, dir) => ['-rn', pattern, dir] }, | ||
| ]; | ||
| async function detectTool() { | ||
| for (const tool of SEARCH_TOOLS) { | ||
| try { | ||
| const proc = spawn(tool.name, ['--version'], { stdio: 'ignore' }); | ||
| const exitCode = await new Promise((resolve) => { | ||
| proc.on('close', (code) => resolve(code ?? 1)); | ||
| proc.on('error', () => resolve(1)); | ||
| }); | ||
| if (exitCode === 0) { | ||
| logger.debug({ tool: tool.name }, 'Detected search tool'); | ||
| return tool.name; | ||
| } | ||
| } | ||
| catch { | ||
| continue; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| export async function searchWithNativeTool(pattern, dir, maxResults = 10, timeoutMs = 30000) { | ||
| const tool = await detectTool(); | ||
| if (!tool) | ||
| return null; | ||
| const toolConfig = SEARCH_TOOLS.find((t) => t.name === tool); | ||
| if (!toolConfig) | ||
| return null; | ||
| // Pass -m flag to ripgrep/ugrep for OS-level limit | ||
| let args = toolConfig.args(pattern, dir); | ||
| if (tool === 'rg' || tool === 'ugrep') { | ||
| args = ['--max-count', String(maxResults), ...args]; | ||
| } | ||
| const proc = spawn(tool, args); | ||
| const matches = []; | ||
| let timedOut = false; | ||
| const timeout = setTimeout(() => { | ||
| timedOut = true; | ||
| proc.kill(); | ||
| }, timeoutMs); | ||
| const rl = createInterface({ input: proc.stdout }); | ||
| for await (const line of rl) { | ||
| if (timedOut) | ||
| break; | ||
| // CRITICAL: Stop collecting once maxResults is reached to prevent OOM | ||
| if (matches.length >= maxResults) { | ||
| proc.kill(); | ||
| break; | ||
| } | ||
| // Parse JSON output (rg/ugrep/ag) or plain text (findstr/grep) | ||
| if (tool === 'rg' || tool === 'ugrep' || tool === 'ag') { | ||
| try { | ||
| const json = JSON.parse(line); | ||
| if (json.type === 'match') { | ||
| matches.push({ | ||
| file: json.data.path.text, | ||
| line: json.data.line_number, | ||
| content: json.data.lines.text.trim(), | ||
| }); | ||
| } | ||
| } | ||
| catch { | ||
| continue; | ||
| } | ||
| } | ||
| else { | ||
| // findstr/grep: "file:line:content" | ||
| const match = line.match(/^(.+?):(\d+):(.+)$/); | ||
| if (match) { | ||
| matches.push({ | ||
| file: match[1], | ||
| line: parseInt(match[2], 10), | ||
| content: match[3].trim(), | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| clearTimeout(timeout); | ||
| await new Promise((resolve) => proc.on('close', () => resolve())); | ||
| return { tool, matches, timedOut }; | ||
| } | ||
| //# sourceMappingURL=searchTools.js.map |
| {"version":3,"file":"searchTools.js","sourceRoot":"","sources":["../../../src/utils/searchTools.ts"],"names":[],"mappings":"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"} |
+274
| # Instructions for AI Agents Using mcp-code-context | ||
| ## ๐ฏ Quick Start | ||
| This MCP server provides **surgical code editing** with Tree-sitter AST parsing. Use it to read and modify code with precision. | ||
| --- | ||
| ## ๐ Essential Reading Workflow | ||
| ### 1. Start with Repository Map | ||
| ``` | ||
| @mcp-code-context/get_semantic_repo_map | ||
| directoryPath: /absolute/path/to/project | ||
| projectRoot: /absolute/path/to/project | ||
| format: xml | ||
| ``` | ||
| **Why**: Get architectural overview before diving into files. Saves 80% tokens vs reading raw files. | ||
| ### 2. Extract Specific Symbols | ||
| ``` | ||
| @mcp-code-context/read_file_surgical | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| symbolName: functionName | ||
| ``` | ||
| **Why**: Read only what you need. If symbol not found, tool suggests available symbols. | ||
| ### 3. Check Impact Before Editing | ||
| ``` | ||
| @mcp-code-context/analyze_impact | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| ``` | ||
| **Why**: Know which files depend on what you're about to change. | ||
| --- | ||
| ## โ๏ธ Essential Writing Workflow | ||
| ### Two-Phase Pattern (ALWAYS FOLLOW) | ||
| **Phase 1: Preview** | ||
| ``` | ||
| @mcp-code-context/write_file_surgical | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| symbolName: myFunction | ||
| newContent: "function myFunction() { return 42; }" | ||
| ``` | ||
| **Result**: Returns diff + confirmationToken | ||
| **Phase 2: Apply** | ||
| ``` | ||
| @mcp-code-context/write_file_surgical | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| symbolName: myFunction | ||
| newContent: "function myFunction() { return 42; }" | ||
| confirm: true | ||
| confirmationToken: "TOKEN_FROM_PHASE_1" | ||
| ``` | ||
| **Result**: โ Success. Changes applied to 1 file(s). | ||
| --- | ||
| ## ๐จ Critical Rules | ||
| ### 1. **ALWAYS Use projectRoot** | ||
| Every tool requires `projectRoot` for security. Use the project's root directory. | ||
| ### 2. **NEVER Skip Phase 1** | ||
| Always preview diffs before applying. Tokens are stored in memory and expire on server restart. | ||
| ### 3. **Use Surgical Tools, Not Full File Rewrites** | ||
| โ **Bad**: Read entire file, modify, write entire file | ||
| โ **Good**: Use `write_file_surgical` to replace only the target symbol | ||
| ### 4. **Check Dependencies First** | ||
| Before removing or renaming symbols, use `analyze_impact` to avoid breaking imports. | ||
| ### 5. **Provide Complete Symbol Code** | ||
| When using `write_file_surgical`, include the full function/method signature + body: | ||
| ```typescript | ||
| // โ GOOD | ||
| newContent: "function hello(name: string): string {\n return `Hello, ${name}`;\n}" | ||
| // โ BAD (incomplete) | ||
| newContent: "return `Hello, ${name}`;" | ||
| ``` | ||
| --- | ||
| ## ๐ Advanced Search | ||
| ### Pattern Search | ||
| ``` | ||
| @mcp-code-context/search_code_pattern | ||
| rootDir: /project/root | ||
| projectRoot: /project/root | ||
| pattern: "myFunction" | ||
| fileExtensions: [".ts", ".js"] | ||
| maxResults: 10 | ||
| ``` | ||
| ### Fuzzy Search (v3.6.0) | ||
| ``` | ||
| @mcp-code-context/search_code_pattern | ||
| rootDir: /project/root | ||
| projectRoot: /project/root | ||
| pattern: "authUser" | ||
| fuzzyMatch: true | ||
| fuzzyThreshold: 0.6 | ||
| maxResults: 5 | ||
| ``` | ||
| **Finds**: `authenticateUser`, `authorizeUser`, etc. | ||
| --- | ||
| ## ๐ก๏ธ Safety Features | ||
| ### Automatic Backups | ||
| Every write creates a backup. Rollback if needed: | ||
| ``` | ||
| @mcp-code-context/rollback_file | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| ``` | ||
| ### Cache Management | ||
| ``` | ||
| @mcp-code-context/get_cache_stats | ||
| projectRoot: /project/root | ||
| @mcp-code-context/clear_cache | ||
| projectRoot: /project/root | ||
| ``` | ||
| --- | ||
| ## ๐ก Pro Tips | ||
| ### 1. **Use className for Method Scoping** | ||
| When a file has multiple classes with same method name: | ||
| ``` | ||
| @mcp-code-context/read_file_surgical | ||
| filePath: /path/to/file.ts | ||
| symbolName: render | ||
| className: MyComponent | ||
| ``` | ||
| ### 2. **Batch Operations with rename_symbol** | ||
| Rename across entire codebase in one operation: | ||
| ``` | ||
| @mcp-code-context/rename_symbol | ||
| filePath: /path/to/definition.ts | ||
| projectRoot: /project/root | ||
| oldName: oldFunction | ||
| newName: newFunction | ||
| ``` | ||
| ### 3. **Insert New Code Precisely** | ||
| ``` | ||
| @mcp-code-context/insert_symbol | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| code: "private newMethod() { }" | ||
| anchorSymbol: existingMethod | ||
| position: after | ||
| ``` | ||
| ### 4. **Read Specific Lines Only** | ||
| ``` | ||
| @mcp-code-context/read_file_lines | ||
| filePath: /path/to/file.ts | ||
| projectRoot: /project/root | ||
| startLine: 100 | ||
| endLine: 120 | ||
| ``` | ||
| --- | ||
| ## โ ๏ธ Common Mistakes | ||
| ### โ Mistake 1: Forgetting projectRoot | ||
| ``` | ||
| // WRONG | ||
| @mcp-code-context/read_file_surgical | ||
| filePath: /path/to/file.ts | ||
| ``` | ||
| ### โ Mistake 2: Skipping Phase 1 | ||
| ``` | ||
| // WRONG - No preview | ||
| @mcp-code-context/write_file_surgical | ||
| confirm: true | ||
| confirmationToken: "FAKE_TOKEN" | ||
| ``` | ||
| ### โ Mistake 3: Incomplete Symbol Code | ||
| ``` | ||
| // WRONG - Missing function signature | ||
| newContent: "{ return 42; }" | ||
| ``` | ||
| ### โ Mistake 4: Not Checking Impact | ||
| ``` | ||
| // WRONG - Removing without checking dependencies | ||
| @mcp-code-context/remove_symbol | ||
| symbolName: importantFunction | ||
| force: true | ||
| ``` | ||
| --- | ||
| ## ๐ Performance Tips | ||
| 1. **Use get_semantic_repo_map first** - 80% token savings | ||
| 2. **Extract symbols, not full files** - 90% token savings | ||
| 3. **Use fuzzy search for discovery** - Finds similar patterns | ||
| 4. **Enable caching** - 10x faster repeated operations | ||
| 5. **Paginate search results** - Default 10 results, use `startIndex` for more | ||
| --- | ||
| ## ๐ Example Workflow | ||
| ``` | ||
| 1. Get repo map | ||
| โ @mcp-code-context/get_semantic_repo_map | ||
| 2. Find target symbol | ||
| โ @mcp-code-context/read_file_surgical | ||
| 3. Check dependencies | ||
| โ @mcp-code-context/analyze_impact | ||
| 4. Preview changes (Phase 1) | ||
| โ @mcp-code-context/write_file_surgical | ||
| 5. Review diff, then apply (Phase 2) | ||
| โ @mcp-code-context/write_file_surgical (with token) | ||
| 6. Verify or rollback if needed | ||
| โ @mcp-code-context/rollback_file | ||
| ``` | ||
| --- | ||
| ## ๐ v3.6.0 Features | ||
| - โ **Fuzzy Search**: Find similar patterns with typo tolerance | ||
| - โ **Pagination**: Default 10 results, use `startIndex` for more | ||
| - โ **Token Optimization**: Phase 2 no longer repeats diff (97% savings) | ||
| - โ **Auto-Optimize**: Large repos automatically disable symbols | ||
| - โ **File Watcher**: Auto-invalidate cache on file changes | ||
| - โ **Persistent Cache**: 10x faster with sql.js WASM SQLite | ||
| --- | ||
| ## ๐ Full Documentation | ||
| See `llms.txt` for complete API reference and technical details. | ||
| --- | ||
| **Version**: 3.6.0 | ||
| **Last Updated**: May 1, 2026 |
| import { defineConfig } from 'vitest/config'; | ||
| import path from 'path'; | ||
| export default defineConfig({ | ||
| test: { | ||
| globals: true, | ||
| environment: 'node', | ||
| reporters: ['default'], | ||
| coverage: { | ||
| provider: 'v8', | ||
| reporter: ['text', 'json', 'html'], | ||
| exclude: [ | ||
| 'node_modules/', | ||
| 'dist/', | ||
| 'dist-tests/', | ||
| '**/*.spec.ts', | ||
| '**/*.test.ts', | ||
| 'tests/', | ||
| 'scripts/' | ||
| ], | ||
| thresholds: { | ||
| lines: 80, | ||
| functions: 80, | ||
| branches: 75, | ||
| statements: 80 | ||
| } | ||
| }, | ||
| testTimeout: 60000, | ||
| hookTimeout: 60000, | ||
| outputTruncateLength: 80 | ||
| }, | ||
| resolve: { | ||
| alias: { | ||
| '@': path.resolve(__dirname, './src') | ||
| } | ||
| } | ||
| }); |
+57
-3
| # Changelog | ||
| ## [3.5.3] - 2026-04-24 | ||
| ## [3.6.0] - 2026-05-01 | ||
| ### ๐ PRODUCTION PLATFORM - Caching, Logging, Watching, Search & Testing | ||
| **Major Update**: 144-hour engineering effort transforming mcp-code-context from a fragile in-memory tool into a production-ready platform. | ||
| ### Added | ||
| #### Infrastructure | ||
| - **Persistent WASM SQLite Cache** (`sql.js`) โ <100ms cache hits, 10ร faster on repeated reads. Debounced persistence (5s) prevents event loop blocking. OS temp cleanup recovery built-in. | ||
| - **Structured Logging** (`pino`) โ JSON to stderr (MCP-safe). Pretty-print in development, JSON in production. All `console.log/error` replaced. | ||
| - **File Watcher** (`chokidar`) โ Auto-invalidates cache on file changes. Configurable debounce (default 500ms). New MCP tools: `configure_file_watcher`, `get_file_watcher_status`. | ||
| - **Fuzzy Search** (`fuse.js`) โ Typo-tolerant search. Finds `authenticateUser` when searching `authUser`. Configurable threshold. | ||
| - **Pagination** โ `search_code_pattern` now defaults to 10 results (was 50) with `startIndex` parameter and result footer. | ||
| #### Testing (74 tests, 100% passing) | ||
| - **Vitest** test framework with V8 coverage | ||
| - Unit tests: parsers, diff, fileLock, backupManager, phase9 optimization | ||
| - Integration tests: full readโwriteโrollback cycle, multi-process safety | ||
| - Performance tests: cache hit <100ms, search <2000ms | ||
| - Stress tests: 20 concurrent locks, 10K line files, OOM protection | ||
| #### Security Fixes (3 production stoppers resolved) | ||
| - **STOPPER #1**: `sanitizeRegexPattern` UUID bug fixed (`\\$&` replacement) | ||
| - **STOPPER #2**: Phase 2 re-acquires file lock before write (race condition eliminated) | ||
| - **STOPPER #3**: `SecurityValidator` applied in Phase 2 (defense in depth) | ||
| ### Changed | ||
| - **Token Optimization**: Phase 2 confirmation no longer repeats diff (50-80% token reduction) | ||
| - **Auto-optimize output**: `get_semantic_repo_map` auto-disables symbols if >100 files or >1000 symbols | ||
| - **Filesystem locks**: `proper-lockfile` replaces in-memory locks (multi-process safe) | ||
| - **OS temp backups**: Backups moved from project root to `os.tmpdir()` (no hot-reload loops) | ||
| - **Myers diff**: `diff-match-patch` replaces custom O(nรm) LCS (no OOM on large files) | ||
| - **Centralized `walkDir`**: Extracted to `src/utils/fileWalker.ts` (eliminated 3ร duplication) | ||
| - **Pinned dependencies**: All `^` ranges replaced with exact versions for reproducible installs | ||
| ### Fixed | ||
| - `analyzeImpact` regex patterns now use `safeRegex` (consistent ReDoS protection) | ||
| - `BackupManager.getBackupRoot` uses async `fs.mkdir` (no sync blocking) | ||
| - `validateRegexPattern` documented as best-effort (worker timeout is the real guarantee) | ||
| ### Performance | ||
| - Cache hit: <100ms โ | ||
| - Parse file: <500ms โ | ||
| - Search (20 files): <2000ms โ | ||
| - Token savings: 50-80% โ | ||
| ### Migration from v3.6.0 | ||
| - Zero breaking changes | ||
| - New optional parameters: `fuzzyMatch`, `fuzzyThreshold`, `startIndex`, `maxDepth`, `includeSymbols` | ||
| - New tools: `configure_file_watcher`, `get_file_watcher_status`, `get_cache_stats`, `clear_cache` | ||
| --- | ||
| ## [3.6.0] - 2026-04-24 | ||
| ### ๐ PRODUCTION HARDENING - Security & Infrastructure Complete | ||
@@ -33,3 +87,3 @@ | ||
| - **Parsers**: Removed 300+ lines of duplicated replaceSymbol code | ||
| - **Version**: Synchronized all version strings to 3.5.3 | ||
| - **Version**: Synchronized all version strings to 3.6.0 | ||
@@ -53,3 +107,3 @@ ### Performance | ||
| - โ All file lock tests passing | ||
| - โ All v3.5.3 feature tests passing | ||
| - โ All v3.6.0 feature tests passing | ||
| - โ TypeScript: 0 compilation errors | ||
@@ -56,0 +110,0 @@ - โ Build: Clean production dist |
| /** | ||
| * Core Engine - v3.5.3 | ||
| * Core Engine - v3.6.0 | ||
| * ASYNC I/O: Migrated to fs.promises | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Core Engine - v3.5.3 | ||
| * Core Engine - v3.6.0 | ||
| * ASYNC I/O: Migrated to fs.promises | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Security Validator - v3.5.3 | ||
| * Security Validator - v3.6.0 | ||
| * CRITICAL FIX: Path traversal check AFTER normalization | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Security Validator - v3.5.3 | ||
| * Security Validator - v3.6.0 | ||
| * CRITICAL FIX: Path traversal check AFTER normalization | ||
@@ -17,6 +17,7 @@ */ | ||
| if (resolved !== this.projectRoot && !resolved.startsWith(this.projectRoot + path.sep)) { | ||
| return { valid: false, error: "Path outside project boundary" }; | ||
| return { | ||
| valid: false, | ||
| error: `Security: Path "${filePath}" is outside project boundary "${this.projectRoot}"` | ||
| }; | ||
| } | ||
| // NOTE: Path traversal already caught by startsWith check above. | ||
| // Removed dead code that duplicated the boundary check (unreachable condition). | ||
| // Existence check | ||
@@ -27,3 +28,6 @@ try { | ||
| catch { | ||
| return { valid: false, error: "File does not exist" }; | ||
| return { | ||
| valid: false, | ||
| error: `File not found: "${filePath}" (resolved to "${resolved}")` | ||
| }; | ||
| } | ||
@@ -36,3 +40,8 @@ return { valid: true, resolvedPath: resolved }; | ||
| if (stat.size > maxSize) { | ||
| return { valid: false, error: `File too large: ${(stat.size / 1024 / 1024).toFixed(2)}MB` }; | ||
| const sizeMB = (stat.size / 1024 / 1024).toFixed(2); | ||
| const maxMB = (maxSize / 1024 / 1024).toFixed(2); | ||
| return { | ||
| valid: false, | ||
| error: `File too large: ${sizeMB}MB exceeds maximum ${maxMB}MB` | ||
| }; | ||
| } | ||
@@ -42,3 +51,6 @@ return { valid: true }; | ||
| catch (error) { | ||
| return { valid: false, error: `Failed to check file size: ${error}` }; | ||
| return { | ||
| valid: false, | ||
| error: `Failed to check file size for "${filePath}": ${error instanceof Error ? error.message : String(error)}` | ||
| }; | ||
| } | ||
@@ -45,0 +57,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/core/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAQvC,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAS;IAE5B,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAExC,qEAAqE;QACrE,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;QAClE,CAAC;QAED,iEAAiE;QACjE,gFAAgF;QAEhF,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;QACxD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,UAAkB,EAAE,GAAG,IAAI,GAAG,IAAI;QACzE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACxB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9F,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,KAAK,EAAE,EAAE,CAAC;QACxE,CAAC;IACH,CAAC;CACF"} | ||
| {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/core/validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAQvC,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAS;IAE5B,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAExC,qEAAqE;QACrE,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,mBAAmB,QAAQ,kCAAkC,IAAI,CAAC,WAAW,GAAG;aACxF,CAAC;QACJ,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,oBAAoB,QAAQ,mBAAmB,QAAQ,IAAI;aACnE,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,UAAkB,EAAE,GAAG,IAAI,GAAG,IAAI;QACzE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpD,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjD,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,KAAK,EAAE,mBAAmB,MAAM,sBAAsB,KAAK,IAAI;iBAChE,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,kCAAkC,QAAQ,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAChH,CAAC;QACJ,CAAC;IACH,CAAC;CACF"} |
| #!/usr/bin/env node | ||
| /** | ||
| * mcp-code-context v3.5.3 - Tree-sitter WASM Edition | ||
| * mcp-code-context v3.6.0 - Tree-sitter WASM Edition | ||
| * | ||
@@ -11,3 +11,8 @@ * Production-ready with: | ||
| * - Mandatory security boundaries on ALL handlers | ||
| * - Persistent WASM SQLite cache with <100ms hits | ||
| * - Structured logging with pino (JSON to stderr, MCP-safe) | ||
| * - File watcher with chokidar for auto cache invalidation | ||
| * - Fuzzy search with fuse.js + pagination | ||
| * - Token optimization: compact diffs, auto-optimize output | ||
| */ | ||
| export {}; |
+197
-20
| #!/usr/bin/env node | ||
| /** | ||
| * mcp-code-context v3.5.3 - Tree-sitter WASM Edition | ||
| * mcp-code-context v3.6.0 - Tree-sitter WASM Edition | ||
| * | ||
@@ -11,2 +11,7 @@ * Production-ready with: | ||
| * - Mandatory security boundaries on ALL handlers | ||
| * - Persistent WASM SQLite cache with <100ms hits | ||
| * - Structured logging with pino (JSON to stderr, MCP-safe) | ||
| * - File watcher with chokidar for auto cache invalidation | ||
| * - Fuzzy search with fuse.js + pagination | ||
| * - Token optimization: compact diffs, auto-optimize output | ||
| */ | ||
@@ -30,5 +35,6 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; | ||
| import { BackupManager } from "./utils/backupManager.js"; | ||
| import { CacheManager } from "./core/cacheManager.js"; | ||
| import * as fs from "node:fs/promises"; | ||
| const SERVER_NAME = "mcp-code-context"; | ||
| const SERVER_VERSION = "3.5.3"; | ||
| const SERVER_VERSION = "3.6.0"; | ||
| // Global instances | ||
@@ -38,2 +44,34 @@ let engine; | ||
| const rateLimiter = new RateLimiter(); | ||
| // LRU cache for CacheManagers (max 5 projects to prevent FD exhaustion) | ||
| const cacheManagers = new Map(); | ||
| const MAX_CACHE_MANAGERS = 5; | ||
| function getCacheManager(projectRoot) { | ||
| const now = Date.now(); | ||
| // Update last used time if exists | ||
| if (cacheManagers.has(projectRoot)) { | ||
| const entry = cacheManagers.get(projectRoot); | ||
| entry.lastUsed = now; | ||
| return entry.cache; | ||
| } | ||
| // Evict LRU if at capacity | ||
| if (cacheManagers.size >= MAX_CACHE_MANAGERS) { | ||
| let oldestKey = null; | ||
| let oldestTime = Infinity; | ||
| for (const [key, entry] of cacheManagers.entries()) { | ||
| if (entry.lastUsed < oldestTime) { | ||
| oldestTime = entry.lastUsed; | ||
| oldestKey = key; | ||
| } | ||
| } | ||
| if (oldestKey) { | ||
| const evicted = cacheManagers.get(oldestKey); | ||
| evicted.cache.close(); // CRITICAL: Close watcher and free WASM heap | ||
| cacheManagers.delete(oldestKey); | ||
| } | ||
| } | ||
| // Create new cache manager | ||
| const cache = new CacheManager(projectRoot); | ||
| cacheManagers.set(projectRoot, { cache, lastUsed: now }); | ||
| return cache; | ||
| } | ||
| // Write operations that require file locking and two-phase workflow | ||
@@ -109,3 +147,6 @@ const WRITE_OPS = new Set(["replace_symbol", "insert_symbol", "remove_symbol", "rename_symbol"]); | ||
| excludeDirs: { type: "array", items: { type: "string" }, description: "Directories to exclude" }, | ||
| maxResults: { type: "number", description: "Maximum matches to return (default: 50)" }, | ||
| maxResults: { type: "number", description: "Maximum matches to return (default: 10)" }, | ||
| startIndex: { type: "number", description: "Start index for pagination (default: 0)" }, | ||
| fuzzyMatch: { type: "boolean", description: "Enable fuzzy matching (default: false)" }, | ||
| fuzzyThreshold: { type: "number", description: "Fuzzy match threshold 0-1 (default: 0.4)" }, | ||
| }, | ||
@@ -227,2 +268,48 @@ required: ["rootDir", "projectRoot", "pattern"], | ||
| }, | ||
| { | ||
| name: "get_cache_stats", | ||
| description: "Get cache statistics (entries, size, hit rate)", | ||
| inputSchema: { | ||
| type: "object", | ||
| properties: { | ||
| projectRoot: { type: "string", description: "Project root directory" }, | ||
| }, | ||
| required: ["projectRoot"], | ||
| }, | ||
| }, | ||
| { | ||
| name: "clear_cache", | ||
| description: "Clear all cached parse results for a project", | ||
| inputSchema: { | ||
| type: "object", | ||
| properties: { | ||
| projectRoot: { type: "string", description: "Project root directory" }, | ||
| }, | ||
| required: ["projectRoot"], | ||
| }, | ||
| }, | ||
| { | ||
| name: "configure_file_watcher", | ||
| description: "Start/stop file watcher for auto-cache invalidation", | ||
| inputSchema: { | ||
| type: "object", | ||
| properties: { | ||
| projectRoot: { type: "string", description: "Project root directory" }, | ||
| action: { type: "string", enum: ["start", "stop"], description: "Action to perform" }, | ||
| debounceMs: { type: "number", description: "Debounce delay in ms (default: 500)" }, | ||
| }, | ||
| required: ["projectRoot", "action"], | ||
| }, | ||
| }, | ||
| { | ||
| name: "get_file_watcher_status", | ||
| description: "Get file watcher status for a project", | ||
| inputSchema: { | ||
| type: "object", | ||
| properties: { | ||
| projectRoot: { type: "string", description: "Project root directory" }, | ||
| }, | ||
| required: ["projectRoot"], | ||
| }, | ||
| }, | ||
| ]; | ||
@@ -348,2 +435,5 @@ const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } }); | ||
| maxResults: args.maxResults, | ||
| startIndex: args.startIndex, | ||
| fuzzyMatch: args.fuzzyMatch, | ||
| fuzzyThreshold: args.fuzzyThreshold, | ||
| }); | ||
@@ -384,17 +474,46 @@ if (!result.success) | ||
| throw new Error(`Invalid or expired confirmation token: ${token}`); | ||
| if (pendingOp.pendingWrites && pendingOp.pendingWrites.length > 0) { | ||
| // Multi-file rename: backup and write ALL files atomically | ||
| for (const pw of pendingOp.pendingWrites) { | ||
| await BackupManager.createBackup(pw.filePath, String(args.projectRoot)); | ||
| await writeFile(pw.filePath, pw.newContent); | ||
| // SECURITY: Validate paths in Phase 2 (defense in depth) | ||
| const projectRoot = String(args.projectRoot); | ||
| const validator = new SecurityValidator(projectRoot); | ||
| // CRITICAL: Re-acquire lock in Phase 2 to prevent race conditions | ||
| // Lock is released after Phase 1, so another agent could modify file between Phase 1 and Phase 2 | ||
| const lockReleases = []; | ||
| try { | ||
| if (pendingOp.pendingWrites && pendingOp.pendingWrites.length > 0) { | ||
| // CRITICAL: Sort paths alphabetically to prevent deadlocks (Dining Philosophers) | ||
| const sortedWrites = [...pendingOp.pendingWrites].sort((a, b) => a.filePath.localeCompare(b.filePath)); | ||
| // Multi-file rename: validate, lock, and write ALL files atomically | ||
| for (const pw of sortedWrites) { | ||
| const validation = await validator.validateFilePath(pw.filePath); | ||
| if (!validation.valid) | ||
| throw new Error(validation.error); | ||
| const release = await globalLockManager.acquireLock(validation.resolvedPath); | ||
| lockReleases.push(release); | ||
| } | ||
| for (const pw of sortedWrites) { | ||
| const validation = await validator.validateFilePath(pw.filePath); | ||
| await BackupManager.createBackup(validation.resolvedPath, projectRoot); | ||
| await writeFile(validation.resolvedPath, pw.newContent); | ||
| } | ||
| } | ||
| else { | ||
| // Single-file operation: validate, lock, then write | ||
| const validation = await validator.validateFilePath(pendingOp.filePath); | ||
| if (!validation.valid) | ||
| throw new Error(validation.error); | ||
| const release = await globalLockManager.acquireLock(validation.resolvedPath); | ||
| lockReleases.push(release); | ||
| await BackupManager.createBackup(validation.resolvedPath, projectRoot); | ||
| await writeFile(validation.resolvedPath, pendingOp.newContent); | ||
| } | ||
| } | ||
| else { | ||
| // Single-file operation | ||
| await BackupManager.createBackup(pendingOp.filePath, String(args.projectRoot)); | ||
| await writeFile(pendingOp.filePath, pendingOp.newContent); | ||
| finally { | ||
| // Release all locks | ||
| for (const release of lockReleases) { | ||
| await release(); | ||
| } | ||
| } | ||
| const fileCount = pendingOp.pendingWrites?.length || 1; | ||
| return { | ||
| content: [{ type: "text", text: `Success. Changes applied to ${fileCount} file(s).\n\nDiff:\n${pendingOp.diff}` }], | ||
| content: [{ type: "text", text: `โ Success. Changes applied to ${fileCount} file(s).` }], | ||
| }; | ||
@@ -519,5 +638,8 @@ } | ||
| async function handleGetServerStats() { | ||
| const telemetry = globalTelemetry.getSummary(); | ||
| const audit = globalAuditLogger.getStats(); | ||
| const stats = { | ||
| pendingConfirmations: globalConfirmationStore.getPendingCount(), | ||
| // Telemetry and audit stats can be exposed here later | ||
| telemetry, | ||
| audit, | ||
| }; | ||
@@ -528,2 +650,47 @@ return { | ||
| } | ||
| async function handleGetCacheStats(args) { | ||
| const projectRoot = String(args.projectRoot); | ||
| const cache = getCacheManager(projectRoot); | ||
| const stats = await cache.getStats(); | ||
| return { | ||
| content: [{ type: "text", text: JSON.stringify(stats, null, 2) }], | ||
| }; | ||
| } | ||
| async function handleClearCache(args) { | ||
| const projectRoot = String(args.projectRoot); | ||
| const cache = getCacheManager(projectRoot); | ||
| await cache.clear(); | ||
| return { | ||
| content: [{ type: "text", text: "Cache cleared successfully" }], | ||
| }; | ||
| } | ||
| async function handleConfigureFileWatcher(args) { | ||
| const projectRoot = String(args.projectRoot); | ||
| const action = String(args.action); | ||
| const debounceMs = args.debounceMs ? Number(args.debounceMs) : 500; | ||
| const cache = getCacheManager(projectRoot); | ||
| if (action === "start") { | ||
| cache.startWatcher(debounceMs); | ||
| return { | ||
| content: [{ type: "text", text: `File watcher started with ${debounceMs}ms debounce` }], | ||
| }; | ||
| } | ||
| else if (action === "stop") { | ||
| cache.stopWatcher(); | ||
| return { | ||
| content: [{ type: "text", text: "File watcher stopped" }], | ||
| }; | ||
| } | ||
| else { | ||
| throw new Error(`Invalid action: ${action}`); | ||
| } | ||
| } | ||
| async function handleGetFileWatcherStatus(args) { | ||
| const projectRoot = String(args.projectRoot); | ||
| const cache = getCacheManager(projectRoot); | ||
| const status = cache.getWatcherStatus(); | ||
| return { | ||
| content: [{ type: "text", text: JSON.stringify(status, null, 2) }], | ||
| }; | ||
| } | ||
| // ----------------------------------------------------------------------------- | ||
@@ -551,2 +718,3 @@ // PIPELINE & MAIN EXECUTION | ||
| let lockReleased = false; | ||
| let lockRelease = null; | ||
| try { | ||
@@ -562,6 +730,3 @@ // 1. Rate Limiting Middleware | ||
| if (WRITE_OPS.has(name) && args && args.filePath) { | ||
| const lockResult = await globalLockManager.acquireLock(String(args.filePath), "mcp-client", name); | ||
| if (!lockResult.acquired) { | ||
| throw new Error(`File is locked: ${lockResult.error}`); | ||
| } | ||
| lockRelease = await globalLockManager.acquireLock(String(args.filePath)); | ||
| } | ||
@@ -610,2 +775,14 @@ // 3. Execution | ||
| break; | ||
| case "get_cache_stats": | ||
| result = await handleGetCacheStats(args); | ||
| break; | ||
| case "clear_cache": | ||
| result = await handleClearCache(args); | ||
| break; | ||
| case "configure_file_watcher": | ||
| result = await handleConfigureFileWatcher(args); | ||
| break; | ||
| case "get_file_watcher_status": | ||
| result = await handleGetFileWatcherStatus(args); | ||
| break; | ||
| default: | ||
@@ -626,4 +803,4 @@ throw new Error(`Unknown tool: ${name}`); | ||
| // 4. File Lock Release | ||
| if (WRITE_OPS.has(name) && args && args.filePath && !lockReleased) { | ||
| globalLockManager.releaseLock(String(args.filePath), "mcp-client"); | ||
| if (lockRelease && !lockReleased) { | ||
| await lockRelease(); | ||
| lockReleased = true; | ||
@@ -630,0 +807,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Semantic Compression - v3.5.3 | ||
| * Semantic Compression - v3.6.0 | ||
| * IMPROVEMENTS: Centralized constants + size limits + timeout | ||
@@ -18,2 +18,4 @@ */ | ||
| registry: ParserRegistry; | ||
| maxDepth?: number; | ||
| includeSymbols?: boolean; | ||
| }): Promise<CompressionResult>; |
| /** | ||
| * Semantic Compression - v3.5.3 | ||
| * Semantic Compression - v3.6.0 | ||
| * IMPROVEMENTS: Centralized constants + size limits + timeout | ||
@@ -8,2 +8,3 @@ */ | ||
| import { EXCLUDE_DIRS, MAX_FILES_REPO_MAP, MAX_TOTAL_SIZE_BYTES } from "../utils/constants.js"; | ||
| import { walkDir } from "../utils/fileWalker.js"; | ||
| /** | ||
@@ -16,55 +17,48 @@ * Generate semantic repository map | ||
| const files = []; | ||
| let totalSize = 0; | ||
| async function walkDir(dir) { | ||
| if (files.length >= MAX_FILES_REPO_MAP) | ||
| return; | ||
| if (totalSize >= MAX_TOTAL_SIZE_BYTES) | ||
| return; | ||
| const entries = await fs.readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| if (files.length >= MAX_FILES_REPO_MAP) | ||
| break; | ||
| if (totalSize >= MAX_TOTAL_SIZE_BYTES) | ||
| break; | ||
| const fullPath = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| if (!EXCLUDE_DIRS.includes(entry.name)) { | ||
| await walkDir(fullPath); | ||
| let totalSymbols = 0; | ||
| await walkDir(params.directoryPath, { | ||
| excludeDirs: EXCLUDE_DIRS, | ||
| maxFiles: MAX_FILES_REPO_MAP, | ||
| maxSize: MAX_TOTAL_SIZE_BYTES, | ||
| onFile: async (fullPath) => { | ||
| const ext = path.extname(fullPath); | ||
| const parser = params.registry.getParser(ext); | ||
| if (parser) { | ||
| try { | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| const tree = parser.parse(content); | ||
| const symbols = parser.findSymbols(tree); | ||
| totalSymbols += symbols.length; | ||
| files.push({ | ||
| path: path.relative(params.directoryPath, fullPath), | ||
| symbols: symbols.map(s => ({ type: s.type, name: s.name })), | ||
| }); | ||
| } | ||
| } | ||
| else if (entry.isFile()) { | ||
| const ext = path.extname(entry.name); | ||
| const parser = params.registry.getParser(ext); | ||
| if (parser) { | ||
| try { | ||
| const stat = await fs.stat(fullPath); | ||
| if (totalSize + stat.size > MAX_TOTAL_SIZE_BYTES) | ||
| break; | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| totalSize += stat.size; | ||
| const tree = parser.parse(content); | ||
| const symbols = parser.findSymbols(tree); | ||
| files.push({ | ||
| path: path.relative(params.directoryPath, fullPath), | ||
| symbols: symbols.map(s => ({ type: s.type, name: s.name })), | ||
| }); | ||
| } | ||
| catch (error) { | ||
| // Skip files that fail to parse | ||
| } | ||
| catch (error) { | ||
| // Skip files that fail to parse | ||
| } | ||
| } | ||
| } | ||
| } | ||
| await walkDir(params.directoryPath); | ||
| }, | ||
| }); | ||
| // Auto-optimize: disable symbols if >100 files or >1000 symbols | ||
| const includeSymbols = params.includeSymbols !== false && files.length <= 100 && totalSymbols <= 1000; | ||
| if (format === "xml") { | ||
| let xml = '<?xml version="1.0" encoding="UTF-8"?>\n<repository>\n'; | ||
| for (const file of files) { | ||
| xml += ` <file path="${file.path}">\n`; | ||
| for (const symbol of file.symbols) { | ||
| xml += ` <symbol type="${symbol.type}" name="${symbol.name}" />\n`; | ||
| xml += ` <file path="${file.path}"`; | ||
| if (includeSymbols && file.symbols.length > 0) { | ||
| xml += '>\n'; | ||
| for (const symbol of file.symbols) { | ||
| xml += ` <symbol type="${symbol.type}" name="${symbol.name}" />\n`; | ||
| } | ||
| xml += ` </file>\n`; | ||
| } | ||
| xml += ` </file>\n`; | ||
| else { | ||
| xml += ' />\n'; | ||
| } | ||
| } | ||
| xml += '</repository>'; | ||
| if (!includeSymbols) { | ||
| xml += `\n\n<!-- Symbols omitted: ${files.length} files, ${totalSymbols} symbols (auto-optimized for token efficiency) -->`; | ||
| } | ||
| return { success: true, content: xml }; | ||
@@ -75,8 +69,13 @@ } | ||
| for (const file of files) { | ||
| md += `## ${file.path}\n\n`; | ||
| for (const symbol of file.symbols) { | ||
| md += `- **${symbol.type}**: \`${symbol.name}\`\n`; | ||
| md += `## ${file.path}\n`; | ||
| if (includeSymbols && file.symbols.length > 0) { | ||
| for (const symbol of file.symbols) { | ||
| md += `- **${symbol.type}**: \`${symbol.name}\`\n`; | ||
| } | ||
| } | ||
| md += `\n`; | ||
| } | ||
| if (!includeSymbols) { | ||
| md += `\n---\n*Symbols omitted: ${files.length} files, ${totalSymbols} symbols (auto-optimized for token efficiency)*\n`; | ||
| } | ||
| return { success: true, content: md }; | ||
@@ -83,0 +82,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Confirmation Store - v3.5.3 | ||
| * Confirmation Store - v3.6.0 | ||
| * Two-phase write: dry-run preview โ confirm with token | ||
@@ -4,0 +4,0 @@ * Stores pending write operations with auto-expiry |
| /** | ||
| * Confirmation Store - v3.5.3 | ||
| * Confirmation Store - v3.6.0 | ||
| * Two-phase write: dry-run preview โ confirm with token | ||
@@ -4,0 +4,0 @@ * Stores pending write operations with auto-expiry |
| /** | ||
| * Read Operations - v3.5.3 | ||
| * Read Operations - v3.6.0 | ||
| * FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern | ||
@@ -21,2 +21,3 @@ */ | ||
| parser: BaseParser; | ||
| useCache?: boolean; | ||
| }): Promise<ReadResult>; | ||
@@ -44,2 +45,5 @@ /** | ||
| maxResults?: number; | ||
| startIndex?: number; | ||
| fuzzyMatch?: boolean; | ||
| fuzzyThreshold?: number; | ||
| }): Promise<ReadResult>; | ||
@@ -46,0 +50,0 @@ /** |
+125
-64
| /** | ||
| * Read Operations - v3.5.3 | ||
| * Read Operations - v3.6.0 | ||
| * FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern | ||
@@ -7,4 +7,24 @@ */ | ||
| import * as path from "node:path"; | ||
| import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS } from "../utils/constants.js"; | ||
| import * as crypto from "node:crypto"; | ||
| import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS, MAX_FILES_SEARCH, OPERATION_TIMEOUT_MS } from "../utils/constants.js"; | ||
| import { safeRegexFindFirst, safeRegexMultiFileBatchTest, validateRegexPattern } from "../utils/safeRegex.js"; | ||
| import { walkDir } from "../utils/fileWalker.js"; | ||
| import { CacheManager } from "../core/cacheManager.js"; | ||
| import { fuzzySearch } from "../utils/fuzzySearch.js"; | ||
| import { searchWithNativeTool } from "../utils/searchTools.js"; | ||
| const DEFAULT_MAX_RESULTS = 10; // Changed from 50 for pagination | ||
| const SCAN_TIMEOUT_BASE_MS = 1000; | ||
| const SCAN_TIMEOUT_PER_FILE_MS = 10; | ||
| // Global cache instance per project | ||
| const cacheInstances = new Map(); | ||
| function getCacheManager(projectRoot) { | ||
| if (!cacheInstances.has(projectRoot)) { | ||
| cacheInstances.set(projectRoot, new CacheManager(projectRoot)); | ||
| } | ||
| return cacheInstances.get(projectRoot); | ||
| } | ||
| async function getFileHash(filePath) { | ||
| const content = await fs.readFile(filePath, 'utf-8'); | ||
| return crypto.createHash('md5').update(content).digest('hex'); | ||
| } | ||
| /** | ||
@@ -15,5 +35,36 @@ * Extract a specific symbol from a file | ||
| try { | ||
| const useCache = params.useCache !== false; | ||
| const cache = useCache ? getCacheManager(params.projectRoot) : null; | ||
| // Try cache first | ||
| if (cache) { | ||
| const hash = await getFileHash(params.filePath); | ||
| const cached = await cache.get(params.filePath, hash); | ||
| if (cached) { | ||
| const symbol = cached.symbols.find(s => s.name === params.symbolName && (!params.className || s.className === params.className)); | ||
| if (symbol) { | ||
| const content = await fs.readFile(params.filePath, "utf-8"); | ||
| const tree = params.parser.parse(content); | ||
| const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className); | ||
| if (extracted) { | ||
| return { success: true, content: extracted }; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| // Cache miss - parse file | ||
| const content = await fs.readFile(params.filePath, "utf-8"); | ||
| const tree = params.parser.parse(content); | ||
| // CRITICAL FIX: args were (tree, content, symbolName) โ content was passed as symbolName | ||
| const symbols = params.parser.findSymbols(tree); | ||
| // Update cache | ||
| if (cache) { | ||
| const hash = await getFileHash(params.filePath); | ||
| const stat = await fs.stat(params.filePath); | ||
| await cache.set({ | ||
| filePath: params.filePath, | ||
| hash, | ||
| symbols, | ||
| lastModified: stat.mtimeMs, | ||
| cachedAt: Date.now(), | ||
| }); | ||
| } | ||
| const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className); | ||
@@ -114,4 +165,19 @@ if (!extracted) { | ||
| try { | ||
| const maxResults = params.maxResults || 50; | ||
| // Validate regex pattern | ||
| const maxResults = params.maxResults || DEFAULT_MAX_RESULTS; | ||
| // Try native tools first (ripgrep > ugrep > ag > findstr/grep) | ||
| const nativeResult = await searchWithNativeTool(params.pattern, params.rootDir, maxResults, 10000); | ||
| if (nativeResult && !nativeResult.timedOut) { | ||
| const startIdx = params.startIndex || 0; | ||
| const paginatedMatches = nativeResult.matches.slice(startIdx, startIdx + maxResults); | ||
| const results = paginatedMatches.map(m => ({ | ||
| file: m.file, | ||
| line: m.line, | ||
| content: m.content, | ||
| })); | ||
| const totalResults = nativeResult.matches.length; | ||
| const hasMore = startIdx + maxResults < totalResults; | ||
| const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results (via ${nativeResult.tool})${hasMore ? ' (use startIndex to see more)' : ''}`; | ||
| return { success: true, content: JSON.stringify(results, null, 2) + footer }; | ||
| } | ||
| // Fallback to regex-based search | ||
| const validation = validateRegexPattern(params.pattern); | ||
@@ -129,31 +195,19 @@ if (!validation.safe) { | ||
| const fileEntries = []; | ||
| async function walkDir(dir) { | ||
| const entries = await fs.readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| const fullPath = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| if (!excludeDirs.includes(entry.name)) { | ||
| await walkDir(fullPath); | ||
| } | ||
| } | ||
| else if (entry.isFile()) { | ||
| const ext = path.extname(entry.name); | ||
| if (extensions.includes(ext)) { | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| fileEntries.push({ path: fullPath, lines: content.split("\n") }); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| await walkDir(params.rootDir); | ||
| await walkDir(params.rootDir, { | ||
| extensions, | ||
| excludeDirs, | ||
| onFile: async (fullPath) => { | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| fileEntries.push({ path: fullPath, lines: content.split("\n") }); | ||
| }, | ||
| }); | ||
| // CRITICAL: Prevent OOM in large monorepos | ||
| const MAX_FILES = 2000; | ||
| if (fileEntries.length > MAX_FILES) { | ||
| if (fileEntries.length > MAX_FILES_SEARCH) { | ||
| return { | ||
| success: false, | ||
| error: `Too many files to search (${fileEntries.length}). Maximum: ${MAX_FILES}. Try narrowing your search with fileExtensions or excludeDirs.` | ||
| error: `Too many files to search (${fileEntries.length}). Maximum: ${MAX_FILES_SEARCH}. Try narrowing your search with fileExtensions or excludeDirs.` | ||
| }; | ||
| } | ||
| // Step 2: ONE worker for ALL files โ eliminates N worker spawns | ||
| const scanTimeout = Math.min(30000, 1000 + fileEntries.length * 10); | ||
| const scanTimeout = Math.min(OPERATION_TIMEOUT_MS, SCAN_TIMEOUT_BASE_MS + fileEntries.length * SCAN_TIMEOUT_PER_FILE_MS); | ||
| const batchResult = await safeRegexMultiFileBatchTest(regex, fileEntries, scanTimeout); | ||
@@ -167,16 +221,34 @@ if (batchResult.timedOut) { | ||
| } | ||
| // Step 3: Collect results up to maxResults | ||
| const results = []; | ||
| for (const match of batchResult.results) { | ||
| if (results.length >= maxResults) | ||
| break; | ||
| results.push({ | ||
| file: match.file, | ||
| line: match.index + 1, | ||
| content: match.content, | ||
| // Step 3: Collect results with pagination | ||
| const startIdx = params.startIndex || 0; | ||
| const maxRes = params.maxResults || DEFAULT_MAX_RESULTS; | ||
| const allMatches = batchResult.results; | ||
| // Apply fuzzy filtering if requested | ||
| let filteredMatches = allMatches; | ||
| if (params.fuzzyMatch) { | ||
| const fuzzyThreshold = params.fuzzyThreshold ?? 0.4; | ||
| const searchItems = allMatches.map(m => ({ | ||
| ...m, | ||
| searchText: `${m.file} ${m.content}`, | ||
| })); | ||
| const fuzzyResults = fuzzySearch(searchItems, params.pattern, { | ||
| threshold: fuzzyThreshold, | ||
| keys: ['searchText'], | ||
| }); | ||
| filteredMatches = fuzzyResults.map(r => r.item); | ||
| } | ||
| // Paginate results | ||
| const paginatedMatches = filteredMatches.slice(startIdx, startIdx + maxRes); | ||
| const results = paginatedMatches.map(match => ({ | ||
| file: match.file, | ||
| line: match.index + 1, | ||
| content: match.content, | ||
| })); | ||
| // Add pagination footer | ||
| const totalResults = filteredMatches.length; | ||
| const hasMore = startIdx + maxRes < totalResults; | ||
| const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results${hasMore ? ' (use startIndex to see more)' : ''}`; | ||
| return { | ||
| success: true, | ||
| content: JSON.stringify(results, null, 2), | ||
| content: JSON.stringify(results, null, 2) + footer, | ||
| }; | ||
@@ -198,29 +270,18 @@ } | ||
| const targetFile = path.basename(params.filePath); | ||
| async function walkDir(dir) { | ||
| const entries = await fs.readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| const fullPath = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| if (!EXCLUDE_DIRS.includes(entry.name)) { | ||
| await walkDir(fullPath); | ||
| } | ||
| await walkDir(params.rootDir, { | ||
| extensions: SUPPORTED_EXTENSIONS, | ||
| excludeDirs: EXCLUDE_DIRS, | ||
| onFile: async (fullPath) => { | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| // Check for imports/requires | ||
| const importPatterns = [ | ||
| new RegExp(`import.*from.*['"].*${targetFile.replace(/\.[^.]+$/, "")}`, "g"), | ||
| new RegExp(`require\\(['"].*${targetFile}`, "g"), | ||
| new RegExp(`from.*${targetFile.replace(/\.[^.]+$/, "")}.*import`, "g"), | ||
| ]; | ||
| if (importPatterns.some(pattern => pattern.test(content))) { | ||
| dependents.push(fullPath); | ||
| } | ||
| else if (entry.isFile()) { | ||
| const ext = path.extname(entry.name); | ||
| if (SUPPORTED_EXTENSIONS.includes(ext)) { | ||
| const content = await fs.readFile(fullPath, "utf-8"); | ||
| // Check for imports/requires | ||
| const importPatterns = [ | ||
| new RegExp(`import.*from.*['"].*${targetFile.replace(/\.[^.]+$/, "")}`, "g"), | ||
| new RegExp(`require\\(['"].*${targetFile}`, "g"), | ||
| new RegExp(`from.*${targetFile.replace(/\.[^.]+$/, "")}.*import`, "g"), | ||
| ]; | ||
| if (importPatterns.some(pattern => pattern.test(content))) { | ||
| dependents.push(fullPath); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| await walkDir(params.rootDir); | ||
| }, | ||
| }); | ||
| return { | ||
@@ -227,0 +288,0 @@ success: true, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,MAAM,mBAAmB,GAAG,EAAE,CAAC,CAAC,iCAAiC;AACjE,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC,oCAAoC;AACpC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEvD,SAAS,eAAe,CAAC,WAAmB;IAC1C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACrC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AASD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAOnC;IACC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpE,kBAAkB;QAClB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEtD,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CACxF,CAAC;gBAEF,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;oBAEzF,IAAI,SAAS,EAAE,CAAC;wBACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;oBAC/C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEhD,eAAe;QACf,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,KAAK,CAAC,GAAG,CAAC;gBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI;gBACJ,OAAO;gBACP,YAAY,EAAE,IAAI,CAAC,OAAO;gBAC1B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,WAAW,MAAM,CAAC,UAAU,2BAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACnG,OAAO;aACR,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAM/B;IACC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,iEAAiE;YACjE,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yBAAyB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC/D,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAE/C,wDAAwD;YACxD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,yDAAyD;iBACjE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YACrD,CAAC;YAED,MAAM,UAAU,GAAG,UAAU,CAAC,UAAW,CAAC;YAC1C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,YAAY,MAAM,CAAC,aAAa,aAAa;iBACrD,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAE7D,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5C,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,uBAAuB;YAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAE3B,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,OAAO,cAAc,KAAK,CAAC,MAAM,SAAS;iBACpG,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;aAC5C,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,wDAAwD;SAChE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAWnC;IACC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAC;QAE5D,+DAA+D;QAC/D,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACnG,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACxC,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CAAC;YACJ,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;YACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;YACrD,MAAM,MAAM,GAAG,eAAe,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,OAAO,YAAY,iBAAiB,YAAY,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;QAC/E,CAAC;QAED,iCAAiC;QACjC,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,yBAAyB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,IAAI,oBAAoB,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,YAAY,CAAC;QAEvD,4CAA4C;QAC5C,MAAM,WAAW,GAA6C,EAAE,CAAC;QAEjE,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;YAC5B,UAAU;YACV,WAAW;YACX,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;SACF,CAAC,CAAC;QAEH,2CAA2C;QAC3C,IAAI,WAAW,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,6BAA6B,WAAW,CAAC,MAAM,eAAe,gBAAgB,iEAAiE;aACvJ,CAAC;QACJ,CAAC;QAED,gEAAgE;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,WAAW,CAAC,MAAM,GAAG,wBAAwB,CAAC,CAAC;QACzH,MAAM,WAAW,GAAG,MAAM,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAEvF,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,6CAA6C,WAAW,CAAC,MAAM,QAAQ,CAAC,CAAC;YACtF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,WAAW,CAAC,MAAM,0BAA0B,EAAE,CAAC;QAC1G,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACxD,MAAM,UAAU,GAAG,WAAW,CAAC,OAAQ,CAAC;QAExC,qCAAqC;QACrC,IAAI,eAAe,GAAG,UAAU,CAAC;QACjC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC;YACpD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,GAAG,CAAC;gBACJ,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE;aACrC,CAAC,CAAC,CAAC;YAEJ,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE;gBAC5D,SAAS,EAAE,cAAc;gBACzB,IAAI,EAAE,CAAC,YAAY,CAAC;aACrB,CAAC,CAAC;YAEH,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,mBAAmB;QACnB,MAAM,gBAAgB,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAU,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC;YACrB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC,CAAC;QAEJ,wBAAwB;QACxB,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;QACjD,MAAM,MAAM,GAAG,eAAe,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,OAAO,YAAY,WAAW,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEtJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,MAAM;SACnD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAGnC;IACC,IAAI,CAAC;QACH,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAElD,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;YAC5B,UAAU,EAAE,oBAAoB;YAChC,WAAW,EAAE,YAAY;YACzB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACzB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAErD,6BAA6B;gBAC7B,MAAM,cAAc,GAAG;oBACrB,IAAI,MAAM,CAAC,uBAAuB,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC;oBAC5E,IAAI,MAAM,CAAC,mBAAmB,UAAU,EAAE,EAAE,GAAG,CAAC;oBAChD,IAAI,MAAM,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC;iBACvE,CAAC;gBAEF,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBAC1D,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SACxE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"} |
| /** | ||
| * Write Operations - v3.5.3 | ||
| * Write Operations - v3.6.0 | ||
| * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning | ||
@@ -56,3 +56,3 @@ * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes) | ||
| * Rename symbol using AST-aware replacement | ||
| * v3.5.3 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk) | ||
| * v3.6.0 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk) | ||
| * All changes are accumulated in pendingWrites for Phase 2 confirmation. | ||
@@ -59,0 +59,0 @@ */ |
| /** | ||
| * Write Operations - v3.5.3 | ||
| * Write Operations - v3.6.0 | ||
| * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning | ||
@@ -7,3 +7,2 @@ * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes) | ||
| import * as fs from "node:fs/promises"; | ||
| import * as path from "node:path"; | ||
| import { SecurityValidator } from "../core/validator.js"; | ||
@@ -13,2 +12,3 @@ import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS } from "../utils/constants.js"; | ||
| import { sanitizeRegexPattern } from "../utils/safeRegex.js"; | ||
| import { walkDir } from "../utils/fileWalker.js"; | ||
| /** | ||
@@ -177,4 +177,67 @@ * Validate syntax of generated code | ||
| /** | ||
| * Validate rename parameters and return validated paths | ||
| */ | ||
| async function validateRenameParams(params) { | ||
| const validator = new SecurityValidator(params.projectRoot); | ||
| // Validate definition file path | ||
| const defValidation = await validator.validateFilePath(params.filePath); | ||
| if (!defValidation.valid) { | ||
| return { valid: false, error: defValidation.error }; | ||
| } | ||
| // Sanitize to prevent regex injection | ||
| const sanitizedOld = sanitizeRegexPattern(params.oldName); | ||
| return { | ||
| valid: true, | ||
| resolvedPath: defValidation.resolvedPath, | ||
| sanitizedOld | ||
| }; | ||
| } | ||
| /** | ||
| * Find all files that depend on the symbol being renamed | ||
| */ | ||
| async function findDependentFiles(rootDir, sanitizedOldName, projectRoot) { | ||
| const dependents = []; | ||
| const validator = new SecurityValidator(projectRoot); | ||
| await walkDir(rootDir, { | ||
| extensions: SUPPORTED_EXTENSIONS, | ||
| excludeDirs: EXCLUDE_DIRS, | ||
| onFile: async (fullPath) => { | ||
| const depValidation = await validator.validateFilePath(fullPath); | ||
| if (!depValidation.valid) | ||
| return; | ||
| const fileContent = await fs.readFile(fullPath, "utf-8"); | ||
| const importPatterns = [ | ||
| new RegExp(`import.*\\b${sanitizedOldName}\\b`, "g"), | ||
| new RegExp(`from.*\\b${sanitizedOldName}\\b`, "g"), | ||
| new RegExp(`require.*\\b${sanitizedOldName}\\b`, "g"), | ||
| new RegExp(`use.*\\b${sanitizedOldName}\\b`, "g"), | ||
| ]; | ||
| if (importPatterns.some(p => p.test(fileContent))) { | ||
| dependents.push({ path: fullPath, content: fileContent }); | ||
| } | ||
| }, | ||
| }); | ||
| return dependents; | ||
| } | ||
| /** | ||
| * Generate all rename changes (definition + dependents) and consolidated diff | ||
| */ | ||
| function generateRenameChanges(oldName, newName, sanitizedOld, definitionPath, definitionContent, definitionNewContent, dependents) { | ||
| const pendingWrites = []; | ||
| const diffParts = []; | ||
| // Accumulate dependent file changes (reuse cached content โ no second read) | ||
| for (const dep of dependents) { | ||
| const depNewContent = dep.content.replace(new RegExp(`\\b${sanitizedOld}\\b`, "g"), newName); | ||
| pendingWrites.push({ filePath: dep.path, newContent: depNewContent }); | ||
| diffParts.push(`--- ${dep.path}\n${generateDiff(dep.content, depNewContent)}`); | ||
| } | ||
| // Accumulate definition file change | ||
| pendingWrites.push({ filePath: definitionPath, newContent: definitionNewContent }); | ||
| diffParts.push(`--- ${definitionPath}\n${generateDiff(definitionContent, definitionNewContent)}`); | ||
| const consolidatedDiff = `Renamed "${oldName}" \u2192 "${newName}" in ${pendingWrites.length} files\n\n${diffParts.join("\n\n")}`; | ||
| return { pendingWrites, diff: consolidatedDiff }; | ||
| } | ||
| /** | ||
| * Rename symbol using AST-aware replacement | ||
| * v3.5.3 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk) | ||
| * v3.6.0 - CRITICAL FIX: Pure-functional Phase 1 (no writes to disk) | ||
| * All changes are accumulated in pendingWrites for Phase 2 confirmation. | ||
@@ -184,12 +247,14 @@ */ | ||
| try { | ||
| const validator = new SecurityValidator(params.projectRoot); | ||
| // Validate definition file path | ||
| const defValidation = await validator.validateFilePath(params.filePath); | ||
| if (!defValidation.valid) { | ||
| return { success: false, error: defValidation.error }; | ||
| // Step 1: Validate parameters | ||
| const validation = await validateRenameParams({ | ||
| filePath: params.filePath, | ||
| projectRoot: params.projectRoot, | ||
| oldName: params.oldName, | ||
| }); | ||
| if (!validation.valid) { | ||
| return { success: false, error: validation.error }; | ||
| } | ||
| // Sanitize to prevent regex injection | ||
| const sanitizedOld = sanitizeRegexPattern(params.oldName); | ||
| // Step 1: Rename in definition file using AST | ||
| const content = await fs.readFile(defValidation.resolvedPath, "utf-8"); | ||
| const { resolvedPath, sanitizedOld } = validation; | ||
| // Step 2: Rename in definition file using AST | ||
| const content = await fs.readFile(resolvedPath, "utf-8"); | ||
| const tree = params.parser.parse(content); | ||
@@ -209,51 +274,10 @@ const symbols = params.parser.findSymbols(tree); | ||
| content.substring(targetSymbol.endIndex); | ||
| // Step 2: Find dependent files and cache their content (single read per file) | ||
| const dependents = []; | ||
| async function walkDir(dir) { | ||
| const entries = await fs.readdir(dir, { withFileTypes: true }); | ||
| for (const entry of entries) { | ||
| const fullPath = path.join(dir, entry.name); | ||
| if (entry.isDirectory()) { | ||
| if (!EXCLUDE_DIRS.includes(entry.name)) { | ||
| await walkDir(fullPath); | ||
| } | ||
| } | ||
| else if (entry.isFile()) { | ||
| const ext = path.extname(entry.name); | ||
| if (SUPPORTED_EXTENSIONS.includes(ext)) { | ||
| const depValidation = await validator.validateFilePath(fullPath); | ||
| if (!depValidation.valid) | ||
| continue; | ||
| const fileContent = await fs.readFile(fullPath, "utf-8"); | ||
| const importPatterns = [ | ||
| new RegExp(`import.*\\b${sanitizedOld}\\b`, "g"), | ||
| new RegExp(`from.*\\b${sanitizedOld}\\b`, "g"), | ||
| new RegExp(`require.*\\b${sanitizedOld}\\b`, "g"), | ||
| new RegExp(`use.*\\b${sanitizedOld}\\b`, "g"), | ||
| ]; | ||
| if (importPatterns.some(p => p.test(fileContent))) { | ||
| dependents.push({ path: fullPath, content: fileContent }); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| await walkDir(params.rootDir); | ||
| // Step 3: Accumulate ALL changes in memory โ NO writes in Phase 1 | ||
| const pendingWrites = []; | ||
| const diffParts = []; | ||
| // Accumulate dependent file changes (reuse cached content โ no second read) | ||
| for (const dep of dependents) { | ||
| const depNewContent = dep.content.replace(new RegExp(`\\b${sanitizedOld}\\b`, "g"), params.newName); | ||
| pendingWrites.push({ filePath: dep.path, newContent: depNewContent }); | ||
| diffParts.push(`--- ${dep.path}\n${generateDiff(dep.content, depNewContent)}`); | ||
| } | ||
| // Accumulate definition file change | ||
| pendingWrites.push({ filePath: defValidation.resolvedPath, newContent }); | ||
| diffParts.push(`--- ${defValidation.resolvedPath}\n${generateDiff(content, newContent)}`); | ||
| const consolidatedDiff = `Renamed "${params.oldName}" \u2192 "${params.newName}" in ${pendingWrites.length} files\n\n${diffParts.join("\n\n")}`; | ||
| // Step 3: Find dependent files | ||
| const dependents = await findDependentFiles(params.rootDir, sanitizedOld, params.projectRoot); | ||
| // Step 4: Generate all changes and consolidated diff | ||
| const { pendingWrites, diff } = generateRenameChanges(params.oldName, params.newName, sanitizedOld, resolvedPath, content, newContent, dependents); | ||
| return { | ||
| success: true, | ||
| newContent, | ||
| diff: consolidatedDiff, | ||
| diff, | ||
| pendingWrites, | ||
@@ -281,4 +305,4 @@ }; | ||
| function generateDiff(oldContent, newContent) { | ||
| return generateUnifiedDiff(oldContent, newContent, 3); | ||
| return generateUnifiedDiff(oldContent, newContent); | ||
| } | ||
| //# sourceMappingURL=write.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/operations/write.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/operations/write.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Base Parser - v3.5.3 | ||
| * Base Parser - v3.6.0 | ||
| * Abstract base for all language parsers | ||
@@ -4,0 +4,0 @@ * IMPROVEMENT: replaceSymbol moved here using AST indices (eliminates indexOf fragility) |
| /** | ||
| * Base Parser - v3.5.3 | ||
| * Base Parser - v3.6.0 | ||
| * Abstract base for all language parsers | ||
@@ -4,0 +4,0 @@ * IMPROVEMENT: replaceSymbol moved here using AST indices (eliminates indexOf fragility) |
| /** | ||
| * Dart Tree-sitter Parser - v3.5.3 | ||
| * Dart Tree-sitter Parser - v3.6.0 | ||
| * 100% AST accuracy via WASM | ||
@@ -4,0 +4,0 @@ * CLEANUP: replaceSymbol removed (inherited from BaseParser) |
| /** | ||
| * Dart Tree-sitter Parser - v3.5.3 | ||
| * Dart Tree-sitter Parser - v3.6.0 | ||
| * 100% AST accuracy via WASM | ||
@@ -4,0 +4,0 @@ * CLEANUP: replaceSymbol removed (inherited from BaseParser) |
| /** | ||
| * PHP Parser - v3.5.3 | ||
| * PHP Parser - v3.6.0 | ||
| * CLEANUP: replaceSymbol removed (inherited from BaseParser) | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * PHP Parser - v3.5.3 | ||
| * PHP Parser - v3.6.0 | ||
| * CLEANUP: replaceSymbol removed (inherited from BaseParser) | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Python Parser - v3.5.3 | ||
| * Python Parser - v3.6.0 | ||
| * CLEANUP: replaceSymbol removed (inherited from BaseParser) | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Python Parser - v3.5.3 | ||
| * Python Parser - v3.6.0 | ||
| * CLEANUP: replaceSymbol removed (inherited from BaseParser) | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Parser Registry - v3.5.3 | ||
| * Parser Registry - v3.6.0 | ||
| * Manages all language parsers | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Parser Registry - v3.5.3 | ||
| * Parser Registry - v3.6.0 | ||
| * Manages all language parsers | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * TypeScript Parser - v3.5.3 | ||
| * TypeScript Parser - v3.6.0 | ||
| * Tree-sitter based TS/JS parser | ||
@@ -4,0 +4,0 @@ * CLEANUP: replaceSymbol removed (inherited from BaseParser) |
| /** | ||
| * TypeScript Parser - v3.5.3 | ||
| * TypeScript Parser - v3.6.0 | ||
| * Tree-sitter based TS/JS parser | ||
@@ -4,0 +4,0 @@ * CLEANUP: replaceSymbol removed (inherited from BaseParser) |
| /** | ||
| * Audit Logger - v3.5.3 | ||
| * Audit Logger - v3.6.0 | ||
| * Comprehensive audit trail for all operations | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Audit Logger - v3.5.3 | ||
| * Audit Logger - v3.6.0 | ||
| * Comprehensive audit trail for all operations | ||
@@ -7,2 +7,3 @@ */ | ||
| import * as path from "node:path"; | ||
| import { LOG_DIR } from './logger.js'; | ||
| export class AuditLogger { | ||
@@ -17,3 +18,3 @@ config; | ||
| this.config = { | ||
| logDir: config.logDir || "./.mcp-audit-logs", | ||
| logDir: config.logDir || LOG_DIR, | ||
| maxFileSize: config.maxFileSize || 10 * 1024 * 1024, // 10MB | ||
@@ -20,0 +21,0 @@ maxFiles: config.maxFiles || 10, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"auditLogger.js","sourceRoot":"","sources":["../../../src/utils/auditLogger.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"auditLogger.js","sourceRoot":"","sources":["../../../src/utils/auditLogger.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Backup Manager - v3.5.3 | ||
| * Handles rolling backups for file modifications | ||
| * Backup Manager - v3.6.0 | ||
| * Handles rolling backups in OS temp directory | ||
| */ | ||
| /** | ||
| * Manages file backups with automatic rotation. | ||
| * Backups are stored in OS temp directory to prevent hot-reload loops. | ||
| */ | ||
| export declare class BackupManager { | ||
| private static readonly MAX_BACKUPS; | ||
| private static readonly BACKUP_DIR_NAME; | ||
| private static backupRootCache; | ||
| private static getBackupRoot; | ||
| /** | ||
| * Creates a backup of the specified file before it gets modified | ||
| * Creates a backup of a file before modification. | ||
| * Automatically enforces backup limit per file. | ||
| * | ||
| * @param filePath - Absolute path to file to backup | ||
| * @param projectRoot - Project root directory | ||
| */ | ||
| static createBackup(filePath: string, projectRoot: string): Promise<void>; | ||
| /** | ||
| * Restores a file to its previous state | ||
| * @param steps How many versions to go back (1 = last version) | ||
| * Restores a file from backup. | ||
| * | ||
| * @param filePath - Absolute path to file to restore | ||
| * @param projectRoot - Project root directory | ||
| * @param steps - Number of versions to roll back (default: 1) | ||
| * @returns Result with success status and restored backup name | ||
| */ | ||
@@ -22,3 +35,6 @@ static rollback(filePath: string, projectRoot: string, steps?: number): Promise<{ | ||
| /** | ||
| * Deletes all backups for a project | ||
| * Removes all backups for a project. | ||
| * | ||
| * @param projectRoot - Project root directory | ||
| * @returns Result with success status and count of deleted files | ||
| */ | ||
@@ -30,6 +46,11 @@ static clean(projectRoot: string): Promise<{ | ||
| }>; | ||
| private static enforceBackupLimit; | ||
| /** | ||
| * Private helper to delete oldest backups if exceeding limit | ||
| * Lists all available backups for a file. | ||
| * | ||
| * @param filePath - Absolute path to file | ||
| * @param projectRoot - Project root directory | ||
| * @returns Array of backup file paths, sorted newest first | ||
| */ | ||
| private static enforceBackupLimit; | ||
| static listBackups(filePath: string, projectRoot: string): Promise<string[]>; | ||
| } |
| /** | ||
| * Backup Manager - v3.5.3 | ||
| * Handles rolling backups for file modifications | ||
| * Backup Manager - v3.6.0 | ||
| * Handles rolling backups in OS temp directory | ||
| */ | ||
@@ -8,40 +8,66 @@ import * as fs from "node:fs/promises"; | ||
| import * as crypto from "node:crypto"; | ||
| import { tmpdir } from "os"; | ||
| import { existsSync, mkdirSync } from "fs"; | ||
| import { MAX_BACKUPS_PER_FILE, HASH_LENGTH } from './constants.js'; | ||
| /** | ||
| * Manages file backups with automatic rotation. | ||
| * Backups are stored in OS temp directory to prevent hot-reload loops. | ||
| */ | ||
| export class BackupManager { | ||
| static MAX_BACKUPS = 5; | ||
| static BACKUP_DIR_NAME = ".mcp-backups"; | ||
| static MAX_BACKUPS = MAX_BACKUPS_PER_FILE; | ||
| static backupRootCache = new Map(); | ||
| static getBackupRoot(projectRoot) { | ||
| if (this.backupRootCache.has(projectRoot)) { | ||
| return this.backupRootCache.get(projectRoot); | ||
| } | ||
| const projectHash = crypto.createHash('md5') | ||
| .update(projectRoot) | ||
| .digest('hex') | ||
| .substring(0, HASH_LENGTH); | ||
| const backupRoot = path.join(tmpdir(), 'mcp-backups', projectHash); | ||
| if (!existsSync(backupRoot)) { | ||
| mkdirSync(backupRoot, { recursive: true }); | ||
| } | ||
| this.backupRootCache.set(projectRoot, backupRoot); | ||
| return backupRoot; | ||
| } | ||
| /** | ||
| * Creates a backup of the specified file before it gets modified | ||
| * Creates a backup of a file before modification. | ||
| * Automatically enforces backup limit per file. | ||
| * | ||
| * @param filePath - Absolute path to file to backup | ||
| * @param projectRoot - Project root directory | ||
| */ | ||
| static async createBackup(filePath, projectRoot) { | ||
| try { | ||
| // Check if original file exists before backing up | ||
| await fs.access(filePath); | ||
| } | ||
| catch { | ||
| // File doesn't exist yet (it's a new file), no backup needed | ||
| return; | ||
| } | ||
| const backupDir = path.join(projectRoot, this.BACKUP_DIR_NAME); | ||
| await fs.mkdir(backupDir, { recursive: true }); | ||
| // Generate a safe identifier for the file (hash of its path to avoid deep nesting in backup dir) | ||
| const backupDir = this.getBackupRoot(projectRoot); | ||
| if (!existsSync(backupDir)) { | ||
| mkdirSync(backupDir, { recursive: true }); | ||
| } | ||
| const relativePath = path.relative(projectRoot, filePath); | ||
| const safeName = crypto.createHash('md5').update(relativePath).digest('hex').substring(0, 8) + "_" + path.basename(filePath); | ||
| // Save backup with timestamp | ||
| const safeName = crypto.createHash('md5').update(relativePath).digest('hex').substring(0, HASH_LENGTH) + "_" + path.basename(filePath); | ||
| const timestamp = Date.now(); | ||
| const backupFileName = `${safeName}_${timestamp}.bak`; | ||
| const backupFilePath = path.join(backupDir, backupFileName); | ||
| // Copy original file to backup | ||
| await fs.copyFile(filePath, backupFilePath); | ||
| // Enforce rolling backup limit per file | ||
| await this.enforceBackupLimit(backupDir, safeName); | ||
| } | ||
| /** | ||
| * Restores a file to its previous state | ||
| * @param steps How many versions to go back (1 = last version) | ||
| * Restores a file from backup. | ||
| * | ||
| * @param filePath - Absolute path to file to restore | ||
| * @param projectRoot - Project root directory | ||
| * @param steps - Number of versions to roll back (default: 1) | ||
| * @returns Result with success status and restored backup name | ||
| */ | ||
| static async rollback(filePath, projectRoot, steps = 1) { | ||
| try { | ||
| const backupDir = path.join(projectRoot, this.BACKUP_DIR_NAME); | ||
| const backupDir = this.getBackupRoot(projectRoot); | ||
| const relativePath = path.relative(projectRoot, filePath); | ||
| const safeName = crypto.createHash('md5').update(relativePath).digest('hex').substring(0, 8) + "_" + path.basename(filePath); | ||
| const safeName = crypto.createHash('md5').update(relativePath).digest('hex').substring(0, HASH_LENGTH) + "_" + path.basename(filePath); | ||
| let files; | ||
@@ -52,16 +78,13 @@ try { | ||
| catch { | ||
| return { success: false, error: "No backups found for this project." }; | ||
| return { success: false, error: `No backups directory found for project "${projectRoot}"` }; | ||
| } | ||
| // Filter backups for this specific file and sort by timestamp descending (newest first) | ||
| const fileBackups = files | ||
| .filter(f => f.startsWith(safeName + "_") && f.endsWith(".bak")) | ||
| .sort((a, b) => b.localeCompare(a)); // String comparison of timestamps works because they are unix ms | ||
| .sort((a, b) => b.localeCompare(a)); | ||
| if (fileBackups.length === 0) { | ||
| return { success: false, error: `No backups found for file: ${path.basename(filePath)}` }; | ||
| return { success: false, error: `No backups found for file "${path.basename(filePath)}" in project "${projectRoot}"` }; | ||
| } | ||
| // Determine which backup to restore | ||
| const targetIndex = Math.min(steps - 1, fileBackups.length - 1); | ||
| const targetBackup = fileBackups[targetIndex]; | ||
| const backupFilePath = path.join(backupDir, targetBackup); | ||
| // Restore: copy backup back to original location | ||
| await fs.copyFile(backupFilePath, filePath); | ||
@@ -75,7 +98,10 @@ return { success: true, restoredFrom: targetBackup }; | ||
| /** | ||
| * Deletes all backups for a project | ||
| * Removes all backups for a project. | ||
| * | ||
| * @param projectRoot - Project root directory | ||
| * @returns Result with success status and count of deleted files | ||
| */ | ||
| static async clean(projectRoot) { | ||
| try { | ||
| const backupDir = path.join(projectRoot, this.BACKUP_DIR_NAME); | ||
| const backupDir = this.getBackupRoot(projectRoot); | ||
| try { | ||
@@ -100,3 +126,2 @@ const files = await fs.readdir(backupDir); | ||
| if (e.code === 'ENOENT') { | ||
| // Directory doesn't exist | ||
| return { success: true, deletedCount: 0 }; | ||
@@ -111,5 +136,2 @@ } | ||
| } | ||
| /** | ||
| * Private helper to delete oldest backups if exceeding limit | ||
| */ | ||
| static async enforceBackupLimit(backupDir, safeName) { | ||
@@ -120,4 +142,3 @@ try { | ||
| .filter(f => f.startsWith(safeName + "_") && f.endsWith(".bak")) | ||
| .sort((a, b) => b.localeCompare(a)); // Newest first | ||
| // If we have more than MAX_BACKUPS, delete the oldest ones | ||
| .sort((a, b) => b.localeCompare(a)); | ||
| if (fileBackups.length > this.MAX_BACKUPS) { | ||
@@ -131,7 +152,28 @@ const backupsToDelete = fileBackups.slice(this.MAX_BACKUPS); | ||
| catch (error) { | ||
| // Non-fatal, just logging silently | ||
| console.error(`Failed to enforce backup limits in ${backupDir}`, error); | ||
| } | ||
| } | ||
| /** | ||
| * Lists all available backups for a file. | ||
| * | ||
| * @param filePath - Absolute path to file | ||
| * @param projectRoot - Project root directory | ||
| * @returns Array of backup file paths, sorted newest first | ||
| */ | ||
| static async listBackups(filePath, projectRoot) { | ||
| try { | ||
| const backupDir = this.getBackupRoot(projectRoot); | ||
| const relativePath = path.relative(projectRoot, filePath); | ||
| const safeName = crypto.createHash('md5').update(relativePath).digest('hex').substring(0, HASH_LENGTH) + "_" + path.basename(filePath); | ||
| const files = await fs.readdir(backupDir); | ||
| return files | ||
| .filter(f => f.startsWith(safeName + "_") && f.endsWith(".bak")) | ||
| .map(f => path.join(backupDir, f)) | ||
| .sort((a, b) => b.localeCompare(a)); | ||
| } | ||
| catch { | ||
| return []; | ||
| } | ||
| } | ||
| } | ||
| //# sourceMappingURL=backupManager.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"backupManager.js","sourceRoot":"","sources":["../../../src/utils/backupManager.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"backupManager.js","sourceRoot":"","sources":["../../../src/utils/backupManager.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Constants - Centralized configuration | ||
| * v3.5.3 | ||
| * v3.6.0 | ||
| */ | ||
@@ -10,4 +10,15 @@ export declare const EXCLUDE_DIRS: string[]; | ||
| export declare const MAX_FILE_SIZE_BYTES: number; | ||
| export declare const MAX_FILES_SEARCH = 2000; | ||
| export declare const OPERATION_TIMEOUT_MS = 30000; | ||
| export declare const REGEX_TIMEOUT_MS = 1000; | ||
| export declare const LOCK_TIMEOUT_MS = 30000; | ||
| export declare const LOCK_STALE_MS = 30000; | ||
| export declare const LOCK_RETRY_COUNT = 10; | ||
| export declare const LOCK_RETRY_MIN_MS = 100; | ||
| export declare const LOCK_RETRY_MAX_MS = 1000; | ||
| export declare const LOCK_RETRY_FACTOR = 2; | ||
| export declare const MAX_BACKUPS_PER_FILE = 5; | ||
| export declare const HASH_LENGTH = 8; | ||
| export declare const MAX_CONCURRENT_OPS = 100; | ||
| export declare const REGEX_TIMEOUT_MS = 1000; | ||
| export declare const DIFF_CONTEXT_LINES = 3; | ||
| export declare const DIFF_MAX_FILE_LINES = 5000; |
| /** | ||
| * Constants - Centralized configuration | ||
| * v3.5.3 | ||
| * v3.6.0 | ||
| */ | ||
| // Directory exclusions | ||
| export const EXCLUDE_DIRS = [ | ||
@@ -15,2 +16,3 @@ "node_modules", | ||
| ]; | ||
| // Supported file extensions | ||
| export const SUPPORTED_EXTENSIONS = [ | ||
@@ -28,8 +30,25 @@ ".ts", | ||
| ]; | ||
| // File and size limits | ||
| export const MAX_FILES_REPO_MAP = 500; | ||
| export const MAX_TOTAL_SIZE_BYTES = 50 * 1024 * 1024; // 50MB | ||
| export const MAX_FILE_SIZE_BYTES = 10 * 1024 * 1024; // 10MB | ||
| export const MAX_FILES_SEARCH = 2000; | ||
| // Timeout configurations | ||
| export const OPERATION_TIMEOUT_MS = 30000; // 30s | ||
| export const REGEX_TIMEOUT_MS = 1000; // 1s for regex operations | ||
| export const LOCK_TIMEOUT_MS = 30000; // 30s for file locks | ||
| export const LOCK_STALE_MS = 30000; // 30s stale detection | ||
| // Retry configurations | ||
| export const LOCK_RETRY_COUNT = 10; | ||
| export const LOCK_RETRY_MIN_MS = 100; | ||
| export const LOCK_RETRY_MAX_MS = 1000; | ||
| export const LOCK_RETRY_FACTOR = 2; | ||
| // Backup configurations | ||
| export const MAX_BACKUPS_PER_FILE = 5; | ||
| export const HASH_LENGTH = 8; | ||
| // Concurrency limits | ||
| export const MAX_CONCURRENT_OPS = 100; | ||
| export const REGEX_TIMEOUT_MS = 1000; // 1s for regex operations | ||
| // Diff configurations | ||
| export const DIFF_CONTEXT_LINES = 3; | ||
| export const DIFF_MAX_FILE_LINES = 5000; | ||
| //# sourceMappingURL=constants.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,cAAc;IACd,UAAU;IACV,aAAa;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,CAAC,MAAM;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,0BAA0B"} | ||
| {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,uBAAuB;AACvB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,cAAc;IACd,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,cAAc;IACd,UAAU;IACV,aAAa;CACd,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC;AAEF,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,yBAAyB;AACzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,CAAC,MAAM;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,0BAA0B;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,qBAAqB;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,sBAAsB;AAE1D,uBAAuB;AACvB,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,wBAAwB;AACxB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAE7B,qBAAqB;AACrB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAEtC,sBAAsB;AACtB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC"} |
| /** | ||
| * Diff Engine - v3.5.3 | ||
| * LCS-based unified diff with memory safety cap | ||
| * Diff Utilities - v3.6.0 | ||
| * Uses diff-match-patch for efficient diffing | ||
| */ | ||
| export interface DiffLine { | ||
| type: 'add' | 'remove' | 'context'; | ||
| content: string; | ||
| lineNumber?: number; | ||
| } | ||
| /** | ||
| * Generate unified diff using LCS algorithm | ||
| * Falls back to simple diff for large files to prevent OOM | ||
| * Generates a unified diff using Myers algorithm. | ||
| * Falls back to simple diff for files exceeding line limit. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Unified diff in patch format | ||
| */ | ||
| export declare function generateUnifiedDiff(oldContent: string, newContent: string, contextLines?: number): string; | ||
| export declare function generateUnifiedDiff(oldText: string, newText: string): string; | ||
| /** | ||
| * Simple line-by-line diff (O(n) memory fallback for large files) | ||
| * Generates a simple diff summary for large files. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Simple line count summary | ||
| */ | ||
| export declare function generateSimpleDiff(oldContent: string, newContent: string): string; | ||
| export declare function generateSimpleDiff(oldText: string, newText: string): string; | ||
| /** | ||
| * Generates a compact diff showing only changes (no context). | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Compact diff with + and - prefixes | ||
| */ | ||
| export declare function generateCompactDiff(oldText: string, newText: string): string; | ||
| /** | ||
| * Automatically selects compact or full diff based on size. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Compact diff if full diff exceeds threshold, otherwise full diff | ||
| */ | ||
| export declare function generateSmartDiff(oldText: string, newText: string): string; | ||
| export declare function lcs(lines1: string[], lines2: string[]): string[]; |
+91
-101
| /** | ||
| * Diff Engine - v3.5.3 | ||
| * LCS-based unified diff with memory safety cap | ||
| * Diff Utilities - v3.6.0 | ||
| * Uses diff-match-patch for efficient diffing | ||
| */ | ||
| const MAX_DIFF_LINES = 5000; | ||
| import DiffMatchPatch from 'diff-match-patch'; | ||
| import { DIFF_MAX_FILE_LINES } from './constants.js'; | ||
| const dmp = new DiffMatchPatch(); | ||
| const COMPACT_DIFF_THRESHOLD = 2048; | ||
| /** | ||
| * Longest Common Subsequence algorithm | ||
| * Generates a unified diff using Myers algorithm. | ||
| * Falls back to simple diff for files exceeding line limit. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Unified diff in patch format | ||
| */ | ||
| function lcs(a, b) { | ||
| const m = a.length; | ||
| const n = b.length; | ||
| const dp = Array(m + 1).fill(0).map(() => Array(n + 1).fill(0)); | ||
| export function generateUnifiedDiff(oldText, newText) { | ||
| const oldLines = oldText.split('\n'); | ||
| const newLines = newText.split('\n'); | ||
| if (oldLines.length > DIFF_MAX_FILE_LINES || newLines.length > DIFF_MAX_FILE_LINES) { | ||
| return generateSimpleDiff(oldText, newText); | ||
| } | ||
| const diffs = dmp.diff_main(oldText, newText); | ||
| dmp.diff_cleanupSemantic(diffs); | ||
| const patch = dmp.patch_make(oldText, diffs); | ||
| return dmp.patch_toText(patch); | ||
| } | ||
| /** | ||
| * Generates a simple diff summary for large files. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Simple line count summary | ||
| */ | ||
| export function generateSimpleDiff(oldText, newText) { | ||
| const oldLines = oldText.split('\n'); | ||
| const newLines = newText.split('\n'); | ||
| return `File too large for detailed diff. | ||
| Old: ${oldLines.length} lines | ||
| New: ${newLines.length} lines | ||
| Changed: ${Math.abs(oldLines.length - newLines.length)} lines`; | ||
| } | ||
| /** | ||
| * Generates a compact diff showing only changes (no context). | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Compact diff with + and - prefixes | ||
| */ | ||
| export function generateCompactDiff(oldText, newText) { | ||
| const diffs = dmp.diff_main(oldText, newText); | ||
| dmp.diff_cleanupSemantic(diffs); | ||
| const compactLines = []; | ||
| for (const [op, text] of diffs) { | ||
| if (op === 0) | ||
| continue; | ||
| const prefix = op === 1 ? '+ ' : '- '; | ||
| const lines = text.split('\n').filter(line => line.trim().length > 0); | ||
| for (const line of lines) { | ||
| compactLines.push(prefix + line); | ||
| } | ||
| } | ||
| return compactLines.join('\n'); | ||
| } | ||
| /** | ||
| * Automatically selects compact or full diff based on size. | ||
| * | ||
| * @param oldText - Original file content | ||
| * @param newText - Modified file content | ||
| * @returns Compact diff if full diff exceeds threshold, otherwise full diff | ||
| */ | ||
| export function generateSmartDiff(oldText, newText) { | ||
| const fullDiff = generateUnifiedDiff(oldText, newText); | ||
| if (fullDiff.length > COMPACT_DIFF_THRESHOLD) { | ||
| return generateCompactDiff(oldText, newText); | ||
| } | ||
| return fullDiff; | ||
| } | ||
| export function lcs(lines1, lines2) { | ||
| const m = lines1.length; | ||
| const n = lines2.length; | ||
| if (m === 0 || n === 0) | ||
| return []; | ||
| if (m > DIFF_MAX_FILE_LINES || n > DIFF_MAX_FILE_LINES) | ||
| return []; | ||
| const dp = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0)); | ||
| for (let i = 1; i <= m; i++) { | ||
| for (let j = 1; j <= n; j++) { | ||
| if (a[i - 1] === b[j - 1]) { | ||
| if (lines1[i - 1] === lines2[j - 1]) { | ||
| dp[i][j] = dp[i - 1][j - 1] + 1; | ||
@@ -23,103 +97,19 @@ } | ||
| } | ||
| return dp; | ||
| } | ||
| /** | ||
| * Generate unified diff using LCS algorithm | ||
| * Falls back to simple diff for large files to prevent OOM | ||
| */ | ||
| export function generateUnifiedDiff(oldContent, newContent, contextLines = 3) { | ||
| const oldLines = oldContent.split('\n'); | ||
| const newLines = newContent.split('\n'); | ||
| // SAFETY: Fall back to simple diff for large files (LCS is O(n*m) memory) | ||
| if (oldLines.length > MAX_DIFF_LINES || newLines.length > MAX_DIFF_LINES) { | ||
| return generateSimpleDiff(oldContent, newContent); | ||
| } | ||
| const dp = lcs(oldLines, newLines); | ||
| const diff = []; | ||
| // Backtrack to find differences | ||
| let i = oldLines.length; | ||
| let j = newLines.length; | ||
| while (i > 0 || j > 0) { | ||
| if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) { | ||
| diff.unshift({ type: 'context', content: oldLines[i - 1], lineNumber: i }); | ||
| const result = []; | ||
| let i = m, j = n; | ||
| while (i > 0 && j > 0) { | ||
| if (lines1[i - 1] === lines2[j - 1]) { | ||
| result.unshift(lines1[i - 1]); | ||
| i--; | ||
| j--; | ||
| } | ||
| else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) { | ||
| diff.unshift({ type: 'add', content: newLines[j - 1], lineNumber: j }); | ||
| j--; | ||
| } | ||
| else if (i > 0 && (j === 0 || dp[i][j - 1] < dp[i - 1][j])) { | ||
| diff.unshift({ type: 'remove', content: oldLines[i - 1], lineNumber: i }); | ||
| else if (dp[i - 1][j] > dp[i][j - 1]) { | ||
| i--; | ||
| } | ||
| } | ||
| // Format output with context | ||
| const output = []; | ||
| let inHunk = false; | ||
| let contextCount = 0; | ||
| for (let idx = 0; idx < diff.length; idx++) { | ||
| const line = diff[idx]; | ||
| if (line.type === 'context') { | ||
| if (inHunk) { | ||
| contextCount++; | ||
| if (contextCount <= contextLines) { | ||
| output.push(` ${line.content}`); | ||
| } | ||
| else { | ||
| inHunk = false; | ||
| contextCount = 0; | ||
| } | ||
| } | ||
| else { | ||
| // Check if change is coming | ||
| const hasChangeAhead = diff.slice(idx, idx + contextLines + 1) | ||
| .some(l => l.type !== 'context'); | ||
| if (hasChangeAhead) { | ||
| output.push(` ${line.content}`); | ||
| } | ||
| } | ||
| } | ||
| else { | ||
| if (!inHunk) { | ||
| // Add context before change | ||
| const contextBefore = diff.slice(Math.max(0, idx - contextLines), idx) | ||
| .filter(l => l.type === 'context'); | ||
| contextBefore.forEach(l => output.push(` ${l.content}`)); | ||
| } | ||
| inHunk = true; | ||
| contextCount = 0; | ||
| if (line.type === 'add') { | ||
| output.push(`+ ${line.content}`); | ||
| } | ||
| else { | ||
| output.push(`- ${line.content}`); | ||
| } | ||
| j--; | ||
| } | ||
| } | ||
| return output.join('\n'); | ||
| return result; | ||
| } | ||
| /** | ||
| * Simple line-by-line diff (O(n) memory fallback for large files) | ||
| */ | ||
| export function generateSimpleDiff(oldContent, newContent) { | ||
| const oldLines = oldContent.split('\n'); | ||
| const newLines = newContent.split('\n'); | ||
| const diff = []; | ||
| const maxLen = Math.max(oldLines.length, newLines.length); | ||
| for (let i = 0; i < maxLen; i++) { | ||
| const oldLine = oldLines[i]; | ||
| const newLine = newLines[i]; | ||
| if (oldLine === newLine) { | ||
| diff.push(` ${oldLine || ''}`); | ||
| } | ||
| else { | ||
| if (oldLine !== undefined) | ||
| diff.push(`- ${oldLine}`); | ||
| if (newLine !== undefined) | ||
| diff.push(`+ ${newLine}`); | ||
| } | ||
| } | ||
| return diff.join('\n'); | ||
| } | ||
| //# sourceMappingURL=diff.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/utils/diff.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/utils/diff.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;AACjC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAQpC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAe;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACnF,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO;OACF,QAAQ,CAAC,MAAM;OACf,QAAQ,CAAC,MAAM;WACX,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,OAAe;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9C,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,EAAE,KAAK,CAAC;YAAE,SAAS;QAEvB,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEtE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAe;IAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,QAAQ,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;QAC7C,OAAO,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAAgB,EAAE,MAAgB;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG,mBAAmB,IAAI,CAAC,GAAG,mBAAmB;QAAE,OAAO,EAAE,CAAC;IAElE,MAAM,EAAE,GAAe,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"} |
| /** | ||
| * File Lock Manager - v3.5.3 | ||
| * Prevents concurrent writes to same file | ||
| * File Lock Manager - v3.6.0 | ||
| * Filesystem-based locks for multi-process safety | ||
| */ | ||
| interface LockInfo { | ||
| clientId: string; | ||
| operation: string; | ||
| timestamp: number; | ||
| timeout: NodeJS.Timeout; | ||
| } | ||
| /** | ||
| * Manages filesystem-based locks for multi-process safety. | ||
| * Locks are stored in OS temp directory to prevent conflicts. | ||
| */ | ||
| export declare class FileLockManager { | ||
| private locks; | ||
| private readonly lockTimeout; | ||
| constructor(lockTimeoutMs?: number); | ||
| private lockDir; | ||
| private activeLocks; | ||
| /** | ||
| * Acquire lock on file | ||
| * Creates a new FileLockManager instance. | ||
| * Initializes lock directory in OS temp with project-specific hash. | ||
| */ | ||
| acquireLock(filePath: string, clientId: string, operation: string): Promise<{ | ||
| acquired: boolean; | ||
| error?: string; | ||
| lockedBy?: string; | ||
| }>; | ||
| constructor(); | ||
| /** | ||
| * Release lock on file | ||
| * Acquires an exclusive lock on a file. | ||
| * | ||
| * @param filePath - Absolute path to file to lock | ||
| * @param timeoutMs - Stale lock timeout in milliseconds (default: 30000) | ||
| * @returns Release function to unlock the file | ||
| * @throws Error if lock cannot be acquired after retries | ||
| */ | ||
| releaseLock(filePath: string, clientId: string): boolean; | ||
| acquireLock(filePath: string, timeoutMs?: number): Promise<() => Promise<void>>; | ||
| /** | ||
| * Check if file is locked | ||
| * Checks if a file is currently locked. | ||
| * | ||
| * @param filePath - Absolute path to file | ||
| * @returns True if file is locked, false otherwise | ||
| */ | ||
| isLocked(filePath: string): boolean; | ||
| isLocked(filePath: string): Promise<boolean>; | ||
| /** | ||
| * Get lock info | ||
| * Releases all active locks managed by this instance. | ||
| */ | ||
| getLockInfo(filePath: string): LockInfo | null; | ||
| /** | ||
| * Force release lock (admin only) | ||
| */ | ||
| forceRelease(filePath: string): boolean; | ||
| /** | ||
| * Release all locks for client | ||
| */ | ||
| releaseAllForClient(clientId: string): number; | ||
| /** | ||
| * Get all active locks | ||
| */ | ||
| getActiveLocks(): Array<{ | ||
| path: string; | ||
| info: LockInfo; | ||
| }>; | ||
| /** | ||
| * Clear all locks | ||
| */ | ||
| clearAll(): void; | ||
| /** | ||
| * Normalize path for consistent comparison | ||
| */ | ||
| private normalizePath; | ||
| releaseAll(): Promise<void>; | ||
| } | ||
| /** | ||
| * Global lock manager instance | ||
| */ | ||
| export declare const globalLockManager: FileLockManager; | ||
| export {}; |
+66
-100
| /** | ||
| * File Lock Manager - v3.5.3 | ||
| * Prevents concurrent writes to same file | ||
| * File Lock Manager - v3.6.0 | ||
| * Filesystem-based locks for multi-process safety | ||
| */ | ||
| import lockfile from 'proper-lockfile'; | ||
| import { tmpdir } from 'os'; | ||
| import { mkdirSync, existsSync } from 'fs'; | ||
| import path from 'path'; | ||
| import crypto from 'crypto'; | ||
| import { LOCK_TIMEOUT_MS, LOCK_RETRY_COUNT, LOCK_RETRY_MIN_MS, LOCK_RETRY_MAX_MS, LOCK_RETRY_FACTOR, HASH_LENGTH } from './constants.js'; | ||
| /** | ||
| * Manages filesystem-based locks for multi-process safety. | ||
| * Locks are stored in OS temp directory to prevent conflicts. | ||
| */ | ||
| export class FileLockManager { | ||
| locks = new Map(); | ||
| lockTimeout; | ||
| constructor(lockTimeoutMs = 30000) { | ||
| this.lockTimeout = lockTimeoutMs; | ||
| } | ||
| lockDir; | ||
| activeLocks = new Map(); | ||
| /** | ||
| * Acquire lock on file | ||
| * Creates a new FileLockManager instance. | ||
| * Initializes lock directory in OS temp with project-specific hash. | ||
| */ | ||
| async acquireLock(filePath, clientId, operation) { | ||
| const normalizedPath = this.normalizePath(filePath); | ||
| const existingLock = this.locks.get(normalizedPath); | ||
| if (existingLock) { | ||
| return { | ||
| acquired: false, | ||
| error: `File locked by ${existingLock.operation} (client: ${existingLock.clientId})`, | ||
| lockedBy: existingLock.clientId, | ||
| }; | ||
| constructor() { | ||
| const projectHash = crypto.createHash('md5') | ||
| .update(process.cwd()) | ||
| .digest('hex') | ||
| .substring(0, HASH_LENGTH); | ||
| this.lockDir = path.join(tmpdir(), `mcp-locks-${projectHash}`); | ||
| if (!existsSync(this.lockDir)) { | ||
| mkdirSync(this.lockDir, { recursive: true }); | ||
| } | ||
| // Create lock with auto-release timeout | ||
| const timeout = setTimeout(() => { | ||
| this.releaseLock(filePath, clientId); | ||
| console.warn(`โ ๏ธ Lock auto-released for ${normalizedPath} (timeout)`); | ||
| }, this.lockTimeout); | ||
| this.locks.set(normalizedPath, { | ||
| clientId, | ||
| operation, | ||
| timestamp: Date.now(), | ||
| timeout, | ||
| }); | ||
| return { acquired: true }; | ||
| } | ||
| /** | ||
| * Release lock on file | ||
| * Acquires an exclusive lock on a file. | ||
| * | ||
| * @param filePath - Absolute path to file to lock | ||
| * @param timeoutMs - Stale lock timeout in milliseconds (default: 30000) | ||
| * @returns Release function to unlock the file | ||
| * @throws Error if lock cannot be acquired after retries | ||
| */ | ||
| releaseLock(filePath, clientId) { | ||
| const normalizedPath = this.normalizePath(filePath); | ||
| const lock = this.locks.get(normalizedPath); | ||
| if (!lock) { | ||
| return false; // No lock exists | ||
| async acquireLock(filePath, timeoutMs = LOCK_TIMEOUT_MS) { | ||
| const normalizedPath = path.resolve(filePath); | ||
| try { | ||
| const release = await lockfile.lock(normalizedPath, { | ||
| stale: timeoutMs, | ||
| retries: { | ||
| retries: LOCK_RETRY_COUNT, | ||
| minTimeout: LOCK_RETRY_MIN_MS, | ||
| maxTimeout: LOCK_RETRY_MAX_MS, | ||
| factor: LOCK_RETRY_FACTOR | ||
| }, | ||
| lockfilePath: path.join(this.lockDir, `${crypto.createHash('md5').update(normalizedPath).digest('hex')}.lock`) | ||
| }); | ||
| this.activeLocks.set(normalizedPath, release); | ||
| return async () => { | ||
| await release(); | ||
| this.activeLocks.delete(normalizedPath); | ||
| }; | ||
| } | ||
| if (lock.clientId !== clientId) { | ||
| return false; // Lock owned by different client | ||
| catch (error) { | ||
| throw new Error(`Failed to acquire lock for "${filePath}": ${error.message || String(error)}`); | ||
| } | ||
| clearTimeout(lock.timeout); | ||
| this.locks.delete(normalizedPath); | ||
| return true; | ||
| } | ||
| /** | ||
| * Check if file is locked | ||
| * Checks if a file is currently locked. | ||
| * | ||
| * @param filePath - Absolute path to file | ||
| * @returns True if file is locked, false otherwise | ||
| */ | ||
| isLocked(filePath) { | ||
| const normalizedPath = this.normalizePath(filePath); | ||
| return this.locks.has(normalizedPath); | ||
| } | ||
| /** | ||
| * Get lock info | ||
| */ | ||
| getLockInfo(filePath) { | ||
| const normalizedPath = this.normalizePath(filePath); | ||
| return this.locks.get(normalizedPath) || null; | ||
| } | ||
| /** | ||
| * Force release lock (admin only) | ||
| */ | ||
| forceRelease(filePath) { | ||
| const normalizedPath = this.normalizePath(filePath); | ||
| const lock = this.locks.get(normalizedPath); | ||
| if (lock) { | ||
| clearTimeout(lock.timeout); | ||
| this.locks.delete(normalizedPath); | ||
| return true; | ||
| async isLocked(filePath) { | ||
| const normalizedPath = path.resolve(filePath); | ||
| try { | ||
| const lockfilePath = path.join(this.lockDir, `${crypto.createHash('md5').update(normalizedPath).digest('hex')}.lock`); | ||
| return await lockfile.check(normalizedPath, { lockfilePath }); | ||
| } | ||
| return false; | ||
| } | ||
| /** | ||
| * Release all locks for client | ||
| */ | ||
| releaseAllForClient(clientId) { | ||
| let count = 0; | ||
| for (const [path, lock] of this.locks.entries()) { | ||
| if (lock.clientId === clientId) { | ||
| clearTimeout(lock.timeout); | ||
| this.locks.delete(path); | ||
| count++; | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| return count; | ||
| } | ||
| /** | ||
| * Get all active locks | ||
| * Releases all active locks managed by this instance. | ||
| */ | ||
| getActiveLocks() { | ||
| return Array.from(this.locks.entries()).map(([path, info]) => ({ | ||
| path, | ||
| info, | ||
| })); | ||
| async releaseAll() { | ||
| const releases = Array.from(this.activeLocks.values()); | ||
| await Promise.all(releases.map(release => release())); | ||
| this.activeLocks.clear(); | ||
| } | ||
| /** | ||
| * Clear all locks | ||
| */ | ||
| clearAll() { | ||
| for (const lock of this.locks.values()) { | ||
| clearTimeout(lock.timeout); | ||
| } | ||
| this.locks.clear(); | ||
| } | ||
| /** | ||
| * Normalize path for consistent comparison | ||
| */ | ||
| normalizePath(filePath) { | ||
| return filePath.replace(/\\/g, '/').toLowerCase(); | ||
| } | ||
| } | ||
| /** | ||
| * Global lock manager instance | ||
| */ | ||
| export const globalLockManager = new FileLockManager(); | ||
| //# sourceMappingURL=fileLock.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/utils/fileLock.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/utils/fileLock.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Rate Limiter - v3.5.3 | ||
| * Rate Limiter - v3.6.0 | ||
| * Token bucket algorithm for DoS protection | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Rate Limiter - v3.5.3 | ||
| * Rate Limiter - v3.6.0 | ||
| * Token bucket algorithm for DoS protection | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Safe Regex - v3.5.3 | ||
| * Safe Regex - v3.6.0 | ||
| * CRITICAL FIX: Real ReDoS protection via worker_threads | ||
@@ -4,0 +4,0 @@ * |
| /** | ||
| * Safe Regex - v3.5.3 | ||
| * Safe Regex - v3.6.0 | ||
| * CRITICAL FIX: Real ReDoS protection via worker_threads | ||
@@ -4,0 +4,0 @@ * |
| /** | ||
| * File Streaming - v3.5.3 | ||
| * File Streaming - v3.6.0 | ||
| * Stream large files in chunks to avoid memory exhaustion | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * File Streaming - v3.5.3 | ||
| * File Streaming - v3.6.0 | ||
| * Stream large files in chunks to avoid memory exhaustion | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Telemetry - v3.5.3 | ||
| * Telemetry - v3.6.0 | ||
| * Metrics collection and monitoring | ||
@@ -4,0 +4,0 @@ */ |
| /** | ||
| * Telemetry - v3.5.3 | ||
| * Telemetry - v3.6.0 | ||
| * Metrics collection and monitoring | ||
@@ -4,0 +4,0 @@ */ |
+5
-5
@@ -1,6 +0,6 @@ | ||
| # mcp-code-context v3.5.3 | ||
| # mcp-code-context v3.6.0 | ||
| > A Model Context Protocol (MCP) server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with middleware pipeline. | ||
| ## What's New in v3.5.3 | ||
| ## What's New in v3.6.0 | ||
@@ -145,3 +145,3 @@ ๐ **Production Hardening**: | ||
| ### Write Tools (v3.5.3 Two-Phase Workflow) | ||
| ### Write Tools (v3.6.0 Two-Phase Workflow) | ||
@@ -152,3 +152,3 @@ All write tools follow a **Two-Phase Workflow**: | ||
| **Important Notes (v3.5.3):** | ||
| **Important Notes (v3.6.0):** | ||
| - โ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings. | ||
@@ -241,3 +241,3 @@ - โ **Parameter Brace Handling**: Methods with braces in parameters (e.g., `{int? cart}`) are now handled correctly. | ||
| ### Additional Tools (v3.5.3) | ||
| ### Additional Tools (v3.6.0) | ||
@@ -244,0 +244,0 @@ #### 11. `parse_file` |
+28
-10
| { | ||
| "name": "mcp-code-context", | ||
| "version": "3.5.3", | ||
| "description": "Powerful MCP server with Tree-sitter WASM parsers for 100% AST accuracy. Zero native dependencies. Production-ready with streaming, telemetry, audit logging, rate limiting, file locking, and ReDoS protection. Supports TypeScript, JavaScript, PHP, Dart, and Python.", | ||
| "version": "3.6.0", | ||
| "description": "Powerful MCP server with Tree-sitter WASM parsers for 100% AST accuracy. Zero native dependencies. Production-ready with persistent caching, structured logging, file watching, fuzzy search, rate limiting, file locking, and ReDoS protection. Supports TypeScript, JavaScript, PHP, Dart, and Python.", | ||
| "type": "module", | ||
@@ -12,6 +12,10 @@ "main": "dist/src/index.js", | ||
| "build": "tsc", | ||
| "test": "npm run build && npm run build:tests && node dist-tests/tests/test-security.js && node dist-tests/tests/test-file-lock.js && node dist-tests/tests/test-rate-limiter.js && node dist-tests/tests/test-v3.4.js && node dist-tests/tests/test-backup-manager.js && node dist-tests/tests/test-wasm-parsers.js", | ||
| "test:ui": "vitest --ui", | ||
| "test:run": "vitest run", | ||
| "test:coverage": "vitest run --coverage", | ||
| "test:watch": "vitest --watch", | ||
| "build:tests": "tsc -p tsconfig.tests.json", | ||
| "start": "node dist/src/index.js", | ||
| "dev": "npm run build && node dist/src/index.js", | ||
| "test": "npm run build && npm run build:tests && node dist-tests/tests/test-security.js && node dist-tests/tests/test-file-lock.js && node dist-tests/tests/test-rate-limiter.js && node dist-tests/tests/test-v3.4.js && node dist-tests/tests/test-backup-manager.js && node dist-tests/tests/test-wasm-parsers.js", | ||
| "clean": "rimraf dist dist-tests", | ||
@@ -62,11 +66,25 @@ "rebuild": "npm run clean && npm run build", | ||
| "dependencies": { | ||
| "@modelcontextprotocol/sdk": "^1.12.0", | ||
| "ignore": "^6.0.2", | ||
| "tree-sitter-wasms": "^0.1.13", | ||
| "web-tree-sitter": "^0.25.1" | ||
| "@modelcontextprotocol/sdk": "1.12.0", | ||
| "chokidar": "5.0.0", | ||
| "diff-match-patch": "1.0.5", | ||
| "fuse.js": "7.3.0", | ||
| "ignore": "6.0.2", | ||
| "pino": "10.3.1", | ||
| "pino-pretty": "13.1.3", | ||
| "proper-lockfile": "4.1.2", | ||
| "sql.js": "1.14.1", | ||
| "tree-sitter-wasms": "0.1.13", | ||
| "web-tree-sitter": "0.25.1" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/node": "^22.10.0", | ||
| "rimraf": "^6.0.1", | ||
| "typescript": "^5.7.0" | ||
| "@types/chokidar": "1.7.5", | ||
| "@types/diff-match-patch": "1.0.36", | ||
| "@types/node": "22.19.17", | ||
| "@types/proper-lockfile": "4.1.4", | ||
| "@types/sql.js": "1.4.11", | ||
| "@vitest/coverage-v8": "4.1.5", | ||
| "@vitest/ui": "4.1.5", | ||
| "rimraf": "6.0.1", | ||
| "typescript": "5.7.0", | ||
| "vitest": "4.1.5" | ||
| }, | ||
@@ -73,0 +91,0 @@ "engines": { |
+59
-6
@@ -7,7 +7,7 @@ # mcp-code-context | ||
| []() | ||
| []() | ||
| []() | ||
| [](https://ko-fi.com/achatainga) | ||
| [](https://paypal.me/achatainga) | ||
| > MCP server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. | ||
| > MCP server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with persistent caching, structured logging, fuzzy search, and multi-process safety. | ||
@@ -34,2 +34,4 @@ ## ๐ Quick Start (Claude Desktop) | ||
| ๐ **For AI Agents**: See [INSTRUCTIONS.md](INSTRUCTIONS.md) for essential usage patterns and best practices. | ||
| --- | ||
@@ -69,2 +71,16 @@ | ||
| ### What's New in v3.6.0 | ||
| | Feature | Description | | ||
| |---------|-------------| | ||
| | โก **Persistent Cache** | WASM SQLite cache โ <100ms hits, 10ร faster on repeated reads | | ||
| | ๐ **Structured Logging** | pino JSON logging to stderr (MCP-safe, never pollutes stdio) | | ||
| | ๐๏ธ **File Watcher** | chokidar auto-invalidates cache on file changes | | ||
| | ๐ **Fuzzy Search** | fuse.js finds `authUser` when you search `authenticateUser` | | ||
| | ๐ **Pagination** | Search defaults to 10 results with `startIndex` for navigation | | ||
| | ๐ **Multi-process Safe** | Filesystem locks via `proper-lockfile` (was in-memory) | | ||
| | ๐พ **OS Temp Backups** | Backups in `os.tmpdir()` โ no more hot-reload loops | | ||
| | ๐งช **74 Tests** | Unit + integration + performance + stress tests | | ||
| | ๐ฏ **Token Savings** | 50-80% reduction: compact diffs, no Phase 2 repeat, auto-optimize output | | ||
| ### Read | ||
@@ -113,2 +129,4 @@ - ๐ณ **AST-based compression** โ Real Tree-sitter WASM parsers for TypeScript/JavaScript/Python/PHP/Dart. Zero regex-based parsing. | ||
| **Note**: While the definition file uses pure AST replacement, dependent files (imports) are updated using regex word-boundaries. Review the generated diffs carefully to ensure strings or comments sharing the same name aren't unintentionally modified. | ||
| ### `get_semantic_repo_map` Tool | ||
@@ -223,5 +241,6 @@ | ||
| - `excludeDirs` (optional) โ Directories to exclude (default: `["node_modules", "dist", "build"]`) | ||
| - `showContext` (optional) โ Include surrounding lines (default: true) | ||
| - `contextLines` (optional) โ Number of context lines (default: 3) | ||
| - `maxResults` (optional) โ Maximum matches to return (default: 50) | ||
| - `maxResults` (optional) โ Maximum matches per page (default: 10) | ||
| - `startIndex` (optional) โ Pagination offset (default: 0) | ||
| - `fuzzyMatch` (optional) โ Enable fuzzy/typo-tolerant matching (default: false) | ||
| - `fuzzyThreshold` (optional) โ Fuzzy sensitivity 0.0โ1.0 (default: 0.4) | ||
@@ -412,5 +431,12 @@ #### 6. `rollback_file` | ||
| - **Language Grammars:** tree-sitter-wasms@0.1.13 (ABI v15) | ||
| - **Cache:** sql.js@1.14.1 (WASM SQLite, zero native deps) | ||
| - **Logging:** pino@10.3.1 (JSON to stderr, MCP-safe) | ||
| - **File Watcher:** chokidar@5.0.0 (auto cache invalidation) | ||
| - **Fuzzy Search:** fuse.js@7.3.0 (typo-tolerant matching) | ||
| - **File Locking:** proper-lockfile@4.1.2 (multi-process safe, OS temp) | ||
| - **Diff:** diff-match-patch@1.0.5 (Myers algorithm, O(n+dยฒ)) | ||
| - **Ignore Engine:** `ignore` npm package (full .gitignore spec support) | ||
| - **Safety Features:** Mandatory two-phase confirmation, rolling 5-version backups, fuzzy matching, dependency checking, surgical restoration. | ||
| - **Safety Features:** Mandatory two-phase confirmation, rolling 5-version backups, fuzzy matching, dependency checking, surgical restoration, ReDoS protection via worker_threads. | ||
| - **Portability:** 100% WASM - no native dependencies, works on all platforms | ||
| - **Tests:** 74 passing (unit + integration + performance + stress) | ||
@@ -429,2 +455,29 @@ ## Contributing | ||
| ### Viewing Logs | ||
| Because MCP uses `stdout` for protocol communication, all logs are safely routed to `stderr`. You can view them in your client's log files: | ||
| - **Claude Desktop (macOS)**: `~/Library/Logs/Claude/mcp-server-mcp-code-context.log` | ||
| - **Claude Desktop (Windows)**: `%APPDATA%\Claude\logs\mcp-server-mcp-code-context.log` | ||
| - **Cursor**: `Output` panel โ Select `mcp-code-context` from the dropdown | ||
| **Environment Variables** (optional): | ||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "mcp-code-context": { | ||
| "command": "npx", | ||
| "args": ["-y", "mcp-code-context"], | ||
| "env": { | ||
| "NODE_ENV": "development", | ||
| "LOG_LEVEL": "debug" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| Supported `LOG_LEVEL` values: `fatal`, `error`, `warn`, `info`, `debug`, `trace` (default: `info`). | ||
| ## Changelog | ||
@@ -431,0 +484,0 @@ |
+14
-14
@@ -1,4 +0,4 @@ | ||
| # Security Policy - mcp-code-context v3.5.3 | ||
| # Security Policy - mcp-code-context v3.6.0 | ||
| ## ๐ Security Improvements in v3.5.3 | ||
| ## ๐ Security Improvements in v3.6.0 | ||
@@ -13,7 +13,7 @@ This release addresses **all critical security vulnerabilities** from comprehensive adversarial audit, implements full middleware pipeline, and hardens all 13 tool handlers. | ||
| **CVSS Score**: 8.1 (High) | ||
| **Status**: โ FIXED in v3.2.0, **hardened in v3.5.3** | ||
| **Status**: โ FIXED in v3.2.0, **hardened in v3.6.0** | ||
| **Description**: Path traversal check occurred BEFORE path normalization, allowing bypass with absolute paths. | ||
| **Fix**: Check boundary AFTER `path.resolve()` normalization. In v3.5.3, **all 13 handlers** now require `projectRoot` and validate via `SecurityValidator`. | ||
| **Fix**: Check boundary AFTER `path.resolve()` normalization. In v3.6.0, **all 13 handlers** now require `projectRoot` and validate via `SecurityValidator`. | ||
@@ -44,3 +44,3 @@ --- | ||
| **CVSS Score**: 5.3 (Medium) | ||
| **Status**: โ FIXED in v3.5.3 | ||
| **Status**: โ FIXED in v3.6.0 | ||
@@ -63,3 +63,3 @@ **Description**: User-provided regex patterns could cause catastrophic backtracking. | ||
| **CVSS Score**: 9.0 (Critical) | ||
| **Status**: โ FIXED in v3.5.3 | ||
| **Status**: โ FIXED in v3.6.0 | ||
@@ -74,3 +74,3 @@ **Description**: `read.ts` passed `content` as `symbolName` and real `symbolName` as `className`. Symbol extraction was 100% broken. | ||
| **CVSS Score**: 8.5 (High) | ||
| **Status**: โ FIXED in v3.5.3 | ||
| **Status**: โ FIXED in v3.6.0 | ||
@@ -85,3 +85,3 @@ **Description**: `readLines`, `searchPattern`, `analyzeImpact`, `getSemanticRepoMap` had no path boundary check. | ||
| **CVSS Score**: 8.0 (High) | ||
| **Status**: โ FIXED in v3.5.3 | ||
| **Status**: โ FIXED in v3.6.0 | ||
@@ -96,3 +96,3 @@ **Description**: `renameSymbol` wrote dependent files without SecurityValidator check, using non-atomic writes. | ||
| **CVSS Score**: 5.0 (Medium) | ||
| **Status**: โ FIXED in v3.5.3 | ||
| **Status**: โ FIXED in v3.6.0 | ||
@@ -110,7 +110,7 @@ **Description**: LCS diff algorithm is O(nยฒ) memory โ 10K-line files cause OOM. | ||
| 1. **Input Validation** | ||
| - Path boundary enforcement on ALL handlers (v3.5.3) | ||
| - Path boundary enforcement on ALL handlers (v3.6.0) | ||
| - File size limits (10MB per file, 50MB total) | ||
| - Regex sanitization + timeout (1s limit) | ||
| 2. **Two-Phase Write Workflow** (v3.5.3) | ||
| 2. **Two-Phase Write Workflow** (v3.6.0) | ||
| - Phase 1: Dry-run returns diff + confirmation token | ||
@@ -120,3 +120,3 @@ - Phase 2: Apply with token (5-minute expiry) | ||
| 3. **Middleware Pipeline** (v3.5.3) | ||
| 3. **Middleware Pipeline** (v3.6.0) | ||
| - Rate limiting (token bucket per operation) | ||
@@ -171,3 +171,3 @@ - File locking (prevents concurrent writes) | ||
| ### v3.5.3 โ | ||
| ### v3.6.0 โ | ||
| - [x] Regex timeout enforcement (safeRegexTest) | ||
@@ -186,2 +186,2 @@ - [x] Rate limiting (token bucket) | ||
| **Last Updated**: 2026-04-24 | ||
| **Version**: 3.5.3 | ||
| **Version**: 3.6.0 |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
398457
24.67%95
26.67%5335
25.71%487
12.21%11
175%10
233.33%5
Infinity%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated
Updated