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.
Files changed (103) hide show
  1. package/CHANGELOG.md +31 -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 +97 -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 +57 -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/pipeline.js +4 -0
  55. package/dist/src/tools/pipeline.js.map +1 -1
  56. package/dist/src/tools/readHandlers.d.ts +18 -0
  57. package/dist/src/tools/readHandlers.js +52 -0
  58. package/dist/src/tools/readHandlers.js.map +1 -1
  59. package/dist/src/tools/toolDefinitions.d.ts +45 -0
  60. package/dist/src/tools/toolDefinitionsCore.d.ts +45 -0
  61. package/dist/src/tools/toolDefinitionsCore.js +39 -3
  62. package/dist/src/tools/toolDefinitionsCore.js.map +1 -1
  63. package/dist/src/utils/appDir.d.ts +1 -1
  64. package/dist/src/utils/appDir.js +1 -1
  65. package/dist/src/utils/auditLogger.d.ts +1 -1
  66. package/dist/src/utils/auditLogger.js +1 -1
  67. package/dist/src/utils/backupManager.d.ts +1 -1
  68. package/dist/src/utils/backupManager.js +1 -1
  69. package/dist/src/utils/constants.d.ts +1 -1
  70. package/dist/src/utils/constants.js +1 -1
  71. package/dist/src/utils/diff.d.ts +2 -2
  72. package/dist/src/utils/diff.js +2 -2
  73. package/dist/src/utils/fileLock.d.ts +1 -1
  74. package/dist/src/utils/fileLock.js +1 -1
  75. package/dist/src/utils/fileWalker.d.ts +1 -1
  76. package/dist/src/utils/fileWalker.js +1 -1
  77. package/dist/src/utils/fileWatcher.d.ts +1 -1
  78. package/dist/src/utils/fileWatcher.js +1 -1
  79. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  80. package/dist/src/utils/fuzzySearch.js +1 -1
  81. package/dist/src/utils/gemDescriptions.json +22 -0
  82. package/dist/src/utils/gemfileParser.d.ts +17 -0
  83. package/dist/src/utils/gemfileParser.js +63 -0
  84. package/dist/src/utils/gemfileParser.js.map +1 -0
  85. package/dist/src/utils/logger.d.ts +1 -1
  86. package/dist/src/utils/logger.js +1 -1
  87. package/dist/src/utils/metaprogramming.d.ts +18 -0
  88. package/dist/src/utils/metaprogramming.js +139 -0
  89. package/dist/src/utils/metaprogramming.js.map +1 -0
  90. package/dist/src/utils/railsRoutes.d.ts +18 -0
  91. package/dist/src/utils/railsRoutes.js +148 -0
  92. package/dist/src/utils/railsRoutes.js.map +1 -0
  93. package/dist/src/utils/railsSchema.d.ts +1 -0
  94. package/dist/src/utils/railsSchema.js +23 -0
  95. package/dist/src/utils/railsSchema.js.map +1 -1
  96. package/dist/src/utils/rateLimiter.d.ts +1 -1
  97. package/dist/src/utils/rateLimiter.js +1 -1
  98. package/dist/src/utils/streaming.d.ts +1 -1
  99. package/dist/src/utils/streaming.js +1 -1
  100. package/dist/src/utils/telemetry.d.ts +1 -1
  101. package/dist/src/utils/telemetry.js +1 -1
  102. package/llms.txt +8 -8
  103. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.9.0] - 2026-07-17
