mcp-code-context 3.9.1 → 3.9.2

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 (98) hide show
  1. package/CHANGELOG.md +227 -215
  2. package/INSTRUCTIONS.md +17 -11
  3. package/README.md +16 -7
  4. package/dist/src/core/engine.d.ts +1 -1
  5. package/dist/src/core/engine.js +1 -1
  6. package/dist/src/core/indexManager.d.ts +1 -1
  7. package/dist/src/core/indexManager.js +26 -26
  8. package/dist/src/core/sessionManager.d.ts +1 -1
  9. package/dist/src/core/sessionManager.js +1 -1
  10. package/dist/src/core/validator.d.ts +2 -2
  11. package/dist/src/core/validator.js +8 -2
  12. package/dist/src/core/validator.js.map +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 +1 -1
  19. package/dist/src/operations/confirmationStore.d.ts +1 -1
  20. package/dist/src/operations/confirmationStore.js +1 -1
  21. package/dist/src/operations/write.d.ts +1 -1
  22. package/dist/src/operations/write.js +1 -1
  23. package/dist/src/parsers/base.d.ts +1 -1
  24. package/dist/src/parsers/base.js +1 -1
  25. package/dist/src/parsers/csharp.d.ts +1 -1
  26. package/dist/src/parsers/csharp.js +1 -1
  27. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  28. package/dist/src/parsers/dartTreeSitter.js +1 -1
  29. package/dist/src/parsers/go.d.ts +1 -1
  30. package/dist/src/parsers/go.js +1 -1
  31. package/dist/src/parsers/java.d.ts +1 -1
  32. package/dist/src/parsers/java.js +1 -1
  33. package/dist/src/parsers/kotlin.d.ts +1 -1
  34. package/dist/src/parsers/kotlin.js +1 -1
  35. package/dist/src/parsers/php.d.ts +1 -1
  36. package/dist/src/parsers/php.js +1 -1
  37. package/dist/src/parsers/python.d.ts +1 -1
  38. package/dist/src/parsers/python.js +1 -1
  39. package/dist/src/parsers/registry.d.ts +1 -1
  40. package/dist/src/parsers/registry.js +1 -1
  41. package/dist/src/parsers/ruby.d.ts +1 -1
  42. package/dist/src/parsers/ruby.js +1 -1
  43. package/dist/src/parsers/rust.d.ts +1 -1
  44. package/dist/src/parsers/rust.js +1 -1
  45. package/dist/src/parsers/typescript.d.ts +1 -1
  46. package/dist/src/parsers/typescript.js +1 -1
  47. package/dist/src/tools/adminHandlers.js +8 -7
  48. package/dist/src/tools/adminHandlers.js.map +1 -1
  49. package/dist/src/tools/pipeline.js +1 -1
  50. package/dist/src/tools/readHandlers.js +20 -18
  51. package/dist/src/tools/readHandlers.js.map +1 -1
  52. package/dist/src/tools/toolDefinitions.d.ts +7 -2
  53. package/dist/src/tools/toolDefinitionsAdmin.d.ts +1 -1
  54. package/dist/src/tools/toolDefinitionsAdmin.js +12 -12
  55. package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -1
  56. package/dist/src/tools/toolDefinitionsCore.d.ts +6 -1
  57. package/dist/src/tools/toolDefinitionsCore.js +41 -41
  58. package/dist/src/tools/toolDefinitionsCore.js.map +1 -1
  59. package/dist/src/tools/writeHandlers.js +28 -16
  60. package/dist/src/tools/writeHandlers.js.map +1 -1
  61. package/dist/src/utils/appDir.d.ts +1 -1
  62. package/dist/src/utils/appDir.js +1 -1
  63. package/dist/src/utils/auditLogger.d.ts +1 -1
  64. package/dist/src/utils/auditLogger.js +1 -1
  65. package/dist/src/utils/backupManager.d.ts +1 -1
  66. package/dist/src/utils/backupManager.js +1 -1
  67. package/dist/src/utils/constants.d.ts +1 -1
  68. package/dist/src/utils/constants.js +1 -1
  69. package/dist/src/utils/diff.d.ts +1 -1
  70. package/dist/src/utils/diff.js +1 -1
  71. package/dist/src/utils/fileLock.d.ts +1 -1
  72. package/dist/src/utils/fileLock.js +1 -1
  73. package/dist/src/utils/fileWalker.d.ts +1 -1
  74. package/dist/src/utils/fileWalker.js +1 -1
  75. package/dist/src/utils/fileWatcher.d.ts +1 -1
  76. package/dist/src/utils/fileWatcher.js +1 -1
  77. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  78. package/dist/src/utils/fuzzySearch.js +1 -1
  79. package/dist/src/utils/gemfileParser.d.ts +1 -1
  80. package/dist/src/utils/gemfileParser.js +1 -1
  81. package/dist/src/utils/logger.d.ts +1 -1
  82. package/dist/src/utils/logger.js +1 -1
  83. package/dist/src/utils/metaprogramming.d.ts +1 -1
  84. package/dist/src/utils/metaprogramming.js +1 -1
  85. package/dist/src/utils/projectRoot.d.ts +9 -0
  86. package/dist/src/utils/projectRoot.js +94 -0
  87. package/dist/src/utils/projectRoot.js.map +1 -0
  88. package/dist/src/utils/railsRoutes.d.ts +1 -1
  89. package/dist/src/utils/railsRoutes.js +1 -1
  90. package/dist/src/utils/rateLimiter.d.ts +1 -1
  91. package/dist/src/utils/rateLimiter.js +1 -1
  92. package/dist/src/utils/streaming.d.ts +1 -1
  93. package/dist/src/utils/streaming.js +1 -1
  94. package/dist/src/utils/telemetry.d.ts +1 -1
  95. package/dist/src/utils/telemetry.js +1 -1
  96. package/llms.txt +14 -6
  97. package/package.json +1 -1
  98. package/vitest.config.ts +0 -37
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Fuzzy Search - v3.9.1
2
+ * Fuzzy Search - v3.9.2
3
3
  * Typo-tolerant search with fuse.js
