mcp-code-context 3.8.0 → 3.9.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.
- package/CHANGELOG.md +31 -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 +97 -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 +57 -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/pipeline.js +4 -0
- package/dist/src/tools/pipeline.js.map +1 -1
- package/dist/src/tools/readHandlers.d.ts +18 -0
- package/dist/src/tools/readHandlers.js +52 -0
- package/dist/src/tools/readHandlers.js.map +1 -1
- package/dist/src/tools/toolDefinitions.d.ts +45 -0
- package/dist/src/tools/toolDefinitionsCore.d.ts +45 -0
- package/dist/src/tools/toolDefinitionsCore.js +39 -3
- package/dist/src/tools/toolDefinitionsCore.js.map +1 -1
- 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/gemDescriptions.json +22 -0
- package/dist/src/utils/gemfileParser.d.ts +17 -0
- package/dist/src/utils/gemfileParser.js +63 -0
- package/dist/src/utils/gemfileParser.js.map +1 -0
- package/dist/src/utils/logger.d.ts +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/utils/metaprogramming.d.ts +18 -0
- package/dist/src/utils/metaprogramming.js +139 -0
- package/dist/src/utils/metaprogramming.js.map +1 -0
- package/dist/src/utils/railsRoutes.d.ts +18 -0
- package/dist/src/utils/railsRoutes.js +148 -0
- package/dist/src/utils/railsRoutes.js.map +1 -0
- package/dist/src/utils/railsSchema.d.ts +1 -0
- package/dist/src/utils/railsSchema.js +23 -0
- package/dist/src/utils/railsSchema.js.map +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 +2 -2
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rails Routes Parser - v3.9.0
|
|
3
|
+
* Parses config/routes.rb to map HTTP routes to controller actions.
|
|
4
|
+
* v1: handles resources, resource, explicit get/post/patch/put/delete/root.
|
|
5
|
+
* v1 limitation: only:/except:/shallow:/nested resources — emits warnings, does not generate false routes.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "node:fs/promises";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
// Cache: routesPath → { result, mtime }
|
|
10
|
+
const routesCache = new Map();
|
|
11
|
+
/** Standard 7 REST actions for `resources` */
|
|
12
|
+
const RESOURCES_ACTIONS = [
|
|
13
|
+
{ method: "GET", path: "", action: "index", controller: "" },
|
|
14
|
+
{ method: "GET", path: "/new", action: "new", controller: "" },
|
|
15
|
+
{ method: "POST", path: "", action: "create", controller: "" },
|
|
16
|
+
{ method: "GET", path: "/:id", action: "show", controller: "" },
|
|
17
|
+
{ method: "GET", path: "/:id/edit", action: "edit", controller: "" },
|
|
18
|
+
{ method: "PATCH", path: "/:id", action: "update", controller: "" },
|
|
19
|
+
{ method: "DELETE", path: "/:id", action: "destroy", controller: "" },
|
|
20
|
+
];
|
|
21
|
+
/** Standard 6 singular REST actions for `resource` */
|
|
22
|
+
const RESOURCE_ACTIONS = [
|
|
23
|
+
{ method: "GET", path: "/new", action: "new", controller: "" },
|
|
24
|
+
{ method: "POST", path: "", action: "create", controller: "" },
|
|
25
|
+
{ method: "GET", path: "", action: "show", controller: "" },
|
|
26
|
+
{ method: "GET", path: "/edit", action: "edit", controller: "" },
|
|
27
|
+
{ method: "PATCH", path: "", action: "update", controller: "" },
|
|
28
|
+
{ method: "DELETE", path: "", action: "destroy", controller: "" },
|
|
29
|
+
];
|
|
30
|
+
export async function parseRailsRoutes(projectRoot) {
|
|
31
|
+
const routesPath = path.join(projectRoot, "config", "routes.rb");
|
|
32
|
+
let mtime;
|
|
33
|
+
try {
|
|
34
|
+
mtime = (await fs.stat(routesPath)).mtimeMs;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null; // No routes.rb — not a Rails app
|
|
38
|
+
}
|
|
39
|
+
const cached = routesCache.get(routesPath);
|
|
40
|
+
if (cached?.mtime === mtime)
|
|
41
|
+
return cached.result;
|
|
42
|
+
const content = await fs.readFile(routesPath, "utf-8");
|
|
43
|
+
const result = parseRoutesContent(content);
|
|
44
|
+
routesCache.set(routesPath, { result, mtime });
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
export function parseRoutesContent(content) {
|
|
48
|
+
const routes = [];
|
|
49
|
+
const warnings = [];
|
|
50
|
+
// Stack for namespace/scope prefix accumulation
|
|
51
|
+
const prefixStack = [];
|
|
52
|
+
const lines = content.split("\n");
|
|
53
|
+
for (const rawLine of lines) {
|
|
54
|
+
const line = rawLine.trim();
|
|
55
|
+
// Skip comments and blank lines
|
|
56
|
+
if (line.startsWith("#") || line === "")
|
|
57
|
+
continue;
|
|
58
|
+
// Namespace/scope push
|
|
59
|
+
const nsMatch = line.match(/^(?:namespace|scope)\s+[:'"]([^'"]+)['"]/);
|
|
60
|
+
if (nsMatch) {
|
|
61
|
+
prefixStack.push(nsMatch[1].replace(/^:/, ""));
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Closing end — pop prefix stack
|
|
65
|
+
if (line === "end" && prefixStack.length > 0) {
|
|
66
|
+
prefixStack.pop();
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const prefix = prefixStack.length > 0 ? "/" + prefixStack.join("/") : "";
|
|
70
|
+
// Detect unsupported options — warn instead of generating wrong output
|
|
71
|
+
const hasOnlyExcept = /\bonly:\s*\[/.test(line) || /\bexcept:\s*\[/.test(line);
|
|
72
|
+
const hasShallow = /\bshallow:\s*true\b/.test(line);
|
|
73
|
+
const hasNested = line.includes("do") && (line.startsWith("resources") || line.startsWith("resource"));
|
|
74
|
+
// resources :name
|
|
75
|
+
const resourcesMatch = line.match(/^resources\s+:(\w+)/);
|
|
76
|
+
if (resourcesMatch) {
|
|
77
|
+
const name = resourcesMatch[1];
|
|
78
|
+
const controller = nameToController(name, prefixStack);
|
|
79
|
+
const basePath = `${prefix}/${name}`;
|
|
80
|
+
if (hasOnlyExcept) {
|
|
81
|
+
warnings.push(`resources :${name} uses only:/except: — route list may be incomplete. Full support planned for v2.`);
|
|
82
|
+
}
|
|
83
|
+
if (hasShallow) {
|
|
84
|
+
warnings.push(`resources :${name} uses shallow: — nested shallow routes not fully parsed.`);
|
|
85
|
+
}
|
|
86
|
+
if (hasNested) {
|
|
87
|
+
warnings.push(`resources :${name} has nested resources (do block) — only top-level routes parsed.`);
|
|
88
|
+
}
|
|
89
|
+
for (const action of RESOURCES_ACTIONS) {
|
|
90
|
+
routes.push({
|
|
91
|
+
method: action.method,
|
|
92
|
+
path: basePath + action.path,
|
|
93
|
+
controller,
|
|
94
|
+
action: action.action,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// resource :name (singular)
|
|
100
|
+
const resourceMatch = line.match(/^resource\s+:(\w+)/);
|
|
101
|
+
if (resourceMatch) {
|
|
102
|
+
const name = resourceMatch[1];
|
|
103
|
+
const controller = nameToController(name + "s", prefixStack); // pluralize for controller
|
|
104
|
+
const basePath = `${prefix}/${name}`;
|
|
105
|
+
if (hasOnlyExcept) {
|
|
106
|
+
warnings.push(`resource :${name} uses only:/except: — route list may be incomplete.`);
|
|
107
|
+
}
|
|
108
|
+
for (const action of RESOURCE_ACTIONS) {
|
|
109
|
+
routes.push({
|
|
110
|
+
method: action.method,
|
|
111
|
+
path: basePath + action.path,
|
|
112
|
+
controller,
|
|
113
|
+
action: action.action,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// Explicit HTTP verb routes: get '/path', to: 'controller#action'
|
|
119
|
+
const verbMatch = line.match(/^(get|post|patch|put|delete|head|options)\s+['"]([^'"]+)['"]\s*,\s*to:\s*['"]([^#'"]+)#([^'"]+)['"]/i);
|
|
120
|
+
if (verbMatch) {
|
|
121
|
+
routes.push({
|
|
122
|
+
method: verbMatch[1].toUpperCase(),
|
|
123
|
+
path: prefix + verbMatch[2],
|
|
124
|
+
controller: verbMatch[3].trim(),
|
|
125
|
+
action: verbMatch[4].trim(),
|
|
126
|
+
});
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// root to: 'controller#action'
|
|
130
|
+
const rootMatch = line.match(/^root\s+(?:to:\s*)?['"]([^#'"]+)#([^'"]+)['"]/);
|
|
131
|
+
if (rootMatch) {
|
|
132
|
+
routes.push({
|
|
133
|
+
method: "GET",
|
|
134
|
+
path: prefix + "/",
|
|
135
|
+
controller: rootMatch[1].trim(),
|
|
136
|
+
action: rootMatch[2].trim(),
|
|
137
|
+
});
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { routes, warnings };
|
|
142
|
+
}
|
|
143
|
+
/** Convert resource name + namespace stack to controller name */
|
|
144
|
+
function nameToController(name, prefixStack) {
|
|
145
|
+
const ns = prefixStack.length > 0 ? prefixStack.join("/") + "/" : "";
|
|
146
|
+
return `${ns}${name}`;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=railsRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"railsRoutes.js","sourceRoot":"","sources":["../../../src/utils/railsRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,3 +8,4 @@ export declare function loadRailsSchema(projectRoot: string): Promise<ProjectDbS
|
|
|
8
8
|
export declare function parseSchemaRb(content: string): ProjectDbSchema;
|
|
9
9
|
export declare function modelToTable(className: string): string;
|
|
10
10
|
export declare function formatSchemaAnnotation(tableName: string, columns: TableSchema): string;
|
|
11
|
+
export declare function findRailsConcerns(projectRoot: string): Promise<Map<string, string[]>>;
|
|
@@ -101,4 +101,27 @@ export function formatSchemaAnnotation(tableName, columns) {
|
|
|
101
101
|
.join("\n");
|
|
102
102
|
return `<!-- ActiveRecord Virtual Schema: ${tableName}\n${cols}\n-->`;
|
|
103
103
|
}
|
|
104
|
+
// R5: Concern Resolution - Scan for concerns in app/models/concerns and app/controllers/concerns
|
|
105
|
+
export async function findRailsConcerns(projectRoot) {
|
|
106
|
+
const concernMap = new Map();
|
|
107
|
+
const concernsDirs = [
|
|
108
|
+
path.join(projectRoot, "app", "models", "concerns"),
|
|
109
|
+
path.join(projectRoot, "app", "controllers", "concerns"),
|
|
110
|
+
];
|
|
111
|
+
for (const dir of concernsDirs) {
|
|
112
|
+
try {
|
|
113
|
+
const files = await fs.readdir(dir, { withFileTypes: true });
|
|
114
|
+
for (const file of files) {
|
|
115
|
+
if (file.isFile() && file.name.endsWith(".rb")) {
|
|
116
|
+
const moduleName = file.name.replace(/\.rb$/, "").split("_").map(part => part.charAt(0).toUpperCase() + part.slice(1)).join("");
|
|
117
|
+
concernMap.set(moduleName, [path.join(dir, file.name)]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Directory doesn't exist, skip
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return concernMap;
|
|
126
|
+
}
|
|
104
127
|
//# sourceMappingURL=railsSchema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"railsSchema.js","sourceRoot":"","sources":["../../../src/utils/railsSchema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"railsSchema.js","sourceRoot":"","sources":["../../../src/utils/railsSchema.ts"],"names":[],"mappings":"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"}
|
package/llms.txt
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# mcp-code-context v3.
|
|
1
|
+
# mcp-code-context v3.9.0
|
|
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.
|
|
5
|
+
## What's New in v3.9.0
|
|
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.
|
|
152
|
+
### Write Tools (v3.9.0 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.
|
|
158
|
+
**Important Notes (v3.9.0):**
|
|
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.
|
|
239
|
+
## New Tools (v3.9.0)
|
|
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.
|
|
271
|
+
## Previously Added Tools (v3.9.0)
|
|
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.
|
|
316
|
+
## Session State Configuration (v3.9.0+)
|
|
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.
|
|
432
|
+
**Version**: 3.9.0
|
|
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.
|
|
3
|
+
"version": "3.9.0",
|
|
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",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"mcp-code-context": "dist/src/index.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
11
|
+
"build": "tsc && node -e \"require('fs').copyFileSync('src/utils/gemDescriptions.json', 'dist/src/utils/gemDescriptions.json')\"",
|
|
12
12
|
"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-index-manager.js && node dist-tests/tests/test-wasm-parsers.js",
|
|
13
13
|
"test:ui": "vitest --ui",
|
|
14
14
|
"test:run": "vitest run",
|