4
+
5
+ ### Added
6
+
7
+ - **`get_gemfile_context`** (R7) — parses `Gemfile` and returns known gems with their implicit Rails behavior. Uses `gemDescriptions.json` lookup table (updateable without recompile). Includes mtime-keyed cache for zero re-read cost.
8
+ - **`find_metaprogramming`** (R3) — scans Ruby files for dynamic method generation entry points: `define_method`, `method_missing`, `class_eval/module_eval`, `instance_eval`, `send/public_send`, `ActiveSupport::Concern`, `included do`, `attr_accessor/reader/writer`, `delegate :to =>`, `has_many :through`. Accepts single file or full directory scan.
9
+ - **`get_rails_routes`** (R2) — parses `config/routes.rb` and returns a structured route map (method, path, controller, action). Supports `resources`, `resource`, explicit HTTP verbs (`get/post/patch/put/delete`), `namespace/scope` prefixing, `root`, and `do`-block nesting warnings. mtime-keyed cache.
10
+ - **Concern Resolution in `analyze_impact`** (R5) — `rubyModuleResolvesToFile()` now checks `app/models/concerns` and `app/controllers/concerns` via `findRailsConcerns()` before falling back to file system candidates. Prevents false positives for stdlib mixins.
11
+ - **`findRailsConcerns()`** utility — scans both concern directories and returns a `Map<moduleName, filePaths[]>` for use by impact analysis and future tools.
12
+
13
+ ### Changed
14
+
15
+ - `gemDescriptions.json` — new data file for gem behavior descriptions (bundled in `src/utils/`)
16
+
17
+ ---
18
+
19
+ ## [3.8.1] - 2026-07-16
20
+
21
+ ### Added
22
+
23
+ - **`insertCode` fix for brace-less languages (Ruby, Python)** — `inside_start`/`inside_end` positions now use AST-aware methods instead of `indexOf("{")` / `lastIndexOf("}")`. Added `getInsideStartIndex()` and `getInsideEndIndex()` to `BaseParser` with language-specific overrides in `RubyParser` and `PythonParser`.
24
+ - **Ruby import analysis** — `extractImports` in `compress.ts` now detects `require` and `require_relative` patterns. `analyzeImpact` adds Ruby patterns with file-resolution guard (prevents false positives from stdlib mixins like `include Comparable`).
25
+ - **ActiveRecord schema injection in `get_semantic_repo_map`** — repo map now includes `db_column` symbols for AR models, showing database columns alongside methods in the XML/Markdown output.
26
+
27
+ ### Fixed
28
+
29
+ - **`insert_symbol inside_start/inside_end` for Ruby** — previously returned wrong position (`-1`) for any Ruby class or method. Now inserts correctly after the opening header line (`inside_start`) and before the closing `end` keyword (`inside_end`).
30
+ - **`insert_symbol inside_start/inside_end` for Python** — previously searched for `{`/`}` that don't exist. Now uses colon+newline and indentation-aware end position.
31
+
32
+ ---
33
+
3
34
  ## [3.8.0] - 2026-07-15
4
35
 
5
36
  ### Added
package/INSTRUCTIONS.md CHANGED
@@ -253,7 +253,7 @@ newContent: "{ return 42; }"
253
253
 
254
254
  ---
255
255
 
256
- ## 🚀 v3.8.0 Features
256
+ ## 🚀 v3.9.0 Features
257
257
 
258
258
  ### New Tools
259
259
  - **`get_session_stats`**: Session-scoped stats (pending ops, locks held, rate limiter tokens)
@@ -288,6 +288,6 @@ See `llms.txt` for complete API reference and technical details.
288
288
 
289
289
  ---
290
290
 
291
- **Version**: 3.8.0
291
+ **Version**: 3.9.0
292
292
  **Last Updated**: June 8, 2026
293
293
  **Status**: Production-ready with session-scoped state and crash recovery
package/README.md CHANGED
@@ -75,7 +75,7 @@ Built to be robust and precise. Both read and write engines are tested against r
75
75
 
76
76
  ### Production-Ready Features
77
77
 
78
- | Feature | v3.6.x | v3.8.0 | Benefit |
78
+ | Feature | v3.6.x | v3.9.0 | Benefit |
79
79
  |---------|--------|--------|---------|
80
80
  | Multi-process safety | ✅ | ✅ | No file corruption |
81
81
  | Persistent cache | ✅ | ✅ | <100ms cache hits |
@@ -88,7 +88,15 @@ Built to be robust and precise. Both read and write engines are tested against r
88
88
 
89
89
  ## Features
90
90
 
91
- ### What's New in v3.8.0
91
+ ### What's New in v3.9.0
92
+
93
+ | Feature | Description |
94
+ |---------|-------------|
95
+ | 🔧 **`insert_symbol` fix Ruby/Python** | `inside_start`/`inside_end` now uses AST positions — no more broken insertion for `end`-based or indentation-based languages |
96
+ | 🗄️ **Schema in `get_semantic_repo_map`** | Repo map now shows `db_column` symbols for all ActiveRecord models alongside their methods |
97
+ | 🔗 **Ruby import analysis** | `analyze_impact` and dependency index now track `require`/`require_relative` in Ruby files with false-positive guard for stdlib mixins |
98
+
99
+ ### Previous: v3.8.0
92
100
 