4
4
  */
5
5
  import Fuse from 'fuse.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Gemfile Parser - v3.9.1
2
+ * Gemfile Parser - v3.9.2
3
3
  * Parses Ruby Gemfile to extract gem dependencies and infer implicit behavior.
4
4
  * Uses a JSON data file for gem descriptions so they can be updated without recompile.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Gemfile Parser - v3.9.1
2
+ * Gemfile Parser - v3.9.2
3
3
  * Parses Ruby Gemfile to extract gem dependencies and infer implicit behavior.
4
4
  * Uses a JSON data file for gem descriptions so they can be updated without recompile.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Logger - v3.9.1
2
+ * Logger - v3.9.2
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.9.1
2
+ * Logger - v3.9.2
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
- * Metaprogramming Entry Point Scanner - v3.9.1
2
+ * Metaprogramming Entry Point Scanner - v3.9.2
3
3
  * Identifies where Ruby's "magic" methods are generated in a codebase.
4
4
  * Does not resolve what methods are created — it surfaces WHERE to look.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Metaprogramming Entry Point Scanner - v3.9.1
2
+ * Metaprogramming Entry Point Scanner - v3.9.2
3
3
  * Identifies where Ruby's "magic" methods are generated in a codebase.
4
4
  * Does not resolve what methods are created — it surfaces WHERE to look.
