mcp-code-context 3.8.0 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/INSTRUCTIONS.md +2 -2
  3. package/README.md +16 -8
  4. package/SECURITY.md +2 -2
  5. package/dist/src/core/engine.d.ts +1 -1
  6. package/dist/src/core/engine.js +1 -1
  7. package/dist/src/core/indexManager.d.ts +1 -1
  8. package/dist/src/core/indexManager.js +1 -1
  9. package/dist/src/core/sessionManager.d.ts +1 -1
  10. package/dist/src/core/sessionManager.js +1 -1
  11. package/dist/src/core/validator.d.ts +1 -1
  12. package/dist/src/core/validator.js +1 -1
  13. package/dist/src/index.d.ts +1 -1
  14. package/dist/src/index.js +2 -2
  15. package/dist/src/operations/astTransform.d.ts +1 -1
  16. package/dist/src/operations/astTransform.js +1 -1
  17. package/dist/src/operations/compress.d.ts +1 -1
  18. package/dist/src/operations/compress.js +46 -16
  19. package/dist/src/operations/compress.js.map +1 -1
  20. package/dist/src/operations/confirmationStore.d.ts +1 -1
  21. package/dist/src/operations/confirmationStore.js +1 -1
  22. package/dist/src/operations/impactAnalysis.js +46 -0
  23. package/dist/src/operations/impactAnalysis.js.map +1 -1
  24. package/dist/src/operations/write.d.ts +1 -1
  25. package/dist/src/operations/write.js +3 -3
  26. package/dist/src/operations/write.js.map +1 -1
  27. package/dist/src/parsers/base.d.ts +14 -1
  28. package/dist/src/parsers/base.js +20 -1
  29. package/dist/src/parsers/base.js.map +1 -1
  30. package/dist/src/parsers/csharp.d.ts +1 -1
  31. package/dist/src/parsers/csharp.js +1 -1
  32. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  33. package/dist/src/parsers/dartTreeSitter.js +1 -1
  34. package/dist/src/parsers/go.d.ts +1 -1
  35. package/dist/src/parsers/go.js +1 -1
  36. package/dist/src/parsers/java.d.ts +1 -1
  37. package/dist/src/parsers/java.js +1 -1
  38. package/dist/src/parsers/kotlin.d.ts +1 -1
  39. package/dist/src/parsers/kotlin.js +1 -1
  40. package/dist/src/parsers/php.d.ts +1 -1
  41. package/dist/src/parsers/php.js +1 -1
  42. package/dist/src/parsers/python.d.ts +12 -1
  43. package/dist/src/parsers/python.js +26 -1
  44. package/dist/src/parsers/python.js.map +1 -1
  45. package/dist/src/parsers/registry.d.ts +1 -1
  46. package/dist/src/parsers/registry.js +1 -1
  47. package/dist/src/parsers/ruby.d.ts +13 -1
  48. package/dist/src/parsers/ruby.js +26 -1
  49. package/dist/src/parsers/ruby.js.map +1 -1
  50. package/dist/src/parsers/rust.d.ts +1 -1
  51. package/dist/src/parsers/rust.js +1 -1
  52. package/dist/src/parsers/typescript.d.ts +1 -1
  53. package/dist/src/parsers/typescript.js +1 -1
  54. package/dist/src/tools/toolDefinitionsCore.js +2 -2
  55. package/dist/src/utils/appDir.d.ts +1 -1
  56. package/dist/src/utils/appDir.js +1 -1
  57. package/dist/src/utils/auditLogger.d.ts +1 -1
  58. package/dist/src/utils/auditLogger.js +1 -1
  59. package/dist/src/utils/backupManager.d.ts +1 -1
  60. package/dist/src/utils/backupManager.js +1 -1
  61. package/dist/src/utils/constants.d.ts +1 -1
  62. package/dist/src/utils/constants.js +1 -1
  63. package/dist/src/utils/diff.d.ts +2 -2
  64. package/dist/src/utils/diff.js +2 -2
  65. package/dist/src/utils/fileLock.d.ts +1 -1
  66. package/dist/src/utils/fileLock.js +1 -1
  67. package/dist/src/utils/fileWalker.d.ts +1 -1
  68. package/dist/src/utils/fileWalker.js +1 -1
  69. package/dist/src/utils/fileWatcher.d.ts +1 -1
  70. package/dist/src/utils/fileWatcher.js +1 -1
  71. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  72. package/dist/src/utils/fuzzySearch.js +1 -1
  73. package/dist/src/utils/logger.d.ts +1 -1
  74. package/dist/src/utils/logger.js +1 -1
  75. package/dist/src/utils/rateLimiter.d.ts +1 -1
  76. package/dist/src/utils/rateLimiter.js +1 -1
  77. package/dist/src/utils/streaming.d.ts +1 -1
  78. package/dist/src/utils/streaming.js +1 -1
  79. package/dist/src/utils/telemetry.d.ts +1 -1
  80. package/dist/src/utils/telemetry.js +1 -1
  81. package/llms.txt +8 -8
  82. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Dart Tree-sitter Parser - v3.8.0