93
101
  | Feature | Description |
94
102
  |---------|-------------|
@@ -164,7 +172,7 @@ Built to be robust and precise. Both read and write engines are tested against r
164
172
 
165
173
  ### `get_semantic_repo_map` Tool
166
174
 
167
- - **Max files**: Limited to 2000 files to prevent timeouts (increased from 500 in v3.8.0)
175
+ - **Max files**: Limited to 2000 files to prevent timeouts (increased from 500 in v3.9.0)
168
176
  - **Performance**: Synchronous I/O may take 10-30 seconds on large repositories
169
177
  - **Recommendation**: Use `@folder` syntax to target specific directories
170
178
 
@@ -191,13 +199,13 @@ npx -y mcp-code-context
191
199
 
192
200
  ---
193
201
 
194
- ## Session State (v3.8.0+)
202
+ ## Session State (v3.9.0+)
195
203
 
196
- **Important**: v3.8.0 introduces **session-scoped state** for each MCP client connection. This prevents state leakage when multiple agents (Amazon Q, Kiro, Cursor, etc.) use the same server instance.
204
+ **Important**: v3.9.0 introduces **session-scoped state** for each MCP client connection. This prevents state leakage when multiple agents (Amazon Q, Kiro, Cursor, etc.) use the same server instance.
197
205
 
198
206
  ### What Changed
199
207
 
200
- | Before (v3.6.x) | After (v3.8.0) |
208
+ | Before (v3.6.x) | After (v3.9.0) |
201
209
  |----------------|----------------|
202
210
  | Global `LockManager` (shared by all clients) | Session-scoped `sessionStates` Map |
203
211
  | Global `ConfirmationStore` (in-memory Map) | Session-scoped confirmation store + SQLite persistence |
@@ -225,7 +233,7 @@ npx -y mcp-code-context
225
233
  }
