mcp-code-context 3.9.2 → 7.0.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 (198) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/INSTRUCTIONS.md +15 -4
  3. package/README.md +109 -5
  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 +1 -1
  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 +1 -1
  11. package/dist/src/core/validator.js +1 -1
  12. package/dist/src/index.d.ts +4 -2
  13. package/dist/src/index.js +119 -14
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/operations/apiRoutes.d.ts +31 -0
  16. package/dist/src/operations/apiRoutes.js +170 -0
  17. package/dist/src/operations/apiRoutes.js.map +1 -0
  18. package/dist/src/operations/architectureLinter.d.ts +45 -0
  19. package/dist/src/operations/architectureLinter.js +223 -0
  20. package/dist/src/operations/architectureLinter.js.map +1 -0
  21. package/dist/src/operations/astComplexity.d.ts +38 -0
  22. package/dist/src/operations/astComplexity.js +243 -0
  23. package/dist/src/operations/astComplexity.js.map +1 -0
  24. package/dist/src/operations/astMockGenerator.d.ts +34 -0
  25. package/dist/src/operations/astMockGenerator.js +203 -0
  26. package/dist/src/operations/astMockGenerator.js.map +1 -0
  27. package/dist/src/operations/astQuery.d.ts +47 -0
  28. package/dist/src/operations/astQuery.js +169 -0
  29. package/dist/src/operations/astQuery.js.map +1 -0
  30. package/dist/src/operations/astTransform.d.ts +1 -1
  31. package/dist/src/operations/astTransform.js +11 -2
  32. package/dist/src/operations/astTransform.js.map +1 -1
  33. package/dist/src/operations/asyncBlockers.d.ts +33 -0
  34. package/dist/src/operations/asyncBlockers.js +162 -0
  35. package/dist/src/operations/asyncBlockers.js.map +1 -0
  36. package/dist/src/operations/blastRadiusReport.d.ts +43 -0
  37. package/dist/src/operations/blastRadiusReport.js +236 -0
  38. package/dist/src/operations/blastRadiusReport.js.map +1 -0
  39. package/dist/src/operations/callHierarchy.d.ts +28 -0
  40. package/dist/src/operations/callHierarchy.js +166 -0
  41. package/dist/src/operations/callHierarchy.js.map +1 -0
  42. package/dist/src/operations/circularDependencies.d.ts +28 -0
  43. package/dist/src/operations/circularDependencies.js +201 -0
  44. package/dist/src/operations/circularDependencies.js.map +1 -0
  45. package/dist/src/operations/classHierarchyFlattener.d.ts +35 -0
  46. package/dist/src/operations/classHierarchyFlattener.js +185 -0
  47. package/dist/src/operations/classHierarchyFlattener.js.map +1 -0
  48. package/dist/src/operations/compress.d.ts +2 -2
  49. package/dist/src/operations/compress.js +154 -20
  50. package/dist/src/operations/compress.js.map +1 -1
  51. package/dist/src/operations/conceptSearch.d.ts +19 -0
  52. package/dist/src/operations/conceptSearch.js +176 -0
  53. package/dist/src/operations/conceptSearch.js.map +1 -0
  54. package/dist/src/operations/confirmationStore.d.ts +1 -1
  55. package/dist/src/operations/confirmationStore.js +1 -1
  56. package/dist/src/operations/conflictPredictor.d.ts +21 -0
  57. package/dist/src/operations/conflictPredictor.js +139 -0
  58. package/dist/src/operations/conflictPredictor.js.map +1 -0
  59. package/dist/src/operations/contextCompactor.d.ts +38 -0
  60. package/dist/src/operations/contextCompactor.js +348 -0
  61. package/dist/src/operations/contextCompactor.js.map +1 -0
  62. package/dist/src/operations/cstCodemod.d.ts +34 -0
  63. package/dist/src/operations/cstCodemod.js +205 -0
  64. package/dist/src/operations/cstCodemod.js.map +1 -0
  65. package/dist/src/operations/deadSymbols.d.ts +32 -0
  66. package/dist/src/operations/deadSymbols.js +178 -0
  67. package/dist/src/operations/deadSymbols.js.map +1 -0
  68. package/dist/src/operations/envContract.d.ts +35 -0
  69. package/dist/src/operations/envContract.js +194 -0
  70. package/dist/src/operations/envContract.js.map +1 -0
  71. package/dist/src/operations/errorAudit.d.ts +36 -0
  72. package/dist/src/operations/errorAudit.js +201 -0
  73. package/dist/src/operations/errorAudit.js.map +1 -0
  74. package/dist/src/operations/importIntegrity.d.ts +48 -0
  75. package/dist/src/operations/importIntegrity.js +395 -0
  76. package/dist/src/operations/importIntegrity.js.map +1 -0
  77. package/dist/src/operations/incrementalDiff.d.ts +47 -0
  78. package/dist/src/operations/incrementalDiff.js +216 -0
  79. package/dist/src/operations/incrementalDiff.js.map +1 -0
  80. package/dist/src/operations/lexicalScope.d.ts +51 -0
  81. package/dist/src/operations/lexicalScope.js +212 -0
  82. package/dist/src/operations/lexicalScope.js.map +1 -0
  83. package/dist/src/operations/read.d.ts +21 -0
  84. package/dist/src/operations/read.js +21 -0
  85. package/dist/src/operations/read.js.map +1 -1
  86. package/dist/src/operations/readCore.js +37 -17
  87. package/dist/src/operations/readCore.js.map +1 -1
  88. package/dist/src/operations/rename.js +35 -24
  89. package/dist/src/operations/rename.js.map +1 -1
  90. package/dist/src/operations/sqlValidator.d.ts +36 -0
  91. package/dist/src/operations/sqlValidator.js +202 -0
  92. package/dist/src/operations/sqlValidator.js.map +1 -0
  93. package/dist/src/operations/symbolQuery.js +112 -23
  94. package/dist/src/operations/symbolQuery.js.map +1 -1
  95. package/dist/src/operations/taintAnalysis.d.ts +46 -0
  96. package/dist/src/operations/taintAnalysis.js +220 -0
  97. package/dist/src/operations/taintAnalysis.js.map +1 -0
  98. package/dist/src/operations/testImpact.d.ts +31 -0
  99. package/dist/src/operations/testImpact.js +179 -0
  100. package/dist/src/operations/testImpact.js.map +1 -0
  101. package/dist/src/operations/typeInference.d.ts +54 -0
  102. package/dist/src/operations/typeInference.js +565 -0
  103. package/dist/src/operations/typeInference.js.map +1 -0
  104. package/dist/src/operations/wireContract.d.ts +34 -0
  105. package/dist/src/operations/wireContract.js +185 -0
  106. package/dist/src/operations/wireContract.js.map +1 -0
  107. package/dist/src/operations/write.d.ts +2 -2
  108. package/dist/src/operations/write.js +151 -82
  109. package/dist/src/operations/write.js.map +1 -1
  110. package/dist/src/parsers/base.d.ts +9 -1
  111. package/dist/src/parsers/base.js +61 -1
  112. package/dist/src/parsers/base.js.map +1 -1
  113. package/dist/src/parsers/csharp.d.ts +1 -1
  114. package/dist/src/parsers/csharp.js +1 -1
  115. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  116. package/dist/src/parsers/dartTreeSitter.js +1 -1
  117. package/dist/src/parsers/go.d.ts +1 -1
  118. package/dist/src/parsers/go.js +1 -1
  119. package/dist/src/parsers/java.d.ts +1 -1
  120. package/dist/src/parsers/java.js +1 -1
  121. package/dist/src/parsers/kotlin.d.ts +1 -1
  122. package/dist/src/parsers/kotlin.js +1 -1
  123. package/dist/src/parsers/php.d.ts +1 -1
  124. package/dist/src/parsers/php.js +1 -1
  125. package/dist/src/parsers/python.d.ts +1 -1
  126. package/dist/src/parsers/python.js +1 -1
  127. package/dist/src/parsers/registry.d.ts +1 -1
  128. package/dist/src/parsers/registry.js +1 -1
  129. package/dist/src/parsers/ruby.d.ts +1 -1
  130. package/dist/src/parsers/ruby.js +1 -1
  131. package/dist/src/parsers/rust.d.ts +1 -1
  132. package/dist/src/parsers/rust.js +1 -1
  133. package/dist/src/parsers/typescript.d.ts +1 -1
  134. package/dist/src/parsers/typescript.js +1 -1
  135. package/dist/src/tools/context.d.ts +4 -0
  136. package/dist/src/tools/context.js +14 -0
  137. package/dist/src/tools/context.js.map +1 -1
  138. package/dist/src/tools/pipeline.js +26 -0
  139. package/dist/src/tools/pipeline.js.map +1 -1
  140. package/dist/src/tools/readHandlers.d.ts +150 -0
  141. package/dist/src/tools/readHandlers.js +622 -17
  142. package/dist/src/tools/readHandlers.js.map +1 -1
  143. package/dist/src/tools/toolDefinitions.d.ts +2184 -0
  144. package/dist/src/tools/toolDefinitionsCore.d.ts +2184 -0
  145. package/dist/src/tools/toolDefinitionsCore.js +381 -1
  146. package/dist/src/tools/toolDefinitionsCore.js.map +1 -1
  147. package/dist/src/tools/writeHandlers.js +3 -1
  148. package/dist/src/tools/writeHandlers.js.map +1 -1
  149. package/dist/src/utils/appDir.d.ts +1 -1
  150. package/dist/src/utils/appDir.js +1 -1
  151. package/dist/src/utils/auditLogger.d.ts +1 -1
  152. package/dist/src/utils/auditLogger.js +1 -1
  153. package/dist/src/utils/backupManager.d.ts +1 -1
  154. package/dist/src/utils/backupManager.js +1 -1
  155. package/dist/src/utils/conceptEngine.d.ts +56 -0
  156. package/dist/src/utils/conceptEngine.js +234 -0
  157. package/dist/src/utils/conceptEngine.js.map +1 -0
  158. package/dist/src/utils/constants.d.ts +1 -1
  159. package/dist/src/utils/constants.js +2 -1
  160. package/dist/src/utils/constants.js.map +1 -1
  161. package/dist/src/utils/diff.d.ts +1 -1
  162. package/dist/src/utils/diff.js +1 -1
  163. package/dist/src/utils/fileLock.d.ts +1 -1
  164. package/dist/src/utils/fileLock.js +1 -1
  165. package/dist/src/utils/fileWalker.d.ts +1 -1
  166. package/dist/src/utils/fileWalker.js +1 -1
  167. package/dist/src/utils/fileWatcher.d.ts +1 -1
  168. package/dist/src/utils/fileWatcher.js +1 -1
  169. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  170. package/dist/src/utils/fuzzySearch.js +1 -1
  171. package/dist/src/utils/gemfileParser.d.ts +1 -1
  172. package/dist/src/utils/gemfileParser.js +1 -1
  173. package/dist/src/utils/logger.d.ts +1 -1
  174. package/dist/src/utils/logger.js +1 -1
  175. package/dist/src/utils/metaprogramming.d.ts +1 -1
  176. package/dist/src/utils/metaprogramming.js +1 -1
  177. package/dist/src/utils/railsRoutes.d.ts +1 -1
  178. package/dist/src/utils/railsRoutes.js +1 -1
  179. package/dist/src/utils/rateLimiter.d.ts +26 -1
  180. package/dist/src/utils/rateLimiter.js +26 -1
  181. package/dist/src/utils/rateLimiter.js.map +1 -1
  182. package/dist/src/utils/streaming.d.ts +1 -1
  183. package/dist/src/utils/streaming.js +1 -1
  184. package/dist/src/utils/telemetry.d.ts +1 -1
  185. package/dist/src/utils/telemetry.js +1 -1
  186. package/dist/src/utils/virtualSchema.d.ts +31 -0
  187. package/dist/src/utils/virtualSchema.js +367 -0
  188. package/dist/src/utils/virtualSchema.js.map +1 -0
  189. package/llms.txt +13 -3
  190. package/package.json +97 -95
  191. package/skills/code-context-logo.png +0 -0
  192. package/skills/code-context-pro/SKILL.md +149 -0
  193. package/skills/code-context-pro/references/benchmarks.md +25 -0
  194. package/skills/code-context-pro/references/decision-tree.md +32 -0
  195. package/skills/code-context-pro/references/multi-ide-setup.md +104 -0
  196. package/skills/code-context-pro.zip +0 -0
  197. package/HIRE_ME.md +0 -234
  198. package/SPONSORS.md +0 -104