2
+ * Dart Tree-sitter Parser - v3.8.1
3
3
  * 100% AST accuracy via WASM
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Go Parser - v3.8.0
2
+ * Go Parser - v3.8.1
3
3
  * Tree-sitter based Go parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Go Parser - v3.8.0
2
+ * Go Parser - v3.8.1
3
3
  * Tree-sitter based Go parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Java Parser - v3.8.0
2
+ * Java Parser - v3.8.1
3
3
  * Tree-sitter based Java parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Java Parser - v3.8.0
2
+ * Java Parser - v3.8.1
3
3
  * Tree-sitter based Java parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Kotlin Parser - v3.8.0
2
+ * Kotlin Parser - v3.8.1
3
3
  * Tree-sitter based Kotlin parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Kotlin Parser - v3.8.0
2
+ * Kotlin Parser - v3.8.1
3
3
  * Tree-sitter based Kotlin parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * PHP Parser - v3.8.0
2
+ * PHP Parser - v3.8.1
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * PHP Parser - v3.8.0
2
+ * PHP Parser - v3.8.1
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,11 +1,22 @@
1
1
  /**
2
- * Python Parser - v3.8.0
2
+ * Python Parser - v3.8.1
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
+ * v3.8.1: override getInsideStartIndex/getInsideEndIndex for indentation-based syntax
4
5
  */
5
6
  import { Tree } from "web-tree-sitter";
6
7
  import { BaseParser, SymbolInfo } from "./base.js";