226
234
  ```
227
235
 
228
- ### New Tools (v3.8.0)
236
+ ### New Tools (v3.9.0)
229
237
 
230
238
  - `get_session_stats` — Get stats for current session only
231
239
  - `clear_session_cache` — Clear cache for current session only
@@ -529,7 +537,7 @@ npm run dev
529
537
  - **Portability:** 100% WASM - no native dependencies, works on all platforms
530
538
  - **Tests:** 83 passing (unit + integration + performance + stress)
531
539
 
532
- ### v3.8.0 Key Changes
540
+ ### v3.9.0 Key Changes
533
541
 
534
542
  | Component | Change | Benefit |
535
543
  |-----------|--------|---------|
package/SECURITY.md CHANGED
@@ -1,4 +1,4 @@
1
- # Security Policy - mcp-code-context v3.8.0
1
+ # Security Policy - mcp-code-context v3.8.1
2
2
 
3
3
  ## 🔒 Security Improvements in v3.7.1+
4
4
 
@@ -208,4 +208,4 @@ node dist-tests/tests/test-security.js
208
208
  ---
209
209
 
210
210
  **Last Updated**: 2026-06-08
211
- **Version**: 3.8.0
211
+ **Version**: 3.8.1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core Engine - v3.8.0
2
+ * Core Engine - v3.9.0
3
3
  * ASYNC I/O: Migrated to fs.promises
4
4
  */
5
5
  import { Parser, Language } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Core Engine - v3.8.0
2
+ * Core Engine - v3.9.0
3
3
  * ASYNC I/O: Migrated to fs.promises
4
4
  */
5
5
  import { Parser, Language } from "web-tree-sitter";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Index Manager - v3.8.0
2
+ * Index Manager - v3.9.0
3
3
  * Persistent symbol index and dependency graph in ~/.mcp-code-context/index/
4
4
  * Enables O(1) search_symbols and analyze_impact queries.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Index Manager - v3.8.0
2
+ * Index Manager - v3.9.0
3
3
  * Persistent symbol index and dependency graph in ~/.mcp-code-context/index/
4
4
  * Enables O(1) search_symbols and analyze_impact queries.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Session Manager - v3.8.0
2
+ * Session Manager - v3.9.0
3
3
  * Manages per-MCP-client state isolation
4
4
  * Prevents state leakage between concurrent clients
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Session Manager - v3.8.0
2
+ * Session Manager - v3.9.0
3
3
  * Manages per-MCP-client state isolation
4
4
  * Prevents state leakage between concurrent clients
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Security Validator - v3.8.0
2
+ * Security Validator - v3.9.0
3
3
  * CRITICAL FIX: Path traversal check AFTER normalization
4
4
  */
5
5
  export interface ValidationResult {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Security Validator - v3.8.0
2
+ * Security Validator - v3.9.0
3
3
  * CRITICAL FIX: Path traversal check AFTER normalization
4
4
  */
5
5
  import * as path from "node:path";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * mcp-code-context v3.8.0 - Tree-sitter WASM Edition (thin bootstrap)
3
+ * mcp-code-context v3.9.0 - Tree-sitter WASM Edition (thin bootstrap)
4
4
  */
5
5
  export {};
package/dist/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * mcp-code-context v3.8.0 - Tree-sitter WASM Edition (thin bootstrap)
3
+ * mcp-code-context v3.9.0 - Tree-sitter WASM Edition (thin bootstrap)
4
4
  */
5
5
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
@@ -13,7 +13,7 @@ import { TOOLS } from "./tools/toolDefinitions.js";
13
13
  import { setServerInstances } from "./tools/context.js";
14
14
  import { registerPipeline } from "./tools/pipeline.js";
15
15
  const SERVER_NAME = "mcp-code-context";
16
- const SERVER_VERSION = "3.8.0";
16
+ const SERVER_VERSION = "3.9.0";
17
17
  const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
18
18
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
19
19
  registerPipeline(server);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AST Transform - v3.8.0
2
+ * AST Transform - v3.9.0
3
3
  * Declarative AST transformations using Tree-sitter.
4
4
  * Operates on symbol positions from the AST — no fragile text matching.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * AST Transform - v3.8.0
2
+ * AST Transform - v3.9.0
3
3
  * Declarative AST transformations using Tree-sitter.
4
4
  * Operates on symbol positions from the AST — no fragile text matching.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Semantic Compression - v3.8.0
2
+ * Semantic Compression - v3.9.0
3
3
  * IMPROVEMENTS: Centralized constants + size limits + timeout + index feeding
4
4
  */
5
5
  import { ParserRegistry } from "../parsers/registry.js";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Semantic Compression - v3.8.0
2
+ * Semantic Compression - v3.9.0
3
3
  * IMPROVEMENTS: Centralized constants + size limits + timeout + index feeding
4
4
  */
5
5
  import * as fs from "node:fs/promises";
@@ -8,6 +8,8 @@ import * as crypto from "node:crypto";
8
8
  import { EXCLUDE_DIRS, MAX_FILES_REPO_MAP, MAX_TOTAL_SIZE_BYTES } from "../utils/constants.js";
9
9
  import { walkDir } from "../utils/fileWalker.js";
10
10
  import { IndexManager } from "../core/indexManager.js";
11
+ import { loadRailsSchema, modelToTable, findRailsConcerns } from "../utils/railsSchema.js";
12
+ import { parseGemfile } from "../utils/gemfileParser.js";
11
13
  /**
12
14
  * Generate semantic repository map
13
15
  */
@@ -50,9 +52,30 @@ async function compressRepository(params) {
50
52
  return syms;
51
53
  })();
52
54
  totalSymbols += symbols.length;
55
+ // R1: Rails AR schema injection for .rb files in repo map
56
+ let fileSymbols = symbols.map(s => ({ type: s.type, name: s.name }));
57
+ if (path.extname(fullPath) === ".rb") {
58
+ const schema = await loadRailsSchema(params.projectRoot).catch(() => null);
59
+ if (schema) {
60
+ for (const sym of symbols) {
61
+ if (sym.type === "class") {
62
+ const tableName = modelToTable(sym.name);
63
+ const columns = schema[tableName];
64
+ if (columns && Object.keys(columns).length > 0) {
65
+ const dbCols = Object.entries(columns).map(([col, type]) => ({
66
+ type: "db_column",
67
+ name: `${col}:${type}`,
68
+ }));
69
+ fileSymbols = [...fileSymbols, ...dbCols];
70
+ totalSymbols += dbCols.length;
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
53
76
  files.push({
54
77
  path: path.relative(params.directoryPath, fullPath),
55
- symbols: symbols.map(s => ({ type: s.type, name: s.name })),
78
+ symbols: fileSymbols,
56
79
  });
57
80
  }
58
81
  catch {
@@ -71,6 +94,32 @@ async function compressRepository(params) {
71
94
  });
72
95
  // Auto-optimize: disable symbols if >100 files or >1000 symbols
73
96
  const includeSymbols = params.includeSymbols !== false && files.length <= 100 && totalSymbols <= 1000;
97
+ // Project-wide metadata: Gemfile + Concerns
98
+ let projectMetadata = "";
99
+ if (format === "xml") {
100
+ try {
101
+ const gemfileResult = await parseGemfile(params.projectRoot);
102
+ if (gemfileResult && gemfileResult.knownGems.length > 0) {
103
+ projectMetadata += '\n <!-- Gemfile: installed gems with implicit behavior -->\n';
104
+ for (const gem of gemfileResult.knownGems) {
105
+ projectMetadata += ` <gem name="${gem.name}"${gem.version ? ` version="${gem.version}"` : ""}>\n ${gem.implicitBehavior}\n </gem>\n`;
106
+ }
107
+ }
108
+ const concernMap = await findRailsConcerns(params.projectRoot);
109
+ if (concernMap.size > 0) {
110
+ projectMetadata += '\n <!-- Rails Concerns -->\n';
111
+ for (const [concernName, filePaths] of concernMap.entries()) {
112
+ for (const filePath of filePaths) {
113
+ const relPath = path.relative(params.directoryPath, filePath);
114
+ projectMetadata += ` <concern name="${concernName}" file="${relPath}" />\n`;
115
+ }
116
+ }
117
+ }
118
+ }
119
+ catch {
120
+ // Silent fail — metadata is optional
121
+ }
122
+ }
74
123
  if (format === "xml") {
75
124
  let xml = '<?xml version="1.0" encoding="UTF-8"?>\n<repository>\n';
76
125
  for (const file of files) {
@@ -86,6 +135,7 @@ async function compressRepository(params) {
86
135
  xml += ' />\n';
87
136
  }
88
137
  }
138
+ xml += projectMetadata;
89
139
  xml += '</repository>';
90
140
  if (!includeSymbols) {
91
141
  xml += `\n\n<!-- Symbols omitted: ${files.length} files, ${totalSymbols} symbols (auto-optimized for token efficiency) -->`;
@@ -103,6 +153,29 @@ async function compressRepository(params) {
103
153
  }
104
154
  md += `\n`;
105
155
  }
156
+ // Markdown version of metadata
157
+ try {
158
+ const gemfileResult = await parseGemfile(params.projectRoot);
159
+ if (gemfileResult && gemfileResult.knownGems.length > 0) {
160
+ md += `\n## Gems with Implicit Behavior\n`;
161
+ for (const gem of gemfileResult.knownGems) {
162
+ md += `- **${gem.name}**${gem.version ? ` (${gem.version})` : ''}: ${gem.implicitBehavior}\n`;
163
+ }
164
+ }
165
+ const concernMap = await findRailsConcerns(params.projectRoot);
166
+ if (concernMap.size > 0) {
167
+ md += `\n## Rails Concerns\n`;
168
+ for (const [concernName, filePaths] of concernMap.entries()) {
169
+ for (const filePath of filePaths) {
170
+ const relPath = path.relative(params.directoryPath, filePath);
171
+ md += `- **${concernName}**: \`${relPath}\`\n`;
172
+ }
173
+ }
174
+ }
175
+ }
176
+ catch {
177
+ // Silent fail
178
+ }
106
179
  if (!includeSymbols) {
107
180
  md += `\n---\n*Symbols omitted: ${files.length} files, ${totalSymbols} symbols (auto-optimized for token efficiency)*\n`;
108
181
  }
