mcp-code-context 3.6.2 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/CHANGELOG.md +140 -268
  2. package/INSTRUCTIONS.md +31 -12
  3. package/README.md +223 -107
  4. package/SECURITY.md +55 -21
  5. package/dist/src/core/cacheManager.d.ts +4 -5
  6. package/dist/src/core/cacheManager.js +49 -33
  7. package/dist/src/core/cacheManager.js.map +1 -1
  8. package/dist/src/core/engine.d.ts +1 -1
  9. package/dist/src/core/engine.js +3 -3
  10. package/dist/src/core/engine.js.map +1 -1
  11. package/dist/src/core/indexManager.d.ts +58 -0
  12. package/dist/src/core/indexManager.js +252 -0
  13. package/dist/src/core/indexManager.js.map +1 -0
  14. package/dist/src/core/indexManagerQueries.d.ts +14 -0
  15. package/dist/src/core/indexManagerQueries.js +95 -0
  16. package/dist/src/core/indexManagerQueries.js.map +1 -0
  17. package/dist/src/core/sessionManager.d.ts +117 -0
  18. package/dist/src/core/sessionManager.js +231 -0
  19. package/dist/src/core/sessionManager.js.map +1 -0
  20. package/dist/src/core/validator.d.ts +1 -1
  21. package/dist/src/core/validator.js +18 -10
  22. package/dist/src/core/validator.js.map +1 -1
  23. package/dist/src/index.d.ts +1 -13
  24. package/dist/src/index.js +25 -999
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/operations/astTransform.d.ts +38 -0
  27. package/dist/src/operations/astTransform.js +239 -0
  28. package/dist/src/operations/astTransform.js.map +1 -0
  29. package/dist/src/operations/compress.d.ts +5 -3
  30. package/dist/src/operations/compress.js +73 -7
  31. package/dist/src/operations/compress.js.map +1 -1
  32. package/dist/src/operations/confirmationStore.d.ts +35 -8
  33. package/dist/src/operations/confirmationStore.js +112 -14
  34. package/dist/src/operations/confirmationStore.js.map +1 -1
  35. package/dist/src/operations/impactAnalysis.d.ts +9 -0
  36. package/dist/src/operations/impactAnalysis.js +61 -0
  37. package/dist/src/operations/impactAnalysis.js.map +1 -0
  38. package/dist/src/operations/pendingStore.d.ts +51 -0
  39. package/dist/src/operations/pendingStore.js +201 -0
  40. package/dist/src/operations/pendingStore.js.map +1 -0
  41. package/dist/src/operations/pendingStoreInit.d.ts +6 -0
  42. package/dist/src/operations/pendingStoreInit.js +42 -0
  43. package/dist/src/operations/pendingStoreInit.js.map +1 -0
  44. package/dist/src/operations/read.d.ts +6 -92
  45. package/dist/src/operations/read.js +4 -445
  46. package/dist/src/operations/read.js.map +1 -1
  47. package/dist/src/operations/readCore.d.ts +33 -0
  48. package/dist/src/operations/readCore.js +142 -0
  49. package/dist/src/operations/readCore.js.map +1 -0
  50. package/dist/src/operations/rename.d.ts +13 -0
  51. package/dist/src/operations/rename.js +130 -0
  52. package/dist/src/operations/rename.js.map +1 -0
  53. package/dist/src/operations/searchOperation.d.ts +16 -0
  54. package/dist/src/operations/searchOperation.js +113 -0
  55. package/dist/src/operations/searchOperation.js.map +1 -0
  56. package/dist/src/operations/symbolQuery.d.ts +38 -0
  57. package/dist/src/operations/symbolQuery.js +194 -0
  58. package/dist/src/operations/symbolQuery.js.map +1 -0
  59. package/dist/src/operations/write.d.ts +11 -14
  60. package/dist/src/operations/write.js +6 -125
  61. package/dist/src/operations/write.js.map +1 -1
  62. package/dist/src/parsers/base.d.ts +1 -1
  63. package/dist/src/parsers/base.js +1 -1
  64. package/dist/src/parsers/csharp.d.ts +12 -0
  65. package/dist/src/parsers/csharp.js +67 -0
  66. package/dist/src/parsers/csharp.js.map +1 -0
  67. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  68. package/dist/src/parsers/dartTreeSitter.js +1 -1
  69. package/dist/src/parsers/go.d.ts +11 -0
  70. package/dist/src/parsers/go.js +74 -0
  71. package/dist/src/parsers/go.js.map +1 -0
  72. package/dist/src/parsers/java.d.ts +12 -0
  73. package/dist/src/parsers/java.js +62 -0
  74. package/dist/src/parsers/java.js.map +1 -0
  75. package/dist/src/parsers/kotlin.d.ts +12 -0
  76. package/dist/src/parsers/kotlin.js +75 -0
  77. package/dist/src/parsers/kotlin.js.map +1 -0
  78. package/dist/src/parsers/php.d.ts +1 -1
  79. package/dist/src/parsers/php.js +1 -1
  80. package/dist/src/parsers/python.d.ts +1 -1
  81. package/dist/src/parsers/python.js +1 -1
  82. package/dist/src/parsers/registry.d.ts +1 -1
  83. package/dist/src/parsers/registry.js +63 -2
  84. package/dist/src/parsers/registry.js.map +1 -1
  85. package/dist/src/parsers/ruby.d.ts +12 -0
  86. package/dist/src/parsers/ruby.js +73 -0
  87. package/dist/src/parsers/ruby.js.map +1 -0
  88. package/dist/src/parsers/rust.d.ts +12 -0
  89. package/dist/src/parsers/rust.js +66 -0
  90. package/dist/src/parsers/rust.js.map +1 -0
  91. package/dist/src/parsers/typescript.d.ts +1 -1
  92. package/dist/src/parsers/typescript.js +28 -38
  93. package/dist/src/parsers/typescript.js.map +1 -1
  94. package/dist/src/tools/adminHandlers.d.ts +67 -0
  95. package/dist/src/tools/adminHandlers.js +129 -0
  96. package/dist/src/tools/adminHandlers.js.map +1 -0
  97. package/dist/src/tools/context.d.ts +9 -0
  98. package/dist/src/tools/context.js +21 -0
  99. package/dist/src/tools/context.js.map +1 -0
  100. package/dist/src/tools/handlers.d.ts +4 -0
  101. package/dist/src/tools/handlers.js +5 -0
  102. package/dist/src/tools/handlers.js.map +1 -0
  103. package/dist/src/tools/pipeline.d.ts +6 -0
  104. package/dist/src/tools/pipeline.js +100 -0
  105. package/dist/src/tools/pipeline.js.map +1 -0
  106. package/dist/src/tools/readHandlers.d.ts +55 -0
  107. package/dist/src/tools/readHandlers.js +220 -0
  108. package/dist/src/tools/readHandlers.js.map +1 -0
  109. package/dist/src/tools/toolDefinitions.d.ts +1037 -0
  110. package/dist/src/tools/toolDefinitions.js +13 -0
  111. package/dist/src/tools/toolDefinitions.js.map +1 -0
  112. package/dist/src/tools/toolDefinitionsAdmin.d.ts +89 -0
  113. package/dist/src/tools/toolDefinitionsAdmin.js +99 -0
  114. package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -0
  115. package/dist/src/tools/toolDefinitionsCore.d.ts +949 -0
  116. package/dist/src/tools/toolDefinitionsCore.js +267 -0
  117. package/dist/src/tools/toolDefinitionsCore.js.map +1 -0
  118. package/dist/src/tools/writeHandlers.d.ts +37 -0
  119. package/dist/src/tools/writeHandlers.js +199 -0
  120. package/dist/src/tools/writeHandlers.js.map +1 -0
  121. package/dist/src/utils/appDir.d.ts +19 -0
  122. package/dist/src/utils/appDir.js +50 -0
  123. package/dist/src/utils/appDir.js.map +1 -0
  124. package/dist/src/utils/auditLogWriter.d.ts +9 -0
  125. package/dist/src/utils/auditLogWriter.js +49 -0
  126. package/dist/src/utils/auditLogWriter.js.map +1 -0
  127. package/dist/src/utils/auditLogger.d.ts +1 -10
  128. package/dist/src/utils/auditLogger.js +14 -109
  129. package/dist/src/utils/auditLogger.js.map +1 -1
  130. package/dist/src/utils/auditQuery.d.ts +23 -0
  131. package/dist/src/utils/auditQuery.js +67 -0
  132. package/dist/src/utils/auditQuery.js.map +1 -0
  133. package/dist/src/utils/backupManager.d.ts +2 -2
  134. package/dist/src/utils/backupManager.js +29 -12
  135. package/dist/src/utils/backupManager.js.map +1 -1
  136. package/dist/src/utils/constants.d.ts +1 -1
  137. package/dist/src/utils/constants.js +8 -1
  138. package/dist/src/utils/constants.js.map +1 -1
  139. package/dist/src/utils/diff.d.ts +12 -1
  140. package/dist/src/utils/diff.js +41 -1
  141. package/dist/src/utils/diff.js.map +1 -1
  142. package/dist/src/utils/fileLock.d.ts +7 -2
  143. package/dist/src/utils/fileLock.js +14 -11
  144. package/dist/src/utils/fileLock.js.map +1 -1
  145. package/dist/src/utils/fileWalker.d.ts +1 -1
  146. package/dist/src/utils/fileWalker.js +1 -1
  147. package/dist/src/utils/fileWatcher.d.ts +1 -1
  148. package/dist/src/utils/fileWatcher.js +1 -1
  149. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  150. package/dist/src/utils/fuzzySearch.js +1 -1
  151. package/dist/src/utils/logger.d.ts +1 -1
  152. package/dist/src/utils/logger.js +2 -2
  153. package/dist/src/utils/logger.js.map +1 -1
  154. package/dist/src/utils/rateLimiter.d.ts +9 -1
  155. package/dist/src/utils/rateLimiter.js +12 -1
  156. package/dist/src/utils/rateLimiter.js.map +1 -1
  157. package/dist/src/utils/regexValidator.d.ts +12 -0
  158. package/dist/src/utils/regexValidator.js +48 -0
  159. package/dist/src/utils/regexValidator.js.map +1 -0
  160. package/dist/src/utils/safeRegex.d.ts +2 -92
  161. package/dist/src/utils/safeRegex.js +41 -222
  162. package/dist/src/utils/safeRegex.js.map +1 -1
  163. package/dist/src/utils/safeRegexApi.d.ts +56 -0
  164. package/dist/src/utils/safeRegexApi.js +99 -0
  165. package/dist/src/utils/safeRegexApi.js.map +1 -0
  166. package/dist/src/utils/safeRegexPool.d.ts +7 -0
  167. package/dist/src/utils/safeRegexPool.js +102 -0
  168. package/dist/src/utils/safeRegexPool.js.map +1 -0
  169. package/dist/src/utils/searchTools.js +6 -6
  170. package/dist/src/utils/searchTools.js.map +1 -1
  171. package/dist/src/utils/streaming.d.ts +4 -3
  172. package/dist/src/utils/streaming.js +1 -1
  173. package/dist/src/utils/streaming.js.map +1 -1
  174. package/dist/src/utils/telemetry.d.ts +1 -1
  175. package/dist/src/utils/telemetry.js +1 -1
  176. package/dist/src/utils/toctou.d.ts +7 -0
  177. package/dist/src/utils/toctou.js +24 -0
  178. package/dist/src/utils/toctou.js.map +1 -0
  179. package/llms.txt +199 -31
  180. package/package.json +2 -2
  181. package/scripts/replace-version.js +0 -59