5
5
  */
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Searches upward from startPath to find the nearest project root directory marked by common indicators.
3
+ */
4
+ export declare function findProjectRoot(startPath: string): string;
5
+ /**
6
+ * Resolves the effective projectRoot from tool arguments, candidate paths, or process.cwd().
7
+ * Eliminates the bug where undefined projectRoot was stringified as literal "undefined".
8
+ */
9
+ export declare function resolveProjectRoot(args?: Record<string, unknown>, fallbackPath?: string): string;
@@ -0,0 +1,94 @@
1
+ import * as path from "node:path";
2
+ import * as fs from "node:fs";
3
+ const ROOT_MARKERS = [
4
+ ".git",
5
+ "package.json",
6
+ "composer.json",
7
+ "pyproject.toml",
8
+ "requirements.txt",
9
+ "Cargo.toml",
10
+ "go.mod",
11
+ "Gemfile",
12
+ "pom.xml",
13
+ "build.gradle",
14
+ ];
15
+ /**
16
+ * Searches upward from startPath to find the nearest project root directory marked by common indicators.
17
+ */
18
+ export function findProjectRoot(startPath) {
19
+ try {
20
+ let current = path.resolve(startPath);
21
+ if (fs.existsSync(current)) {
22
+ const stat = fs.statSync(current);
23
+ if (stat.isFile()) {
24
+ current = path.dirname(current);
25
+ }
26
+ }
27
+ else {
28
+ // If path does not exist yet, start from dirname
29
+ current = path.dirname(current);
30
+ }
31
+ while (true) {
32
+ for (const marker of ROOT_MARKERS) {
33
+ if (fs.existsSync(path.join(current, marker))) {
34
+ return current;
35
+ }
36
+ }
37
+ const parent = path.dirname(current);
38
+ if (parent === current) {
39
+ break;
40
+ }
41
+ current = parent;
42
+ }
43
+ }
44
+ catch {
45
+ // Fallback if filesystem access fails
46
+ }
47
+ return path.resolve(startPath);
48
+ }
49
+ /**
50
+ * Resolves the effective projectRoot from tool arguments, candidate paths, or process.cwd().
51
+ * Eliminates the bug where undefined projectRoot was stringified as literal "undefined".
52
+ */
53
+ export function resolveProjectRoot(args, fallbackPath) {
54
+ if (args) {
55
+ if (typeof args.projectRoot === "string" &&
56
+ args.projectRoot.trim().length > 0 &&
57
+ args.projectRoot !== "undefined" &&
58
+ args.projectRoot !== "null") {
59
+ return path.resolve(args.projectRoot.trim());
60
+ }
61
+ if (typeof args.rootDir === "string" &&
62
+ args.rootDir.trim().length > 0 &&
63
+ args.rootDir !== "undefined" &&
64
+ args.rootDir !== "null") {
65
+ return findProjectRoot(args.rootDir.trim());
66
+ }
67
+ if (typeof args.directoryPath === "string" &&
68
+ args.directoryPath.trim().length > 0 &&
69
+ args.directoryPath !== "undefined" &&
70
+ args.directoryPath !== "null") {
71
+ return findProjectRoot(args.directoryPath.trim());
72
+ }
73
+ if (typeof args.filePath === "string" &&
74
+ args.filePath.trim().length > 0 &&
75
+ args.filePath !== "undefined" &&
76
+ args.filePath !== "null") {
77
+ return findProjectRoot(args.filePath.trim());
78
+ }
79
+ if (Array.isArray(args.reads) && args.reads.length > 0) {
80
+ const first = args.reads[0];
81
+ if (first && typeof first === "object" && typeof first.filePath === "string") {
82
+ return findProjectRoot(first.filePath);
83
+ }
84
+ }
85
+ }
86
+ if (typeof fallbackPath === "string" &&
87
+ fallbackPath.trim().length > 0 &&
88
+ fallbackPath !== "undefined" &&
89
+ fallbackPath !== "null") {
90
+ return findProjectRoot(fallbackPath.trim());
91
+ }
92
+ return process.cwd();
93
+ }
94
+ //# sourceMappingURL=projectRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectRoot.js","sourceRoot":"","sources":["../../../src/utils/projectRoot.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rails Routes Parser - v3.9.1
2
+ * Rails Routes Parser - v3.9.2
3
3
  * Parses config/routes.rb to map HTTP routes to controller actions.
4
4
  * Uses indentation-based namespace tracking (immune to do/end counting errors).
5
5
  * Supports: resources, resource, explicit HTTP verbs, namespace/scope, root.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rails Routes Parser - v3.9.1
2
+ * Rails Routes Parser - v3.9.2
3
3
  * Parses config/routes.rb to map HTTP routes to controller actions.
4
4
  * Uses indentation-based namespace tracking (immune to do/end counting errors).
5
5
  * Supports: resources, resource, explicit HTTP verbs, namespace/scope, root.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.9.1
2
+ * Rate Limiter - v3.9.2
3
3
  * Token bucket algorithm for DoS protection
4
4
  */