@@ -123,31 +196,39 @@ async function compressRepository(params) {
123
196
  function extractImports(content, filePath, rootDir) {
124
197
  const deps = [];
125
198
  const dir = path.dirname(filePath);
126
- // Match: import ... from './path' | import './path' | require('./path')
127
- const patterns = [
199
+ // JS/TS: import ... from './path' | import './path' | require('./path')
200
+ const jsPatterns = [
128
201
  /from\s+['"](\.[^'"]+)['"]/g,
129
202
  /import\s+['"](\.[^'"]+)['"]/g,
130
203
  /require\s*\(\s*['"](\.[^'"]+)['"]\s*\)/g,
131
204
  ];
132
- for (const pattern of patterns) {
205
+ for (const pattern of jsPatterns) {
133
206
  let match;
134
207
  while ((match = pattern.exec(content)) !== null) {
135
208
  const importPath = match[1];
136
209
  if (!importPath)
137
210
  continue;
138
- // Resolve to absolute path
139
- const resolved = path.resolve(dir, importPath);
140
- // Try common extensions if no extension given
141
- const ext = path.extname(resolved);
142
- if (ext) {
143
- deps.push(resolved);
144
- }
145
- else {
146
- // Add the bare path — IndexManager stores what it gets
147
- deps.push(resolved);
148
- }
211
+ deps.push(path.resolve(dir, importPath));
149
212
  }
150
213
  }
214
+ // Ruby: require 'path' | require_relative '../path'
215
+ const rubyRequire = /require\s+['"]([^'"]+)['"]/g;
216
+ const rubyRequireRel = /require_relative\s+['"]([^'"]+)['"]/g;
217
+ let match;
218
+ // require 'path' — treat as relative to projectRoot (lib/ or gems — best effort)
219
+ while ((match = rubyRequire.exec(content)) !== null) {
220
+ const importPath = match[1];
221
+ if (!importPath || importPath.includes("/") === false)
222
+ continue; // skip bare gem names like 'devise'
223
+ deps.push(path.resolve(dir, importPath));
224
+ }
225
+ // require_relative '../path' — always relative to the file doing the require
226
+ while ((match = rubyRequireRel.exec(content)) !== null) {
227
+ const importPath = match[1];
228
+ if (!importPath)
229
+ continue;
230
+ deps.push(path.resolve(dir, importPath));
231
+ }
151
232
  return [...new Set(deps)]; // deduplicate
152
233
  }
153
234
  export { compressRepository };
@@ -1 +1 @@
1
- {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../src/operations/compress.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Confirmation Store - v3.8.0
2
+ * Confirmation Store - v3.9.0
3
3
  * Two-phase write: dry-run preview → confirm with token
4
4
  * Stores pending write operations with auto-expiry
5
5
  * NOW with SQLite persistence for crash recovery
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Confirmation Store - v3.8.0
2
+ * Confirmation Store - v3.9.0
3
3
  * Two-phase write: dry-run preview → confirm with token
4
4
  * Stores pending write operations with auto-expiry
5
5
  * NOW with SQLite persistence for crash recovery
@@ -8,6 +8,43 @@ import { walkDir } from "../utils/fileWalker.js";
8
8
  import { IndexManager } from "../core/indexManager.js";
9
9
  import { safeRegexAnyTest } from "../utils/safeRegex.js";
10
10
  import { sanitizeRegexPattern } from "../utils/regexValidator.js";
11
+ /**
12
+ * Check if a module name resolves to an actual file via Rails convention.
13
+ * Prevents false positives for stdlib mixins like `include Comparable`.
14
+ * Only adds include/extend to impact patterns when a matching file exists.
15
+ */
16
+ async function rubyModuleResolvesToFile(moduleName, rootDir) {
17
+ // First check if it's a known concern
18
+ try {
19
+ const { findRailsConcerns } = await import("../utils/railsSchema.js");
20
+ const concernMap = await findRailsConcerns(rootDir);
21
+ if (concernMap.has(moduleName)) {
22
+ return true;
23
+ }
24
+ }
25
+ catch {
26
+ // fall through to file search
27
+ }
28
+ // Convert ModuleName → module_name (snake_case)
29
+ const snakeName = moduleName
30
+ .replace(/([A-Z])/g, (c, _, i) => i === 0 ? c.toLowerCase() : `_${c.toLowerCase()}`);
31
+ const candidates = [
32
+ path.join(rootDir, "app", "models", "concerns", `${snakeName}.rb`),
33
+ path.join(rootDir, "app", "controllers", "concerns", `${snakeName}.rb`),
34
+ path.join(rootDir, "lib", `${snakeName}.rb`),
35
+ path.join(rootDir, "app", "models", `${snakeName}.rb`),
36
+ ];
37
+ for (const candidate of candidates) {
38
+ try {
39
+ await fs.access(candidate);
40
+ return true;
41
+ }
42
+ catch {
43
+ // not found — try next
44
+ }
45
+ }
46
+ return false;
47
+ }
11
48
  export async function analyzeImpact(params) {
12
49
  try {
13
50
  // ── Fast path: use persistent index if available ──────────────────────
@@ -22,13 +59,33 @@ export async function analyzeImpact(params) {
22
59
  // ── Slow path: regex scan (no index yet) ─────────────────────────────
23
60
  const dependents = [];
24
61
  const fileName = path.basename(params.filePath);
62
+ const fileExt = path.extname(params.filePath);
25
63
  const baseName = sanitizeRegexPattern(fileName.replace(/\.[^.]+$/, ""));
26
64
  const fullName = sanitizeRegexPattern(fileName);
65
+ // Base patterns (JS/TS/Python)
27
66
  const importPatterns = [
28
67
  `import.*from.*['"].*${baseName}`,
29
68
  `require\\(['"].*${fullName}`,
30
69
  `from.*${baseName}.*import`,
31
70
  ];
71
+ // Ruby-specific patterns — only for .rb files
72
+ if (fileExt === ".rb") {
73
+ // require 'path' and require_relative '../path'
74
+ importPatterns.push(`require\\s+['"].*${baseName}`);
75
+ importPatterns.push(`require_relative\\s+['"].*${baseName}`);
76
+ // include/extend ModuleName — only if the module name resolves to an actual file
77
+ // (prevents false positives for stdlib: `include Comparable` matching comparable.rb)
78
+ const moduleNameFromFile = baseName
79
+ .split("_")
80
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
81
+ .join("");
82
+ const moduleResolvable = await rubyModuleResolvesToFile(moduleNameFromFile, params.rootDir);
83
+ if (moduleResolvable) {
84
+ importPatterns.push(`include\\s+${sanitizeRegexPattern(moduleNameFromFile)}`);
85
+ importPatterns.push(`extend\\s+${sanitizeRegexPattern(moduleNameFromFile)}`);
86
+ importPatterns.push(`prepend\\s+${sanitizeRegexPattern(moduleNameFromFile)}`);
87
+ }
88
+ }
32
89
  await walkDir(params.rootDir, {
33
90
  extensions: SUPPORTED_EXTENSIONS,
34
91
  excludeDirs: EXCLUDE_DIRS,
@@ -1 +1 @@
1
- {"version":3,"file":"impactAnalysis.js","sourceRoot":"","sources":["../../../src/operations/impactAnalysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impactAnalysis.js","sourceRoot":"","sources":["../../../src/operations/impactAnalysis.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Write Operations - v3.8.0
2
+ * Write Operations - v3.9.0
3
3
  * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
4
4
  * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Write Operations - v3.8.0
2
+ * Write Operations - v3.9.0
3
3
  * FIXES: SecurityValidator in renameSymbol, atomic writes, AST-based positioning
4
4
  * CRITICAL: renameSymbol Phase 1 is now pure-functional (no disk writes)
5
5
  */
@@ -104,10 +104,10 @@ export async function insertCode(options) {
104
104
  insertIndex = anchorNode.endIndex;
105
105
  break;
106
106
  case "inside_start":
107
- insertIndex = content.indexOf("{", anchorNode.startIndex) + 1;
107
+ insertIndex = parser.getInsideStartIndex(content, anchorNode);
108
108
  break;
109
109
  case "inside_end":
110
- insertIndex = content.lastIndexOf("}", anchorNode.endIndex);
110
+ insertIndex = parser.getInsideEndIndex(content, anchorNode);
111
111
  break;
112
112
  default:
113
113
  insertIndex = anchorNode.endIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/operations/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/operations/write.ts"],"names":[],"mappings":"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"}