@@ -1,14 +1,46 @@
1
1
  /**
2
- * Diff Utilities - v3.6.2
2
+ * Diff Utilities - v3.7.0
3
3
  * Uses diff-match-patch for efficient diffing
4
4
  */
5
5
  import DiffMatchPatch from 'diff-match-patch';
6
6
  import { DIFF_MAX_FILE_LINES } from './constants.js';
7
7
  const dmp = new DiffMatchPatch();
8
8
  const COMPACT_DIFF_THRESHOLD = 2048;
9
+ // FIX-07: Early fallback threshold — skip O(n+d²) Myers for large files with many changes
10
+ const EARLY_FALLBACK_LINES = 500;
11
+ const EARLY_FALLBACK_CHANGE_RATIO = 0.3; // >30% lines changed → use fast path
12
+ /**
13
+ * Estimate change ratio between two texts without full diff.
14
+ * Fast O(n) heuristic using line hashing.
15
+ */
16
+ function estimateChangeRatio(oldText, newText) {
17
+ const oldLines = new Set(oldText.split('\n'));
18
+ const newLines = newText.split('\n');
19
+ const changedLines = newLines.filter(l => !oldLines.has(l)).length;
20
+ return changedLines / Math.max(newLines.length, 1);
21
+ }
22
+ /**
23
+ * Generates an early fallback diff for large files with many changes.
24
+ * Avoids O(n+d²) degradation from Myers algorithm.
25
+ * FIX-07: Added in v3.7.0.
26
+ *
27
+ * @param oldText - Original file content
28
+ * @param newText - Modified file content
29
+ * @returns Human-readable summary diff
30
+ */
31
+ export function generateEarlyFallbackDiff(oldText, newText) {
32
+ const oldLines = oldText.split('\n');
33
+ const newLines = newText.split('\n');
34
+ const added = newLines.length - oldLines.length;
35
+ const sign = added >= 0 ? '+' : '';
36
+ return `[Early fallback: file too large for Myers diff (O(n+d²) would degrade performance)]
37
+ Lines: ${oldLines.length} → ${newLines.length} (${sign}${added})
38
+ Use rollback_file to revert if needed.`;
39
+ }
9
40
  /**
10
41
  * Generates a unified diff using Myers algorithm.
11
42
  * Falls back to simple diff for files exceeding line limit.
43
+ * FIX-07: Added early fallback for large files with high change ratio.
12
44
  *
13
45
  * @param oldText - Original file content
14
46
  * @param newText - Modified file content
@@ -17,9 +49,17 @@ const COMPACT_DIFF_THRESHOLD = 2048;
17
49
  export function generateUnifiedDiff(oldText, newText) {
18
50
  const oldLines = oldText.split('\n');
19
51
  const newLines = newText.split('\n');
52
+ // Hard limit: always use simple diff above DIFF_MAX_FILE_LINES
20
53
  if (oldLines.length > DIFF_MAX_FILE_LINES || newLines.length > DIFF_MAX_FILE_LINES) {
21
54
  return generateSimpleDiff(oldText, newText);
22
55
  }
56
+ // FIX-07: Early fallback for >500 lines with high change ratio (avoid O(n+d²) degradation)
57
+ if (oldLines.length > EARLY_FALLBACK_LINES || newLines.length > EARLY_FALLBACK_LINES) {
58
+ const changeRatio = estimateChangeRatio(oldText, newText);
59
+ if (changeRatio > EARLY_FALLBACK_CHANGE_RATIO) {
60
+ return generateEarlyFallbackDiff(oldText, newText);
61
+ }
62
+ }
23
63
  const diffs = dmp.diff_main(oldText, newText);
24
64
  dmp.diff_cleanupSemantic(diffs);
25
65
  const patch = dmp.patch_make(oldText, diffs);
@@ -1 +1 @@
1
- {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/utils/diff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/utils/diff.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.6.2
2
+ * File Lock Manager - v3.7.0
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  /**
@@ -30,9 +30,14 @@ export declare class FileLockManager {
30
30
  * @returns True if file is locked, false otherwise
31
31
  */