@@ -0,0 +1,31 @@
1
+ import { modelToTable, type TableSchema, type ProjectDbSchema } from "./railsSchema.js";
2
+ export { type TableSchema, type ProjectDbSchema, modelToTable };
3
+ /**
4
+ * Extract virtual database schema from Laravel database/migrations
5
+ */
6
+ export declare function loadLaravelSchema(projectRoot: string): Promise<ProjectDbSchema | null>;
7
+ export declare function parseLaravelMigration(content: string, schema?: ProjectDbSchema): ProjectDbSchema;
8
+ /**
9
+ * Extract virtual database schema from Django models.py files
10
+ */
11
+ export declare function loadDjangoSchema(projectRoot: string): Promise<ProjectDbSchema | null>;
12
+ export declare function parseDjangoModels(content: string, schema?: ProjectDbSchema): ProjectDbSchema;
13
+ /**
14
+ * Extract virtual database schema from Prisma schema.prisma files
15
+ */
16
+ export declare function loadPrismaSchema(projectRoot: string): Promise<ProjectDbSchema | null>;
17
+ export declare function parsePrismaSchema(content: string, schema?: ProjectDbSchema): ProjectDbSchema;
18
+ /**
19
+ * Extract virtual database schema from Drizzle ORM schema files
20
+ */
21
+ export declare function loadDrizzleSchema(projectRoot: string): Promise<ProjectDbSchema | null>;
22
+ export declare function parseDrizzleSchema(content: string, schema?: ProjectDbSchema): ProjectDbSchema;
23
+ export type SupportedVirtualFramework = "ActiveRecord" | "Eloquent" | "Django" | "Prisma" | "Drizzle";
24
+ /**
25
+ * Unified virtual schema loader supporting Rails, Laravel, Django, Prisma & Drizzle
26
+ */
27
+ export declare function loadUnifiedVirtualSchema(projectRoot: string, fileExtension?: string): Promise<{
28
+ framework: SupportedVirtualFramework;
29
+ schema: ProjectDbSchema;
30
+ } | null>;
31
+ export declare function formatUnifiedSchemaAnnotation(framework: SupportedVirtualFramework, tableName: string, columns: TableSchema): string;
@@ -0,0 +1,367 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { loadRailsSchema, modelToTable } from "./railsSchema.js";
4
+ export { modelToTable };
5
+ // Cache for Laravel schemas
6
+ const laravelCache = new Map();
7
+ // Cache for Django schemas
8
+ const djangoCache = new Map();
9
+ // Cache for Prisma schemas
10
+ const prismaCache = new Map();
11
+ // Cache for Drizzle schemas
12
+ const drizzleCache = new Map();
13
+ /**
14
+ * Extract virtual database schema from Laravel database/migrations
15
+ */
16
+ export async function loadLaravelSchema(projectRoot) {
17
+ const migrationsDir = path.join(projectRoot, "database", "migrations");
18
+ let migrationFiles;
19
+ try {
20
+ const entries = await fs.readdir(migrationsDir, { withFileTypes: true });
21
+ migrationFiles = entries
22
+ .filter(e => e.isFile() && e.name.endsWith(".php"))
23
+ .map(e => path.join(migrationsDir, e.name));
24
+ }
25
+ catch {
26
+ return null; // Not a Laravel project with migrations
27
+ }
28
+ if (migrationFiles.length === 0)
29
+ return null;
30
+ // Compute aggregate mtime of migrations
31
+ let aggregateMtime = 0;
32
+ for (const file of migrationFiles) {
33
+ try {
34
+ const stat = await fs.stat(file);
35
+ aggregateMtime += stat.mtimeMs;
36
+ }
37
+ catch {
38
+ // ignore stat failures
39
+ }
40
+ }
41
+ const cached = laravelCache.get(projectRoot);
42
+ if (cached && cached.mtime === aggregateMtime)
43
+ return cached.schema;
44
+ const schema = {};
45
+ for (const file of migrationFiles) {
46
+ try {
47
+ const content = await fs.readFile(file, "utf-8");
48
+ parseLaravelMigration(content, schema);
49
+ }
50
+ catch {
51
+ // Skip unreadable files
52
+ }
53
+ }
54
+ laravelCache.set(projectRoot, { schema, mtime: aggregateMtime });
55
+ return Object.keys(schema).length > 0 ? schema : null;
56
+ }
57
+ export function parseLaravelMigration(content, schema = {}) {
58
+ // Matches Schema::create('table_name', function (Blueprint $table) { ... })
59
+ const createTableRe = /Schema::create\s*\(\s*['"]([^'"]+)['"]\s*,\s*function\s*\([^)]*\)\s*\{([\s\S]*?)\}\s*\);/g;
60
+ let match;
61
+ while ((match = createTableRe.exec(content)) !== null) {
62
+ const tableName = match[1];
63
+ const body = match[2];
64
+ const columns = schema[tableName] || {};
65
+ const colRe = /\$table->(\w+)\s*\(\s*(?:['"]([^'"]+)['"])?/g;
66
+ let colMatch;
67
+ while ((colMatch = colRe.exec(body)) !== null) {
68
+ const colType = colMatch[1];
69
+ const colName = colMatch[2];
70
+ if (colType === "id" || colType === "bigIncrements" || colType === "increments") {
71
+ columns[colName || "id"] = "bigint primary key";
72
+ }
73
+ else if (colType === "timestamps" || colType === "timestampsTz") {
74
+ columns["created_at"] = "timestamp";
75
+ columns["updated_at"] = "timestamp";
76
+ }
77
+ else if (colType === "softDeletes") {
78
+ columns["deleted_at"] = "timestamp nullable";
79
+ }
80
+ else if (colType === "rememberToken") {
81
+ columns["remember_token"] = "string(100)";
82
+ }
83
+ else if (colName) {
84
+ columns[colName] = colType;
85
+ }
86
+ }
87
+ schema[tableName] = columns;
88
+ }
89
+ return schema;
90
+ }
91
+ /**
92
+ * Extract virtual database schema from Django models.py files
93
+ */
94
+ export async function loadDjangoSchema(projectRoot) {
95
+ const schema = {};
96
+ const foundModels = await findDjangoModelFiles(projectRoot);
97
+ if (foundModels.length === 0)
98
+ return null;
99
+ let aggregateMtime = 0;
100
+ for (const file of foundModels) {
101
+ try {
102
+ const stat = await fs.stat(file);
103
+ aggregateMtime += stat.mtimeMs;
104
+ }
105
+ catch {
106
+ // ignore
107
+ }
108
+ }
109
+ const cached = djangoCache.get(projectRoot);
110
+ if (cached && cached.mtime === aggregateMtime)
111
+ return cached.schema;
112
+ for (const file of foundModels) {
113
+ try {
114
+ const content = await fs.readFile(file, "utf-8");
115
+ parseDjangoModels(content, schema);
116
+ }
117
+ catch {
118
+ // skip
119
+ }
120
+ }
121
+ djangoCache.set(projectRoot, { schema, mtime: aggregateMtime });
122
+ return Object.keys(schema).length > 0 ? schema : null;
123
+ }
124
+ async function findDjangoModelFiles(dir, depth = 0) {
125
+ if (depth > 4)
126
+ return [];
127
+ const results = [];
128
+ try {
129
+ const entries = await fs.readdir(dir, { withFileTypes: true });
130
+ for (const entry of entries) {
131
+ if (entry.isDirectory()) {
132
+ if (["node_modules", ".git", "venv", ".venv", "env", "__pycache__"].includes(entry.name)) {
133
+ continue;
134
+ }
135
+ const sub = await findDjangoModelFiles(path.join(dir, entry.name), depth + 1);
136
+ results.push(...sub);
137
+ }
138
+ else if (entry.isFile() && (entry.name === "models.py" || entry.name.endsWith("_models.py"))) {
139
+ results.push(path.join(dir, entry.name));
140
+ }
141
+ }
142
+ }
143
+ catch {
144
+ // Ignore read errors
145
+ }
146
+ return results;
147
+ }
148
+ export function parseDjangoModels(content, schema = {}) {
149
+ // Matches class ModelName(models.Model):
150
+ const classRe = /class\s+(\w+)\s*\([^)]*models\.Model[^)]*\):([\s\S]*?)(?=\nclass\s|\n[^\s#]|$)/g;
151
+ let match;
152
+ while ((match = classRe.exec(content)) !== null) {
153
+ const className = match[1];
154
+ const body = match[2];
155
+ const tableName = modelToTable(className);
156
+ const columns = schema[tableName] || { id: "AutoField(primary_key=True)" };
157
+ // Matches field_name = models.FieldType(...)
158
+ const fieldRe = /^\s{4,8}(\w+)\s*=\s*models\.(\w+Field|\w+)\(([^)]*)\)/gm;
159
+ let fieldMatch;
160
+ while ((fieldMatch = fieldRe.exec(body)) !== null) {
161
+ const fieldName = fieldMatch[1];
162
+ const fieldType = fieldMatch[2];
163
+ columns[fieldName] = fieldType;
164
+ }
165
+ schema[tableName] = columns;
166
+ }
167
+ return schema;
168
+ }
169
+ /**
170
+ * Extract virtual database schema from Prisma schema.prisma files
171
+ */
172
+ export async function loadPrismaSchema(projectRoot) {
173
+ const possiblePaths = [
174
+ path.join(projectRoot, "prisma", "schema.prisma"),
175
+ path.join(projectRoot, "schema.prisma"),
176
+ ];
177
+ let schemaPath = null;
178
+ for (const p of possiblePaths) {
179
+ try {
180
+ await fs.access(p);
181
+ schemaPath = p;
182
+ break;
183
+ }
184
+ catch {
185
+ // continue
186
+ }
187
+ }
188
+ if (!schemaPath)
189
+ return null;
190
+ try {
191
+ const stat = await fs.stat(schemaPath);
192
+ const cached = prismaCache.get(projectRoot);
193
+ if (cached && cached.mtime === stat.mtimeMs)
194
+ return cached.schema;
195
+ const content = await fs.readFile(schemaPath, "utf-8");
196
+ const schema = parsePrismaSchema(content);
197
+ prismaCache.set(projectRoot, { schema, mtime: stat.mtimeMs });
198
+ return Object.keys(schema).length > 0 ? schema : null;
199
+ }
200
+ catch {
201
+ return null;
202
+ }
203
+ }
204
+ export function parsePrismaSchema(content, schema = {}) {
205
+ const modelRe = /model\s+(\w+)\s*\{([\s\S]*?)\}/g;
206
+ let match;
207
+ while ((match = modelRe.exec(content)) !== null) {
208
+ const modelName = match[1];
209
+ const body = match[2];
210
+ const mapMatch = body.match(/@@map\s*\(\s*["']([^"']+)["']\s*\)/);
211
+ const tableName = mapMatch ? mapMatch[1] : modelToTable(modelName);
212
+ const columns = schema[tableName] || {};
213
+ const lines = body.split("\n");
214
+ for (const line of lines) {
215
+ const trimmed = line.trim();
216
+ if (!trimmed || trimmed.startsWith("//") || trimmed.startsWith("@@"))
217
+ continue;
218
+ const fieldMatch = trimmed.match(/^(\w+)\s+([A-Za-z0-9_?\[\]]+)(?:\s+(.*))?$/);
219
+ if (fieldMatch) {
220
+ const fieldName = fieldMatch[1];
221
+ const fieldType = fieldMatch[2];
222
+ const attributes = fieldMatch[3] ? ` ${fieldMatch[3].trim()}` : "";
223
+ columns[fieldName] = `${fieldType}${attributes}`;
224
+ }
225
+ }
226
+ schema[tableName] = columns;
227
+ if (tableName !== modelName.toLowerCase()) {
228
+ schema[modelName.toLowerCase()] = columns;
229
+ }
230
+ }
231
+ return schema;
232
+ }
233
+ /**
234
+ * Extract virtual database schema from Drizzle ORM schema files
235
+ */
236
+ export async function loadDrizzleSchema(projectRoot) {
237
+ const possiblePaths = [
238
+ path.join(projectRoot, "src", "db", "schema.ts"),
239
+ path.join(projectRoot, "src", "schema.ts"),
240
+ path.join(projectRoot, "db", "schema.ts"),
241
+ path.join(projectRoot, "schema.ts"),
242
+ ];
243
+ const foundFiles = [];
244
+ for (const p of possiblePaths) {
245
+ try {
246
+ await fs.access(p);
247
+ foundFiles.push(p);
248
+ }
249
+ catch {
250
+ // continue
251
+ }
252
+ }
253
+ const schemaDir = path.join(projectRoot, "src", "db", "schema");
254
+ try {
255
+ const entries = await fs.readdir(schemaDir, { withFileTypes: true });
256
+ for (const e of entries) {
257
+ if (e.isFile() && (e.name.endsWith(".ts") || e.name.endsWith(".js"))) {
258
+ foundFiles.push(path.join(schemaDir, e.name));
259
+ }
260
+ }
261
+ }
262
+ catch {
263
+ // ignore
264
+ }
265
+ if (foundFiles.length === 0)
266
+ return null;
267
+ let aggregateMtime = 0;
268
+ for (const file of foundFiles) {
269
+ try {
270
+ const stat = await fs.stat(file);
271
+ aggregateMtime += stat.mtimeMs;
272
+ }
273
+ catch {
274
+ // ignore
275
+ }
276
+ }
277
+ const cached = drizzleCache.get(projectRoot);
278
+ if (cached && cached.mtime === aggregateMtime)
279
+ return cached.schema;
280
+ const schema = {};
281
+ for (const file of foundFiles) {
282
+ try {
283
+ const content = await fs.readFile(file, "utf-8");
284
+ parseDrizzleSchema(content, schema);
285
+ }
286
+ catch {
287
+ // ignore
288
+ }
289
+ }
290
+ drizzleCache.set(projectRoot, { schema, mtime: aggregateMtime });
291
+ return Object.keys(schema).length > 0 ? schema : null;
292
+ }
293
+ export function parseDrizzleSchema(content, schema = {}) {
294
+ const tableDeclRe = /(?:export\s+const\s+(\w+)\s*=\s*)?(?:pgTable|mysqlTable|sqliteTable)\s*\(\s*["']([^"']+)["']\s*,\s*\{/g;
295
+ let match;
296
+ while ((match = tableDeclRe.exec(content)) !== null) {
297
+ const constName = match[1];
298
+ const tableName = match[2];
299
+ const startIndex = match.index + match[0].length;
300
+ let depth = 1;
301
+ let endIndex = startIndex;
302
+ while (endIndex < content.length && depth > 0) {
303
+ const char = content[endIndex];
304
+ if (char === "{")
305
+ depth++;
306
+ else if (char === "}")
307
+ depth--;
308
+ endIndex++;
309
+ }
310
+ const body = content.slice(startIndex, endIndex - 1);
311
+ const columns = schema[tableName] || {};
312
+ const colRe = /(\w+)\s*:\s*([a-zA-Z0-9_]+)\s*\(([\s\S]*?)\)((?:\.[a-zA-Z0-9_]+(?:\([^)]*\))?)*)/g;
313
+ let colMatch;
314
+ while ((colMatch = colRe.exec(body)) !== null) {
315
+ const colName = colMatch[1];
316
+ const colType = colMatch[2];
317
+ const modifiers = colMatch[4] ? colMatch[4].trim() : "";
318
+ columns[colName] = `${colType}${modifiers}`;
319
+ }
320
+ schema[tableName] = columns;
321
+ if (constName && constName !== tableName) {
322
+ schema[constName] = columns;
323
+ }
324
+ }
325
+ return schema;
326
+ }
327
+ /**
328
+ * Unified virtual schema loader supporting Rails, Laravel, Django, Prisma & Drizzle
329
+ */
330
+ export async function loadUnifiedVirtualSchema(projectRoot, fileExtension) {
331
+ if (!fileExtension || fileExtension === ".rb") {
332
+ const rails = await loadRailsSchema(projectRoot).catch(() => null);
333
+ if (rails && Object.keys(rails).length > 0) {
334
+ return { framework: "ActiveRecord", schema: rails };
335
+ }
336
+ }
337
+ if (!fileExtension || fileExtension === ".php") {
338
+ const laravel = await loadLaravelSchema(projectRoot).catch(() => null);
339
+ if (laravel && Object.keys(laravel).length > 0) {
340
+ return { framework: "Eloquent", schema: laravel };
341
+ }
342
+ }
343
+ if (!fileExtension || fileExtension === ".py") {
344
+ const django = await loadDjangoSchema(projectRoot).catch(() => null);
345
+ if (django && Object.keys(django).length > 0) {
346
+ return { framework: "Django", schema: django };
347
+ }
348
+ }
349
+ if (!fileExtension || fileExtension === ".ts" || fileExtension === ".tsx" || fileExtension === ".js" || fileExtension === ".prisma") {
350
+ const prisma = await loadPrismaSchema(projectRoot).catch(() => null);
351
+ if (prisma && Object.keys(prisma).length > 0) {
352
+ return { framework: "Prisma", schema: prisma };
353
+ }
354
+ const drizzle = await loadDrizzleSchema(projectRoot).catch(() => null);
355
+ if (drizzle && Object.keys(drizzle).length > 0) {
356
+ return { framework: "Drizzle", schema: drizzle };
357
+ }
358
+ }
359
+ return null;
360
+ }
361
+ export function formatUnifiedSchemaAnnotation(framework, tableName, columns) {
362
+ const cols = Object.entries(columns)
363
+ .map(([col, type]) => ` <column name="${col}" type="${type}" />`)
364
+ .join("\n");
365
+ return `<!-- ${framework} Virtual Schema: ${tableName}\n${cols}\n-->`;
366
+ }
367
+ //# sourceMappingURL=virtualSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualSchema.js","sourceRoot":"","sources":["../../../src/utils/virtualSchema.ts"],"names":[],"mappings":"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"}
package/llms.txt CHANGED
@@ -1,8 +1,18 @@
1
- # mcp-code-context v3.9.2
1
+ # mcp-code-context v7.0.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.9.2
5
+ ## What's New in v7.0.0 (Enterprise Polyglot)
6
+
7
+ 🧬 **53 Pure AST WebAssembly Tools Suite**:
8
+ - ✅ **Full Polyglot Suite**: 53 pure AST tools with zero native compilation dependencies across 10 major languages.
9
+ - ✅ **Structural S-Expression DSL**: `query_code_ast` with syntax-highlighted tree queries.
10
+ - ✅ **Incremental Tree Diffing**: `incremental_ast_diff` with `tree.edit()`.
11
+ - ✅ **Static Complexity & Scope**: `get_ast_complexity_matrix`, `detect_dead_ast_symbols`, `resolve_lexical_scope`.
12
+ - ✅ **Security & Architecture**: `sql_ast_validator`, `ast_codemod_transpile`, `detect_async_eventloop_blockers`, `verify_env_contract_drift`, `audit_error_handling_contracts`, `extract_api_route_matrix`, `flatten_class_hierarchy`, `detect_circular_dependencies`.
13
+ - ✅ **Startup Diagnostics Signature**: Emits `[mcp-code-context] v7.0.1 running on stdio` on startup.
14
+
15
+ ## Previously Added in v3.9.2
6
16
 
7
17
  🛡️ **Project Root Fallback & Schema Freedom Release**:
8
18
  - ✅ **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.
@@ -468,6 +478,6 @@ No additional configuration is needed beyond adding the MCP server definition. S
468
478
 
469
479
  ---
470
480
 
471
- **Version**: 3.9.2
481
+ **Version**: 7.0.1
472
482
  **Last Updated**: June 8, 2026
473
483
  **Status**: Production-ready with session-scoped state and crash recovery
package/package.json CHANGED
@@ -1,95 +1,97 @@
1
- {
2
- "name": "mcp-code-context",
3
- "version": "3.9.2",
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
- "type": "module",
6
- "main": "dist/src/index.js",
7
- "bin": {
8
- "mcp-code-context": "dist/src/index.js"
9
- },
10
- "scripts": {
11
- "build": "tsc && node -e \"require('fs').copyFileSync('src/utils/gemDescriptions.json', 'dist/src/utils/gemDescriptions.json')\"",
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
- "test:ui": "vitest --ui",
14
- "test:run": "vitest run",
15
- "test:coverage": "vitest run --coverage",
16
- "test:watch": "vitest --watch",
17
- "build:tests": "tsc -p tsconfig.tests.json",
18
- "start": "node dist/src/index.js",
19
- "dev": "npm run build && node dist/src/index.js",
20
- "clean": "rimraf dist dist-tests",
21
- "rebuild": "npm run clean && npm run build",
22
- "prepublishOnly": "npm run rebuild"
23
- },
24
- "keywords": [
25
- "mcp",
26
- "model-context-protocol",
27
- "semantic-compression",
28
- "llm",
29
- "code-analysis",
30
- "ast",
31
- "repository-map",
32
- "claude",
33
- "cursor",
34
- "windsurf",
35
- "copilot",
36
- "amazon-q",
37
- "code-context",
38
- "typescript",
39
- "php",
40
- "dart",
41
- "python",
42
- "ruby",
43
- "rails",
44
- "activerecord"
45
- ],
46
- "author": "Alejandro Chataing <a.chataing.a@gmail.com>",
47
- "license": "MIT",
48
- "repository": {
49
- "type": "git",
50
- "url": "git+https://github.com/achatainga/mcp-code-context.git"
51
- },
52
- "funding": [
53
- {
54
- "type": "ko-fi",
55
- "url": "https://ko-fi.com/achatainga"
56
- },
57
- {
58
- "type": "paypal",
59
- "url": "https://paypal.me/achatainga"
60
- }
61
- ],
62
- "homepage": "https://github.com/achatainga/mcp-code-context#readme",
63
- "bugs": {
64
- "url": "https://github.com/achatainga/mcp-code-context/issues",
65
- "email": "a.chataing.a@gmail.com"
66
- },
67
- "dependencies": {
68
- "@modelcontextprotocol/sdk": "1.29.0",
69
- "chokidar": "5.0.0",
70
- "diff-match-patch": "1.0.5",
71
- "fuse.js": "7.3.0",
72
- "ignore": "6.0.2",
73
- "pino": "10.3.1",
74
- "pino-pretty": "13.1.3",
75
- "proper-lockfile": "4.1.2",
76
- "sql.js": "1.14.1",
77
- "tree-sitter-wasms": "0.1.13",
78
- "web-tree-sitter": "0.25.1"
79
- },
80
- "devDependencies": {
81
- "@types/chokidar": "1.7.5",
82
- "@types/diff-match-patch": "1.0.36",
83
- "@types/node": "22.19.17",
84
- "@types/proper-lockfile": "4.1.4",
85
- "@types/sql.js": "1.4.11",
86
- "@vitest/coverage-v8": "4.1.5",
87
- "@vitest/ui": "4.1.5",
88
- "rimraf": "6.0.1",
89
- "typescript": "5.7.2",
90
- "vitest": "4.1.5"
91
- },
92
- "engines": {
93
- "node": ">=18.0.0"
94
- }
95
- }
1
+ {
2
+ "name": "mcp-code-context",
3
+ "version": "7.0.1",
4
+ "description": "Enterprise Polyglot MCP server with Tree-sitter WASM parsers for 100% AST accuracy. Zero native dependencies. Dual transport: Stdio + Streamable HTTP/SSE. Production-ready with persistent caching, Test Impact Analysis (TIA), 3-hop Call Hierarchy with Mermaid export, Virtual ORM, Cross-Language Wire Contract validation, Offline Conceptual Vector Search, Native S-Expression Tree-sitter Query DSL (query_code_ast), O(log N) Incremental Re-Parsing (incremental_ast_diff), Cognitive & Cyclomatic AST Profiler (get_ast_complexity_matrix), Zero-Hallucination Mock Generator (generate_ast_mocks), Zombie Export Eliminator (detect_dead_ast_symbols), Scope-Aware Semantic Renamer (resolve_lexical_scope), Embedded SQL Validator (sql_ast_validator), Lossless CST Codemods (ast_codemod_transpile), Async Event-Loop Blocker Detector (detect_async_eventloop_blockers), Env Var AST Drift Verifier (verify_env_contract_drift), Exception Swallowing Guard (audit_error_handling_contracts), Zero-Runtime Route Matrix Extractor (extract_api_route_matrix), Trait & Mixin Hierarchy Flattener (flatten_class_hierarchy), and Tarjan Circular Import Detector (detect_circular_dependencies). Supports TypeScript, JavaScript, PHP, Python, Ruby, Java, Go, C#, Rust, and Kotlin.",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "bin": {
8
+ "mcp-code-context": "dist/src/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc && node -e \"require('fs').copyFileSync('src/utils/gemDescriptions.json', 'dist/src/utils/gemDescriptions.json')\"",
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
+ "test:ui": "vitest --ui",
14
+ "test:run": "vitest run",
15
+ "test:coverage": "vitest run --coverage",
16
+ "test:watch": "vitest --watch",
17
+ "test:vectors": "vitest run tests/unit/vectors/vectors.spec.ts",
18
+ "test:e2e-provider": "node tests/e2e_local_provider_test.mjs",
19
+ "build:tests": "tsc -p tsconfig.tests.json",
20
+ "start": "node dist/src/index.js",
21
+ "dev": "npm run build && node dist/src/index.js",
22
+ "clean": "rimraf dist dist-tests",
23
+ "rebuild": "npm run clean && npm run build",
24
+ "prepublishOnly": "npm run rebuild"
25
+ },
26
+ "keywords": [
27
+ "mcp",
28
+ "model-context-protocol",
29
+ "semantic-compression",
30
+ "llm",
31
+ "code-analysis",
32
+ "ast",
33
+ "repository-map",
34
+ "claude",
35
+ "cursor",
36
+ "windsurf",
37
+ "copilot",
38
+ "amazon-q",
39
+ "code-context",
40
+ "typescript",
41
+ "php",
42
+ "dart",
43
+ "python",
44
+ "ruby",
45
+ "rails",
46
+ "activerecord"
47
+ ],
48
+ "author": "Alejandro Chataing <a.chataing.a@gmail.com>",
49
+ "license": "MIT",
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/achatainga/mcp-code-context.git"
53
+ },
54
+ "funding": [
55
+ {
56
+ "type": "ko-fi",
57
+ "url": "https://ko-fi.com/achatainga"
58
+ },
59
+ {
60
+ "type": "paypal",
61
+ "url": "https://paypal.me/achatainga"
62
+ }
63
+ ],
64
+ "homepage": "https://github.com/achatainga/mcp-code-context#readme",
65
+ "bugs": {
66
+ "url": "https://github.com/achatainga/mcp-code-context/issues",
67
+ "email": "a.chataing.a@gmail.com"
68
+ },
69
+ "dependencies": {
70
+ "@modelcontextprotocol/sdk": "^1.32.2",
71
+ "chokidar": "5.0.0",
72
+ "diff-match-patch": "1.0.5",
73
+ "fuse.js": "7.3.0",
74
+ "ignore": "6.0.2",
75
+ "pino": "10.3.1",
76
+ "pino-pretty": "13.1.3",
77
+ "proper-lockfile": "4.1.2",
78
+ "sql.js": "1.14.1",
79
+ "tree-sitter-wasms": "0.1.13",
80
+ "web-tree-sitter": "0.25.1"
81
+ },
82
+ "devDependencies": {
83
+ "@types/chokidar": "1.7.5",
84
+ "@types/diff-match-patch": "1.0.36",
85
+ "@types/node": "22.19.17",
86
+ "@types/proper-lockfile": "4.1.4",
87
+ "@types/sql.js": "1.4.11",
88
+ "@vitest/coverage-v8": "4.1.5",
89
+ "@vitest/ui": "4.1.5",
90
+ "rimraf": "6.0.1",
91
+ "typescript": "5.7.2",
92
+ "vitest": "4.1.5"
93
+ },
94
+ "engines": {
95
+ "node": ">=18.0.0"
96
+ }
97
+ }
Binary file