5
5
  interface RateLimitConfig {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Rate Limiter - v3.9.1
2
+ * Rate Limiter - v3.9.2
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.9.1
2
+ * File Streaming - v3.9.2
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.9.1
2
+ * File Streaming - v3.9.2
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.9.1
2
+ * Telemetry - v3.9.2
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export interface Metric {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Telemetry - v3.9.1
2
+ * Telemetry - v3.9.2
3
3
  * Metrics collection and monitoring
4
4
  */
5
5
  export class TelemetryCollector {
package/llms.txt CHANGED
@@ -1,8 +1,16 @@
1
- # mcp-code-context v3.9.1
1
+ # mcp-code-context v3.9.2
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.9.1
5
+ ## What's New in v3.9.2
6
+
7
+ 🛡️ **Project Root Fallback & Schema Freedom Release**:
8
+ - ✅ **Smart Project Root Discovery**: `resolveProjectRoot` & `findProjectRoot` walk up directory trees detecting `.git`, `package.json`, `composer.json`, `pyproject.toml`, etc. Eliminates false-positive `outside project boundary ".../undefined"` security errors.
9
+ - ✅ **Optional Schema Requirements**: `projectRoot` is now optional across all tools in `CORE_TOOLS` and `ADMIN_TOOLS`. LLM agents can perform surgical operations with just `filePath` or `rootDir`.
10
+ - ✅ **SecurityValidator Guard**: `SecurityValidator` safely defaults `undefined`/`null` roots to `process.cwd()`.
11
+ - ✅ **Startup Diagnostics Signature**: Emits `[mcp-code-context] v3.9.2 running on stdio` on startup.
12
+
13
+ ## Previously Added in v3.9.1
6
14
 
7
15
  🐛 **Bug Fix Release**:
8
16
  - ✅ **`get_rails_routes` namespace fix**: Routes inside `namespace :admin do` now produce `/admin/users` (was `/users`). Controllers correctly namespaced as `admin/users`. Fixed regex that captured `admin do` instead of `admin` with symbol syntax.
@@ -159,13 +167,13 @@ This MCP server solves two problems:
159
167
  - `steps` (optional): Number of versions to go back (1-5, default: 1).
160
168
  **What it does:** Reverts the file to the state it was in before the last 1-5 modifications.
161
169
 
162
- ### Write Tools (v3.9.1 Two-Phase Workflow)
170
+ ### Write Tools (Two-Phase Workflow)
163
171
 
164
172
  All write tools follow a **Two-Phase Workflow**:
165
173
  1. **Phase 1 (Preview)**: Call without a token to get a unified `diff` and a `confirmationToken`.
166
174
  2. **Phase 2 (Apply)**: Call with `confirmationToken` and `confirm: true` to apply the changes.
167
175
 
168
- **Important Notes (v3.9.1):**
176
+ **Important Safety Features:**
169
177
  - ✅ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings.
170
178
  - ✅ **Parameter Brace Handling**: Methods with braces in parameters (e.g., `{int? cart}`) are now handled correctly.
171
179
  - ✅ **Session-scoped state**: Each MCP client gets isolated state (locks, confirmation store, rate limiter).
@@ -344,7 +352,7 @@ All write tools follow a **Two-Phase Workflow**:
344
352
  5. **Phase 2: Apply Edit** → Verify the diff, then call with the token and `confirm: true`.
345
353
  6. **Recovery** → Use `rollback_file` if needed.
346
354
 
347
- ## Session State Configuration (v3.9.1+)
355
+ ## Session State Configuration (v3.8.0+)
348
356
 
349
357
  ### Critical: Session-Scoped State
350
358
 
@@ -460,6 +468,6 @@ No additional configuration is needed beyond adding the MCP server definition. S
460
468
 
461
469
  ---
462
470
 
463
- **Version**: 3.9.1
471
+ **Version**: 3.9.2
464
472
  **Last Updated**: June 8, 2026
465
473
  **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.9.1",
3
+ "version": "3.9.2",
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",
package/vitest.config.ts DELETED
@@ -1,37 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
- import path from 'path';
3
-
4
- export default defineConfig({
5
- test: {
6
- globals: true,
7
- environment: 'node',
8
- reporters: ['default'],
9
- coverage: {
10
- provider: 'v8',
11
- reporter: ['text', 'json', 'html'],
12
- exclude: [
13
- 'node_modules/',
14
- 'dist/',
15
- 'dist-tests/',
16
- '**/*.spec.ts',
17
- '**/*.test.ts',
18
- 'tests/',
19
- 'scripts/'
20
- ],
21
- thresholds: {
22
- lines: 80,
23
- functions: 80,
24
- branches: 75,
25
- statements: 80
26
- }
27
- },
28
- testTimeout: 60000,
29
- hookTimeout: 60000,
30
- outputTruncateLength: 80
31
- },
32
- resolve: {
33
- alias: {
34
- '@': path.resolve(__dirname, './src')
35
- }
36
- }
37
- });