32
32
  isLocked(filePath: string): Promise<boolean>;
33
+ /**
34
+ * Get count of active locks
35
+ *
36
+ * @returns Number of locks currently held
37
+ */
38
+ getActiveLockCount(): number;
33
39
  /**
34
40
  * Releases all active locks managed by this instance.
35
41
  */
36
42
  releaseAll(): Promise<void>;
37
43
  }
38
- export declare const globalLockManager: FileLockManager;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.6.2
2
+ * File Lock Manager - v3.7.0
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  import lockfile from 'proper-lockfile';
@@ -7,7 +7,7 @@ import { tmpdir } from 'os';
7
7
  import { mkdirSync, existsSync } from 'fs';
8
8
  import path from 'path';
9
9
  import crypto from 'crypto';
10
- import { LOCK_TIMEOUT_MS, LOCK_RETRY_COUNT, LOCK_RETRY_MIN_MS, LOCK_RETRY_MAX_MS, LOCK_RETRY_FACTOR, HASH_LENGTH } from './constants.js';
10
+ import { LOCK_TIMEOUT_MS, LOCK_RETRY_COUNT, LOCK_RETRY_MIN_MS, LOCK_RETRY_MAX_MS, LOCK_RETRY_FACTOR } from './constants.js';
11
11
  /**
12
12
  * Manages filesystem-based locks for multi-process safety.
13
13
  * Locks are stored in OS temp directory to prevent conflicts.
@@ -20,11 +20,7 @@ export class FileLockManager {
20
20
  * Initializes lock directory in OS temp with project-specific hash.
21
21
  */