7
8
  export declare class PythonParser extends BaseParser {
8
9
  constructor();
10
+ /**
11
+ * For Python's indentation-based blocks, inside_start = first byte after the `:` + newline
12
+ * that opens the block body (e.g. after `def foo():\n`).
13
+ */
14
+ getInsideStartIndex(content: string, symbolInfo: SymbolInfo): number;
15
+ /**
16
+ * For Python's indentation-based blocks, inside_end = last byte of the last statement
17
+ * in the body — i.e. just before the symbol's endIndex, excluding trailing newlines.
18
+ */
19
+ getInsideEndIndex(content: string, symbolInfo: SymbolInfo): number;
9
20
  extractSymbol(tree: Tree, symbolName: string, className?: string): string | null;
10
21
  findSymbols(tree: Tree): SymbolInfo[];
11
22
  private findParentClass;
@@ -1,12 +1,37 @@
1
1
  /**
2
- * Python Parser - v3.8.0
2
+ * Python Parser - v3.8.1
3
3
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
4
+ * v3.8.1: override getInsideStartIndex/getInsideEndIndex for indentation-based syntax
4
5
  */
5
6
  import { BaseParser } from "./base.js";
6
7
  export class PythonParser extends BaseParser {
7
8
  constructor() {
8
9
  super("python");
9
10
  }
11
+ /**
12
+ * For Python's indentation-based blocks, inside_start = first byte after the `:` + newline
13
+ * that opens the block body (e.g. after `def foo():\n`).
14
+ */
15
+ getInsideStartIndex(content, symbolInfo) {
16
+ // Find the colon that opens the block
17
+ const colon = content.indexOf(":", symbolInfo.startIndex);
18
+ if (colon === -1)
19
+ return symbolInfo.startIndex + 1;
20
+ const newline = content.indexOf("\n", colon);
21
+ return newline !== -1 ? newline + 1 : colon + 1;
22
+ }
23
+ /**
24
+ * For Python's indentation-based blocks, inside_end = last byte of the last statement
25
+ * in the body — i.e. just before the symbol's endIndex, excluding trailing newlines.
26
+ */
27
+ getInsideEndIndex(content, symbolInfo) {
28
+ // Walk back from endIndex past any trailing whitespace/newlines
29
+ let idx = symbolInfo.endIndex - 1;
30
+ while (idx > symbolInfo.startIndex && (content[idx] === "\n" || content[idx] === "\r" || content[idx] === " " || content[idx] === "\t")) {
31
+ idx--;
32
+ }
33
+ return idx + 1;
34
+ }
10
35
  extractSymbol(tree, symbolName, className) {
11
36
  const cursor = tree.walk();
12
37
  const search = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parsers/python.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parsers/python.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Parser Registry - v3.8.0
2
+ * Parser Registry - v3.8.1
3
3
  * Manages all language parsers
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Parser Registry - v3.8.0
2
+ * Parser Registry - v3.8.1
3
3
  * Manages all language parsers
4
4
  */
5
5
  import { TypeScriptParser } from "./typescript.js";
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Ruby Parser - v3.8.0
2
+ * Ruby Parser - v3.8.1
3
3
  * Tree-sitter based Ruby parser
4
+ * v3.8.1: override getInsideStartIndex/getInsideEndIndex for end-based syntax
4
5
  */
5
6
  import { Tree } from "web-tree-sitter";
6
7
  import { BaseParser, SymbolInfo } from "./base.js";
@@ -14,6 +15,17 @@ export declare class RubyParser extends BaseParser {
14
15
  */
15
16
  extractSymbol(tree: Tree, symbolName: string, className?: string): string | null;
16
17
  search(tree: Tree, pattern: string): SymbolInfo[];
18
+ /**
19
+ * For Ruby's `end`-based blocks, inside_start = first byte after the header line.
20
+ * The header line is the first line of the node (e.g. "def full_name\n" or "class User < ApplicationRecord\n").
21
+ * We find the newline that terminates the first line of the symbol and insert after it.
22
+ */
23
+ getInsideStartIndex(content: string, symbolInfo: SymbolInfo): number;
24
+ /**
25
+ * For Ruby's `end`-based blocks, inside_end = the byte index of the `end` keyword itself.
26
+ * We search backwards from the symbol's endIndex for the last "end" token on its own line.
27
+ */
28
+ getInsideEndIndex(content: string, symbolInfo: SymbolInfo): number;
17
29
  findSymbols(tree: Tree): SymbolInfo[];
18
30
  private findParentClass;
19
31
  }
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Ruby Parser - v3.8.0
2
+ * Ruby Parser - v3.8.1
3
3
  * Tree-sitter based Ruby parser
4
+ * v3.8.1: override getInsideStartIndex/getInsideEndIndex for end-based syntax
4
5
  */
5
6
  import { BaseParser } from "./base.js";
6
7
  export class RubyParser extends BaseParser {
@@ -28,6 +29,30 @@ export class RubyParser extends BaseParser {
28
29
  search(tree, pattern) {
29
30
  return this.findSymbols(tree).filter(s => s.name.toLowerCase().includes(pattern.toLowerCase()));
30
31
  }
32
+ /**
33
+ * For Ruby's `end`-based blocks, inside_start = first byte after the header line.
34
+ * The header line is the first line of the node (e.g. "def full_name\n" or "class User < ApplicationRecord\n").
35
+ * We find the newline that terminates the first line of the symbol and insert after it.
36
+ */
37
+ getInsideStartIndex(content, symbolInfo) {
38
+ // Find the newline that ends the opening line (def/class header)
39
+ const firstNewline = content.indexOf("\n", symbolInfo.startIndex);
40
+ return firstNewline !== -1 ? firstNewline + 1 : symbolInfo.startIndex + 1;
41
+ }
42
+ /**
43
+ * For Ruby's `end`-based blocks, inside_end = the byte index of the `end` keyword itself.
44
+ * We search backwards from the symbol's endIndex for the last "end" token on its own line.
45
+ */
46
+ getInsideEndIndex(content, symbolInfo) {
47
+ // Walk backwards from the node end to find the `end` keyword line
48
+ const slice = content.substring(0, symbolInfo.endIndex);
49
+ const endMatch = slice.match(/\bend\b\s*$/);
50
+ if (endMatch && endMatch.index !== undefined) {
51
+ return endMatch.index;
52
+ }
53
+ // Fallback: insert just before the last character of the symbol
54
+ return symbolInfo.endIndex - 1;
55
+ }
31
56
  findSymbols(tree) {
32
57
  const symbols = [];
33
58
  const cursor = tree.walk();
@@ -1 +1 @@
1
- {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rust Parser - v3.8.0
2
+ * Rust Parser - v3.8.1
3
3
  * Tree-sitter based Rust parser
4
4
  */
5
5
  import { Tree } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rust Parser - v3.8.0
2
+ * Rust Parser - v3.8.1
3
3
  * Tree-sitter based Rust parser
4
4
  */
5
5
  import { BaseParser } from "./base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TypeScript Parser - v3.8.0
2
+ * TypeScript Parser - v3.8.1
3
3
  * Tree-sitter based TS/JS parser
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * TypeScript Parser - v3.8.0
2
+ * TypeScript Parser - v3.8.1
3
3
  * Tree-sitter based TS/JS parser
4
4
  * CLEANUP: replaceSymbol removed (inherited from BaseParser)
5
5
  */
@@ -158,7 +158,7 @@ export const CORE_TOOLS = [
158
158
  required: ["filePath", "projectRoot", "oldName", "newName"],
159
159
  },
160
160
  },
161
- // ── AST Transform (v3.8.0) ──────────────────────────────────────────────
161
+ // ── AST Transform (v3.8.1) ──────────────────────────────────────────────
162
162
  {
163
163
  name: "ast_transform",
164
164
  description: "Apply a declarative AST transformation to a symbol. Supports: add_parameter, wrap_with_try_catch, add_decorator, change_return_type, extract_variable. Uses two-phase write (Phase 1: preview diff, Phase 2: confirm with token).",
@@ -195,7 +195,7 @@ export const CORE_TOOLS = [
195
195
  required: ["filePath", "projectRoot", "symbolName", "transform"],
196
196
  },
197
197
  },
198
- // ── NEW TOOLS v3.8.0 ──────────────────────────────────────────────────────ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
198
+ // ── NEW TOOLS v3.8.1 ──────────────────────────────────────────────────────ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ
199
199
  {
200
200
  name: "search_symbols",
201
201
  description: "Search symbols by name across the repo using AST (not text search). Finds classes, functions, methods by approximate name.",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * App Directory - v3.8.0
2
+ * App Directory - v3.8.1
3
3
  * Centralizes ~/.mcp-code-context/ path resolution across all OS.
4
4
  * Fallback to os.tmpdir() in environments without HOME (CI, Docker).
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * App Directory - v3.8.0
2
+ * App Directory - v3.8.1
3
3
  * Centralizes ~/.mcp-code-context/ path resolution across all OS.
4
4
  * Fallback to os.tmpdir() in environments without HOME (CI, Docker).
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Audit Logger - v3.8.0
2
+ * Audit Logger - v3.8.1
3
3
  * Comprehensive audit trail for all operations
4
4
  */
5
5
  export interface AuditEntry {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Audit Logger - v3.8.0
2
+ * Audit Logger - v3.8.1
3
3
  * Comprehensive audit trail for all operations
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Backup Manager - v3.8.0
2
+ * Backup Manager - v3.8.1
3
3
  * Handles rolling backups in ~/.mcp-code-context/backups/
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Backup Manager - v3.8.0
2
+ * Backup Manager - v3.8.1
3
3
  * Handles rolling backups in ~/.mcp-code-context/backups/
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Constants - Centralized configuration
3
- * v3.8.0
3
+ * v3.8.1
4
4
  */
5
5
  export declare const EXCLUDE_DIRS: string[];
6
6
  export declare const SUPPORTED_EXTENSIONS: string[];
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Constants - Centralized configuration
3
- * v3.8.0
3
+ * v3.8.1
4
4
  */
5
5
  // Directory exclusions
6
6
  export const EXCLUDE_DIRS = [
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Diff Utilities - v3.8.0
2
+ * Diff Utilities - v3.8.1
3
3
  * Uses diff-match-patch for efficient diffing
4
4
  */
5
5
  export interface DiffLine {
@@ -10,7 +10,7 @@ export interface DiffLine {
10
10
  /**
11
11
  * Generates an early fallback diff for large files with many changes.
12
12
  * Avoids O(n+d²) degradation from Myers algorithm.
13
- * FIX-07: Added in v3.8.0.
13
+ * FIX-07: Added in v3.8.1.
14
14
  *
15
15
  * @param oldText - Original file content
16
16
  * @param newText - Modified file content
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Diff Utilities - v3.8.0
2
+ * Diff Utilities - v3.8.1
3
3
  * Uses diff-match-patch for efficient diffing
4
4
  */
5
5
  import DiffMatchPatch from 'diff-match-patch';
@@ -22,7 +22,7 @@ function estimateChangeRatio(oldText, newText) {
22
22
  /**
23
23
  * Generates an early fallback diff for large files with many changes.
24
24
  * Avoids O(n+d²) degradation from Myers algorithm.
25
- * FIX-07: Added in v3.8.0.
25
+ * FIX-07: Added in v3.8.1.
26
26
  *
27
27
  * @param oldText - Original file content
28
28
  * @param newText - Modified file content
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.8.0
2
+ * File Lock Manager - v3.8.1
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Lock Manager - v3.8.0
2
+ * File Lock Manager - v3.8.1
3
3
  * Filesystem-based locks for multi-process safety
4
4
  */
5
5
  import lockfile from 'proper-lockfile';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Walker Utility - v3.8.0
2
+ * File Walker Utility - v3.8.1
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.8.0
2
+ * File Walker Utility - v3.8.1
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.8.0
2
+ * File Watcher - v3.8.1
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.8.0
2
+ * File Watcher - v3.8.1
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.8.0
2
+ * Fuzzy Search - v3.8.1
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.8.0
2
+ * Fuzzy Search - v3.8.1
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.8.0
2
+ * Logger - v3.8.1
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.8.0
2
+ * Logger - v3.8.1
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
- * Rate Limiter - v3.8.0
2
+ * Rate Limiter - v3.8.1
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  interface RateLimitConfig {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.8.0
2
+ * Rate Limiter - v3.8.1
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  export class RateLimiter {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Streaming - v3.8.0
2
+ * File Streaming - v3.8.1
3
3
  * Stream large files in chunks to avoid memory exhaustion
4
4
  */
5
5
  import type { BaseParser, SymbolInfo } from "../parsers/base.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * File Streaming - v3.8.0
2
+ * File Streaming - v3.8.1
3
3
  * Stream large files in chunks to avoid memory exhaustion
4
4
  */
5
5
  import * as fs from "node:fs";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Telemetry - v3.8.0
2
+ * Telemetry - v3.8.1
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export interface Metric {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Telemetry - v3.8.0
2
+ * Telemetry - v3.8.1
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export class TelemetryCollector {
package/llms.txt CHANGED
@@ -1,8 +1,8 @@
1
- # mcp-code-context v3.8.0
1
+ # mcp-code-context v3.8.1
2
2
 
3
3
  > A Model Context Protocol (MCP) server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with middleware pipeline, session-scoped state, and crash recovery.
4
4
 
5
- ## What's New in v3.8.0
5
+ ## What's New in v3.8.1
6
6
 
7
7
  🚀 **CRITICAL FIXES - Production Readiness Release**:
8
8
  - ✅ **Session-scoped state**: Each MCP client gets isolated locks, confirmation store, rate limiter (no state leakage)
@@ -149,13 +149,13 @@ This MCP server solves two problems:
149
149
  - `steps` (optional): Number of versions to go back (1-5, default: 1).
150
150
  **What it does:** Reverts the file to the state it was in before the last 1-5 modifications.
151
151
 
152
- ### Write Tools (v3.8.0 Two-Phase Workflow)
152
+ ### Write Tools (v3.8.1 Two-Phase Workflow)
153
153
 
154
154
  All write tools follow a **Two-Phase Workflow**:
155
155
  1. **Phase 1 (Preview)**: Call without a token to get a unified `diff` and a `confirmationToken`.
156
156
  2. **Phase 2 (Apply)**: Call with `confirmationToken` and `confirm: true` to apply the changes.
157
157
 
158
- **Important Notes (v3.8.0):**
158
+ **Important Notes (v3.8.1):**
159
159
  - ✅ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings.
160
160
  - ✅ **Parameter Brace Handling**: Methods with braces in parameters (e.g., `{int? cart}`) are now handled correctly.
161
161
  - ✅ **Session-scoped state**: Each MCP client gets isolated state (locks, confirmation store, rate limiter).
@@ -236,7 +236,7 @@ All write tools follow a **Two-Phase Workflow**:
236
236
 
237
237
  **Best used when:** Cleaning up deprecated functions or unused code.
238
238
 
239
- ## New Tools (v3.8.0)
239
+ ## New Tools (v3.8.1)
240
240
 
241
241
  #### 11. `get_session_stats`
242
242
  **Purpose:** Get statistics for the current MCP client session.
@@ -268,7 +268,7 @@ All write tools follow a **Two-Phase Workflow**:
268
268
 
269
269
  **Best used when:** Recovering work after a server crash.
270
270
 
271
- ## Previously Added Tools (v3.8.0)
271
+ ## Previously Added Tools (v3.8.1)
272
272
 
273
273
  #### 14. `parse_file`
274
274
  **Purpose:** Parse a file using Tree-sitter and extract all symbols.
@@ -313,7 +313,7 @@ All write tools follow a **Two-Phase Workflow**:
313
313
  5. **Phase 2: Apply Edit** → Verify the diff, then call with the token and `confirm: true`.
314
314
  6. **Recovery** → Use `rollback_file` if needed.
315
315
 
316
- ## Session State Configuration (v3.8.0+)
316
+ ## Session State Configuration (v3.8.1+)
317
317
 
318
318
  ### Critical: Session-Scoped State
319
319
 
@@ -429,6 +429,6 @@ No additional configuration is needed beyond adding the MCP server definition. S
429
429
 
430
430
  ---
431
431
 
432
- **Version**: 3.8.0
432
+ **Version**: 3.8.1
433
433
  **Last Updated**: June 8, 2026
434
434
  **Status**: Production-ready with session-scoped state and crash recovery
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-code-context",
3
- "version": "3.8.0",
3
+ "version": "3.8.1",
4
4
  "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, Python, and Ruby (with ActiveRecord Virtual Schema extraction).",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",