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.
- package/CHANGELOG.md +15 -0
- package/INSTRUCTIONS.md +2 -2
- package/README.md +16 -8
- package/SECURITY.md +2 -2
- package/dist/src/core/engine.d.ts +1 -1
- package/dist/src/core/engine.js +1 -1
- package/dist/src/core/indexManager.d.ts +1 -1
- package/dist/src/core/indexManager.js +1 -1
- package/dist/src/core/sessionManager.d.ts +1 -1
- package/dist/src/core/sessionManager.js +1 -1
- package/dist/src/core/validator.d.ts +1 -1
- package/dist/src/core/validator.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/operations/astTransform.d.ts +1 -1
- package/dist/src/operations/astTransform.js +1 -1
- package/dist/src/operations/compress.d.ts +1 -1
- package/dist/src/operations/compress.js +46 -16
- package/dist/src/operations/compress.js.map +1 -1
- package/dist/src/operations/confirmationStore.d.ts +1 -1
- package/dist/src/operations/confirmationStore.js +1 -1
- package/dist/src/operations/impactAnalysis.js +46 -0
- package/dist/src/operations/impactAnalysis.js.map +1 -1
- package/dist/src/operations/write.d.ts +1 -1
- package/dist/src/operations/write.js +3 -3
- package/dist/src/operations/write.js.map +1 -1
- package/dist/src/parsers/base.d.ts +14 -1
- package/dist/src/parsers/base.js +20 -1
- package/dist/src/parsers/base.js.map +1 -1
- package/dist/src/parsers/csharp.d.ts +1 -1
- package/dist/src/parsers/csharp.js +1 -1
- package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
- package/dist/src/parsers/dartTreeSitter.js +1 -1
- package/dist/src/parsers/go.d.ts +1 -1
- package/dist/src/parsers/go.js +1 -1
- package/dist/src/parsers/java.d.ts +1 -1
- package/dist/src/parsers/java.js +1 -1
- package/dist/src/parsers/kotlin.d.ts +1 -1
- package/dist/src/parsers/kotlin.js +1 -1
- package/dist/src/parsers/php.d.ts +1 -1
- package/dist/src/parsers/php.js +1 -1
- package/dist/src/parsers/python.d.ts +12 -1
- package/dist/src/parsers/python.js +26 -1
- package/dist/src/parsers/python.js.map +1 -1
- package/dist/src/parsers/registry.d.ts +1 -1
- package/dist/src/parsers/registry.js +1 -1
- package/dist/src/parsers/ruby.d.ts +13 -1
- package/dist/src/parsers/ruby.js +26 -1
- package/dist/src/parsers/ruby.js.map +1 -1
- package/dist/src/parsers/rust.d.ts +1 -1
- package/dist/src/parsers/rust.js +1 -1
- package/dist/src/parsers/typescript.d.ts +1 -1
- package/dist/src/parsers/typescript.js +1 -1
- package/dist/src/tools/toolDefinitionsCore.js +2 -2
- package/dist/src/utils/appDir.d.ts +1 -1
- package/dist/src/utils/appDir.js +1 -1
- package/dist/src/utils/auditLogger.d.ts +1 -1
- package/dist/src/utils/auditLogger.js +1 -1
- package/dist/src/utils/backupManager.d.ts +1 -1
- package/dist/src/utils/backupManager.js +1 -1
- package/dist/src/utils/constants.d.ts +1 -1
- package/dist/src/utils/constants.js +1 -1
- package/dist/src/utils/diff.d.ts +2 -2
- package/dist/src/utils/diff.js +2 -2
- package/dist/src/utils/fileLock.d.ts +1 -1
- package/dist/src/utils/fileLock.js +1 -1
- package/dist/src/utils/fileWalker.d.ts +1 -1
- package/dist/src/utils/fileWalker.js +1 -1
- package/dist/src/utils/fileWatcher.d.ts +1 -1
- package/dist/src/utils/fileWatcher.js +1 -1
- package/dist/src/utils/fuzzySearch.d.ts +1 -1
- package/dist/src/utils/fuzzySearch.js +1 -1
- package/dist/src/utils/logger.d.ts +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/utils/rateLimiter.d.ts +1 -1
- package/dist/src/utils/rateLimiter.js +1 -1
- package/dist/src/utils/streaming.d.ts +1 -1
- package/dist/src/utils/streaming.js +1 -1
- package/dist/src/utils/telemetry.d.ts +1 -1
- package/dist/src/utils/telemetry.js +1 -1
- package/llms.txt +8 -8
- package/package.json +1 -1
package/dist/src/parsers/go.d.ts
CHANGED
package/dist/src/parsers/go.js
CHANGED
package/dist/src/parsers/java.js
CHANGED
package/dist/src/parsers/php.js
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Python Parser - v3.8.
|
|
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.
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parsers/python.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ruby Parser - v3.8.
|
|
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
|
}
|
package/dist/src/parsers/ruby.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ruby Parser - v3.8.
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parsers/ruby.ts"],"names":[],"mappings":"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"}
|
package/dist/src/parsers/rust.js
CHANGED
|
@@ -158,7 +158,7 @@ export const CORE_TOOLS = [
|
|
|
158
158
|
required: ["filePath", "projectRoot", "oldName", "newName"],
|
|
159
159
|
},
|
|
160
160
|
},
|
|
161
|
-
// ── AST Transform (v3.8.
|
|
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.
|
|
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.",
|
package/dist/src/utils/appDir.js
CHANGED
package/dist/src/utils/diff.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Diff Utilities - v3.8.
|
|
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.
|
|
13
|
+
* FIX-07: Added in v3.8.1.
|
|
14
14
|
*
|
|
15
15
|
* @param oldText - Original file content
|
|
16
16
|
* @param newText - Modified file content
|
package/dist/src/utils/diff.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Diff Utilities - v3.8.
|
|
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.
|
|
25
|
+
* FIX-07: Added in v3.8.1.
|
|
26
26
|
*
|
|
27
27
|
* @param oldText - Original file content
|
|
28
28
|
* @param newText - Modified file content
|
package/dist/src/utils/logger.js
CHANGED
package/llms.txt
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# mcp-code-context v3.8.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|