22
22
  constructor() {
23
- const projectHash = crypto.createHash('md5')
24
- .update(process.cwd())
25
- .digest('hex')
26
- .substring(0, HASH_LENGTH);
27
- this.lockDir = path.join(tmpdir(), `mcp-locks-${projectHash}`);
23
+ this.lockDir = path.join(tmpdir(), 'mcp-locks');
28
24
  if (!existsSync(this.lockDir)) {
29
25
  mkdirSync(this.lockDir, { recursive: true });
30
26
  }
@@ -48,7 +44,7 @@ export class FileLockManager {
48
44
  maxTimeout: LOCK_RETRY_MAX_MS,
49
45
  factor: LOCK_RETRY_FACTOR
50
46
  },
51
- lockfilePath: path.join(this.lockDir, `${crypto.createHash('md5').update(normalizedPath).digest('hex')}.lock`)
47
+ lockfilePath: path.join(this.lockDir, `${crypto.createHash('sha256').update(normalizedPath).digest('hex')}.lock`)
52
48
  });
53
49
  this.activeLocks.set(normalizedPath, release);
54
50
  return async () => {
@@ -69,13 +65,21 @@ export class FileLockManager {
69
65
  async isLocked(filePath) {
70
66
  const normalizedPath = path.resolve(filePath);
71
67
  try {
72
- const lockfilePath = path.join(this.lockDir, `${crypto.createHash('md5').update(normalizedPath).digest('hex')}.lock`);
68
+ const lockfilePath = path.join(this.lockDir, `${crypto.createHash('sha256').update(normalizedPath).digest('hex')}.lock`);
73
69
  return await lockfile.check(normalizedPath, { lockfilePath });
74
70
  }
75
71
  catch {
76
- return false;
72
+ return false; // Lock check failed (corrupted lockfile, permissions) — assume unlocked
77
73
  }
78
74
  }
75
+ /**
76
+ * Get count of active locks
77
+ *
78
+ * @returns Number of locks currently held
79
+ */
80
+ getActiveLockCount() {
81
+ return this.activeLocks.size;
82
+ }
79
83
  /**
80
84
  * Releases all active locks managed by this instance.
81
85
  */
@@ -85,5 +89,4 @@ export class FileLockManager {
85
89
  this.activeLocks.clear();
86
90
  }
87
91
  }
88
- export const globalLockManager = new FileLockManager();
89
92
  //# sourceMappingURL=fileLock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/utils/fileLock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileLock.js","sourceRoot":"","sources":["../../../src/utils/fileLock.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Walker Utility - v3.6.2
2
+ * File Walker Utility - v3.7.0
3
3
  * Centralized directory traversal with filtering
4
4
  */
5
5
  export interface WalkOptions {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Walker Utility - v3.6.2
2
+ * File Walker Utility - v3.7.0
3
3
  * Centralized directory traversal with filtering
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Watcher - v3.6.2
2
+ * File Watcher - v3.7.0
3
3
  * Auto-invalidate cache on file changes with chokidar
4
4
  */
5
5
  export interface FileWatcherConfig {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Watcher - v3.6.2
2
+ * File Watcher - v3.7.0
3
3
  * Auto-invalidate cache on file changes with chokidar
4
4
  */
5
5
  import chokidar from 'chokidar';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fuzzy Search - v3.6.2
2
+ * Fuzzy Search - v3.7.0
3
3
  * Typo-tolerant search with fuse.js
4
4
  */
5
5
  export interface FuzzySearchOptions {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fuzzy Search - v3.6.2
2
+ * Fuzzy Search - v3.7.0
3
3
  * Typo-tolerant search with fuse.js
4
4
  */
5
5
  import Fuse from 'fuse.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Logger - v3.6.2
2
+ * Logger - v3.7.0
3
3
  * Structured logging with pino (JSON to stderr, MCP-safe)
4
4
  */
5
5
  import pino from 'pino';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Logger - v3.6.2
2
+ * Logger - v3.7.0
3
3
  * Structured logging with pino (JSON to stderr, MCP-safe)
4
4
  */
5
5
  import pino from 'pino';
@@ -8,7 +8,7 @@ import path from 'path';
8
8
  import crypto from 'crypto';
9
9
  const isDevelopment = process.env.NODE_ENV !== 'production';
10
10
  // Calculate project-specific log directory in OS temp
11
- const projectHash = crypto.createHash('md5')
11
+ const projectHash = crypto.createHash('sha256')
12
12
  .update(process.cwd())
13
13
  .digest('hex')
14
14
  .substring(0, 8);
@@ -1 +1 @@
1
- {"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"}
1
+ {"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,QAAQ,CAAC;KAC5C,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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.6.2
2
+ * Rate Limiter - v3.7.0
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  interface RateLimitConfig {
@@ -54,12 +54,20 @@ export declare const OPERATION_COSTS: {
54
54
  readonly insert_symbol: 10;
55
55
  readonly remove_symbol: 10;
56
56
  readonly rename_symbol: 40;
57
+ readonly ast_transform: 10;
57
58
  readonly rollback_file: 2;
58
59
  readonly clean_backups: 2;
59
60
  readonly get_server_stats: 1;
61
+ readonly get_cache_stats: 1;
62
+ readonly clear_cache: 2;
63
+ readonly configure_file_watcher: 1;
64
+ readonly get_file_watcher_status: 1;
60
65
  readonly get_rate_limit_status: 1;
61
66
  readonly search_symbols: 40;
62
67
  readonly explain_symbol: 10;
63
68
  readonly batch_read: 10;
69
+ readonly get_session_stats: 1;
70
+ readonly clear_session_cache: 2;
71
+ readonly list_pending_operations: 1;
64
72
  };
65
73
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.6.2
2
+ * Rate Limiter - v3.7.0
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  export class RateLimiter {
@@ -82,6 +82,9 @@ export class RateLimiter {
82
82
  }
83
83
  }
84
84
  }, this.config.refillInterval);
85
+ if (this.refillTimer.unref) {
86
+ this.refillTimer.unref();
87
+ }
85
88
  }
86
89
  /**
87
90
  * Stop refill timer
@@ -107,12 +110,20 @@ export const OPERATION_COSTS = {
107
110
  insert_symbol: 10,
108
111
  remove_symbol: 10,
109
112
  rename_symbol: 40, // Very expensive (cross-file)
113
+ ast_transform: 10,
110
114
  rollback_file: 2,
111
115
  clean_backups: 2,
112
116
  get_server_stats: 1,
117
+ get_cache_stats: 1,
118
+ clear_cache: 2,
119
+ configure_file_watcher: 1,
120
+ get_file_watcher_status: 1,
113
121
  get_rate_limit_status: 1,
114
122
  search_symbols: 40, // Full repo AST walk
115
123
  explain_symbol: 10,
116
124
  batch_read: 10,
125
+ get_session_stats: 1,
126
+ clear_session_cache: 2,
127
+ list_pending_operations: 1,
117
128
  };
118
129
  //# sourceMappingURL=rateLimiter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Regex pattern validation and sanitization (synchronous — no worker needed)
3
+ */
4
+ export declare function validateRegexPattern(pattern: string): {
5
+ safe: boolean;
6
+ issues: string[];
7
+ };
8
+ export declare function sanitizeRegexPattern(input: string): string;
9
+ export declare function createSafeRegex(pattern: string, flags?: string): {
10
+ regex: RegExp | null;
11
+ error?: string;
12
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Regex pattern validation and sanitization (synchronous — no worker needed)
3
+ */
4
+ export function validateRegexPattern(pattern) {
5
+ const issues = [];
6
+ const dangerousPatterns = [
7
+ { pattern: /\([^)]*\+\)\+/, message: "Nested quantifiers (a+)+ detected" },
8
+ { pattern: /\([^)]*\*\)\*/, message: "Nested quantifiers (a*)* detected" },
9
+ { pattern: /\([^)]*\+\)\*/, message: "Nested quantifiers (a+)* detected" },
10
+ { pattern: /\([^)]*\*\)\+/, message: "Nested quantifiers (a*)+ detected" },
11
+ { pattern: /\([^|]*\|[^)]*\)\*/, message: "Alternation with star (a|b)* detected" },
12
+ { pattern: /\([^|]*\|[^)]*\)\+/, message: "Alternation with plus (a|b)+ detected" },
13
+ ];
14
+ for (const { pattern: dangerousPattern, message } of dangerousPatterns) {
15
+ if (dangerousPattern.test(pattern)) {
16
+ issues.push(message);
17
+ }
18
+ }
19
+ if (/\{(\d+),\}/.test(pattern)) {
20
+ const match = pattern.match(/\{(\d+),\}/);
21
+ if (match && parseInt(match[1]) > 1000) {
22
+ issues.push("Excessive repetition {n,} with n > 1000");
23
+ }
24
+ }
25
+ if (pattern.length > 500) {
26
+ issues.push("Pattern exceeds 500 characters");
27
+ }
28
+ return { safe: issues.length === 0, issues };
29
+ }
30
+ export function sanitizeRegexPattern(input) {
31
+ return input.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
32
+ }
33
+ export function createSafeRegex(pattern, flags) {
34
+ const validation = validateRegexPattern(pattern);
35
+ if (!validation.safe) {
36
+ return { regex: null, error: `Unsafe regex pattern: ${validation.issues.join(", ")}` };
37
+ }
38
+ try {
39
+ return { regex: new RegExp(pattern, flags) };
40
+ }
41
+ catch (error) {
42
+ return {
43
+ regex: null,
44
+ error: error instanceof Error ? error.message : String(error),
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=regexValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regexValidator.js","sourceRoot":"","sources":["../../../src/utils/regexValidator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,iBAAiB,GAAG;QACxB,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mCAAmC,EAAE;QAC1E,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mCAAmC,EAAE;QAC1E,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mCAAmC,EAAE;QAC1E,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mCAAmC,EAAE;QAC1E,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,uCAAuC,EAAE;QACnF,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,uCAAuC,EAAE;KACpF,CAAC;IAEF,KAAK,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,iBAAiB,EAAE,CAAC;QACvE,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,KAAc;IAEd,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,92 +1,2 @@
1
- /**
2
- * Safe Regex - v3.6.2
3
- * CRITICAL FIX: Real ReDoS protection via worker_threads
4
- *
5
- * Problem: setTimeout cannot interrupt regex.test() in Node.js single-threaded event loop.
6
- * Solution: Execute regex in a Worker thread. If it exceeds timeout, worker.terminate() kills it.
7
- *
8
- * This file serves dual purpose:
9
- * - Main thread: exports safe regex functions that delegate to workers
10
- * - Worker thread: executes regex operations when loaded as a worker
11
- */
12
- export interface RegexResult {
13
- success: boolean;
14
- matches?: RegExpMatchArray | null;
15
- error?: string;
16
- timedOut?: boolean;
17
- }
18
- /**
19
- * Execute regex test with real timeout via worker_threads.
20
- * worker.terminate() can actually kill a stuck regex, unlike setTimeout.
21
- */
22
- export declare function safeRegexTest(pattern: string | RegExp, input: string, timeoutMs?: number): Promise<{
23
- success: boolean;
24
- matched: boolean;
25
- error?: string;
26
- timedOut?: boolean;
27
- }>;
28
- /**
29
- * Execute regex match with real timeout via worker_threads.
30
- */
31
- export declare function safeRegexMatch(pattern: string | RegExp, input: string, timeoutMs?: number): Promise<RegexResult>;
32
- /**
33
- * Batch regex test: sends all lines to one worker, loops inside.
34
- * Returns matching line indices and trimmed content.
35
- * Use this for searchPattern — one worker per file, not per line.
36
- */
37
- export declare function safeRegexBatchTest(pattern: string | RegExp, lines: string[], timeoutMs?: number): Promise<{
38
- success: boolean;
39
- matches?: Array<{
40
- index: number;
41
- content: string;
42
- }>;
43
- timedOut?: boolean;
44
- error?: string;
45
- }>;
46
- /**
47
- * Batch find first matching line: one worker, returns index of first match.
48
- * Use this for readLines aroundPattern — avoids N worker spawns.
49
- */
50
- export declare function safeRegexFindFirst(pattern: string | RegExp, lines: string[], timeoutMs?: number): Promise<{
51
- success: boolean;
52
- matchIndex?: number;
53
- timedOut?: boolean;
54
- error?: string;
55
- }>;
56
- /**
57
- * Multi-file batch regex test: ALL files processed in ONE worker spawn.
58
- * Eliminates N worker spawns for N files in searchPattern.
59
- * The worker loops all files×lines internally. If any line causes ReDoS,
60
- * the worker is terminated and the entire search times out safely.
61
- */
62
- export declare function safeRegexMultiFileBatchTest(pattern: string | RegExp, files: Array<{
63
- path: string;
64
- lines: string[];
65
- }>, timeoutMs?: number): Promise<{
66
- success: boolean;
67
- results?: Array<{
68
- file: string;
69
- index: number;
70
- content: string;
71
- }>;
72
- timedOut?: boolean;
73
- error?: string;
74
- }>;
75
- /**
76
- * Validate regex pattern for safety
77
- */
78
- export declare function validateRegexPattern(pattern: string): {
79
- safe: boolean;
80
- issues: string[];
81
- };
82
- /**
83
- * Sanitize regex pattern (escape metacharacters)
84
- */
85
- export declare function sanitizeRegexPattern(input: string): string;
86
- /**
87
- * Create safe regex with validation
88
- */
89
- export declare function createSafeRegex(pattern: string, flags?: string): {
90
- regex: RegExp | null;
91
- error?: string;
92
- };
1
+ export { validateRegexPattern, sanitizeRegexPattern, createSafeRegex, } from "./regexValidator.js";
2
+ export { safeRegexTest, safeRegexMatch, safeRegexBatchTest, safeRegexFindFirst, safeRegexAnyTest, safeRegexReplaceAll, safeRegexMultiFileBatchTest, type RegexResult, } from "./safeRegexApi.js";