mcp-code-context 3.9.1 → 7.0.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 (208) hide show
  1. package/CHANGELOG.md +288 -215
  2. package/INSTRUCTIONS.md +28 -11
  3. package/README.md +124 -11
  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 +4 -2
  14. package/dist/src/index.js +119 -14
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/operations/apiRoutes.d.ts +31 -0
  17. package/dist/src/operations/apiRoutes.js +170 -0
  18. package/dist/src/operations/apiRoutes.js.map +1 -0
  19. package/dist/src/operations/architectureLinter.d.ts +45 -0
  20. package/dist/src/operations/architectureLinter.js +223 -0
  21. package/dist/src/operations/architectureLinter.js.map +1 -0
  22. package/dist/src/operations/astComplexity.d.ts +38 -0
  23. package/dist/src/operations/astComplexity.js +243 -0
  24. package/dist/src/operations/astComplexity.js.map +1 -0
  25. package/dist/src/operations/astMockGenerator.d.ts +34 -0
  26. package/dist/src/operations/astMockGenerator.js +203 -0
  27. package/dist/src/operations/astMockGenerator.js.map +1 -0
  28. package/dist/src/operations/astQuery.d.ts +47 -0
  29. package/dist/src/operations/astQuery.js +169 -0
  30. package/dist/src/operations/astQuery.js.map +1 -0
  31. package/dist/src/operations/astTransform.d.ts +1 -1
  32. package/dist/src/operations/astTransform.js +11 -2
  33. package/dist/src/operations/astTransform.js.map +1 -1
  34. package/dist/src/operations/asyncBlockers.d.ts +33 -0
  35. package/dist/src/operations/asyncBlockers.js +162 -0
  36. package/dist/src/operations/asyncBlockers.js.map +1 -0
  37. package/dist/src/operations/blastRadiusReport.d.ts +43 -0
  38. package/dist/src/operations/blastRadiusReport.js +236 -0
  39. package/dist/src/operations/blastRadiusReport.js.map +1 -0
  40. package/dist/src/operations/callHierarchy.d.ts +28 -0
  41. package/dist/src/operations/callHierarchy.js +166 -0
  42. package/dist/src/operations/callHierarchy.js.map +1 -0
  43. package/dist/src/operations/circularDependencies.d.ts +28 -0
  44. package/dist/src/operations/circularDependencies.js +201 -0
  45. package/dist/src/operations/circularDependencies.js.map +1 -0
  46. package/dist/src/operations/classHierarchyFlattener.d.ts +35 -0
  47. package/dist/src/operations/classHierarchyFlattener.js +185 -0
  48. package/dist/src/operations/classHierarchyFlattener.js.map +1 -0
  49. package/dist/src/operations/compress.d.ts +2 -2
  50. package/dist/src/operations/compress.js +154 -20
  51. package/dist/src/operations/compress.js.map +1 -1
  52. package/dist/src/operations/conceptSearch.d.ts +19 -0
  53. package/dist/src/operations/conceptSearch.js +176 -0
  54. package/dist/src/operations/conceptSearch.js.map +1 -0
  55. package/dist/src/operations/confirmationStore.d.ts +1 -1
  56. package/dist/src/operations/confirmationStore.js +1 -1
  57. package/dist/src/operations/conflictPredictor.d.ts +21 -0
  58. package/dist/src/operations/conflictPredictor.js +139 -0
  59. package/dist/src/operations/conflictPredictor.js.map +1 -0
  60. package/dist/src/operations/contextCompactor.d.ts +38 -0
  61. package/dist/src/operations/contextCompactor.js +348 -0
  62. package/dist/src/operations/contextCompactor.js.map +1 -0
  63. package/dist/src/operations/cstCodemod.d.ts +34 -0
  64. package/dist/src/operations/cstCodemod.js +205 -0
  65. package/dist/src/operations/cstCodemod.js.map +1 -0
  66. package/dist/src/operations/deadSymbols.d.ts +32 -0
  67. package/dist/src/operations/deadSymbols.js +178 -0
  68. package/dist/src/operations/deadSymbols.js.map +1 -0
  69. package/dist/src/operations/envContract.d.ts +35 -0
  70. package/dist/src/operations/envContract.js +194 -0
  71. package/dist/src/operations/envContract.js.map +1 -0
  72. package/dist/src/operations/errorAudit.d.ts +36 -0
  73. package/dist/src/operations/errorAudit.js +201 -0
  74. package/dist/src/operations/errorAudit.js.map +1 -0
  75. package/dist/src/operations/importIntegrity.d.ts +48 -0
  76. package/dist/src/operations/importIntegrity.js +395 -0
  77. package/dist/src/operations/importIntegrity.js.map +1 -0
  78. package/dist/src/operations/incrementalDiff.d.ts +47 -0
  79. package/dist/src/operations/incrementalDiff.js +216 -0
  80. package/dist/src/operations/incrementalDiff.js.map +1 -0
  81. package/dist/src/operations/lexicalScope.d.ts +51 -0
  82. package/dist/src/operations/lexicalScope.js +212 -0
  83. package/dist/src/operations/lexicalScope.js.map +1 -0
  84. package/dist/src/operations/read.d.ts +21 -0
  85. package/dist/src/operations/read.js +21 -0
  86. package/dist/src/operations/read.js.map +1 -1
  87. package/dist/src/operations/readCore.js +37 -17
  88. package/dist/src/operations/readCore.js.map +1 -1
  89. package/dist/src/operations/rename.js +35 -24
  90. package/dist/src/operations/rename.js.map +1 -1
  91. package/dist/src/operations/sqlValidator.d.ts +36 -0
  92. package/dist/src/operations/sqlValidator.js +202 -0
  93. package/dist/src/operations/sqlValidator.js.map +1 -0
  94. package/dist/src/operations/symbolQuery.js +112 -23
  95. package/dist/src/operations/symbolQuery.js.map +1 -1
  96. package/dist/src/operations/taintAnalysis.d.ts +46 -0
  97. package/dist/src/operations/taintAnalysis.js +220 -0
  98. package/dist/src/operations/taintAnalysis.js.map +1 -0
  99. package/dist/src/operations/testImpact.d.ts +31 -0
  100. package/dist/src/operations/testImpact.js +179 -0
  101. package/dist/src/operations/testImpact.js.map +1 -0
  102. package/dist/src/operations/typeInference.d.ts +54 -0
  103. package/dist/src/operations/typeInference.js +565 -0
  104. package/dist/src/operations/typeInference.js.map +1 -0
  105. package/dist/src/operations/wireContract.d.ts +34 -0
  106. package/dist/src/operations/wireContract.js +185 -0
  107. package/dist/src/operations/wireContract.js.map +1 -0
  108. package/dist/src/operations/write.d.ts +2 -2
  109. package/dist/src/operations/write.js +151 -82
  110. package/dist/src/operations/write.js.map +1 -1
  111. package/dist/src/parsers/base.d.ts +9 -1
  112. package/dist/src/parsers/base.js +61 -1
  113. package/dist/src/parsers/base.js.map +1 -1
  114. package/dist/src/parsers/csharp.d.ts +1 -1
  115. package/dist/src/parsers/csharp.js +1 -1
  116. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  117. package/dist/src/parsers/dartTreeSitter.js +1 -1
  118. package/dist/src/parsers/go.d.ts +1 -1
  119. package/dist/src/parsers/go.js +1 -1
  120. package/dist/src/parsers/java.d.ts +1 -1
  121. package/dist/src/parsers/java.js +1 -1
  122. package/dist/src/parsers/kotlin.d.ts +1 -1
  123. package/dist/src/parsers/kotlin.js +1 -1
  124. package/dist/src/parsers/php.d.ts +1 -1
  125. package/dist/src/parsers/php.js +1 -1
  126. package/dist/src/parsers/python.d.ts +1 -1
  127. package/dist/src/parsers/python.js +1 -1
  128. package/dist/src/parsers/registry.d.ts +1 -1
  129. package/dist/src/parsers/registry.js +1 -1
  130. package/dist/src/parsers/ruby.d.ts +1 -1
  131. package/dist/src/parsers/ruby.js +1 -1
  132. package/dist/src/parsers/rust.d.ts +1 -1
  133. package/dist/src/parsers/rust.js +1 -1
  134. package/dist/src/parsers/typescript.d.ts +1 -1
  135. package/dist/src/parsers/typescript.js +1 -1
  136. package/dist/src/tools/adminHandlers.js +8 -7
  137. package/dist/src/tools/adminHandlers.js.map +1 -1
  138. package/dist/src/tools/context.d.ts +4 -0
  139. package/dist/src/tools/context.js +14 -0
  140. package/dist/src/tools/context.js.map +1 -1
  141. package/dist/src/tools/pipeline.js +27 -1
  142. package/dist/src/tools/pipeline.js.map +1 -1
  143. package/dist/src/tools/readHandlers.d.ts +150 -0
  144. package/dist/src/tools/readHandlers.js +642 -35
  145. package/dist/src/tools/readHandlers.js.map +1 -1
  146. package/dist/src/tools/toolDefinitions.d.ts +2190 -1
  147. package/dist/src/tools/toolDefinitionsAdmin.d.ts +1 -1
  148. package/dist/src/tools/toolDefinitionsAdmin.js +12 -12
  149. package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -1
  150. package/dist/src/tools/toolDefinitionsCore.d.ts +2189 -0
  151. package/dist/src/tools/toolDefinitionsCore.js +422 -42
  152. package/dist/src/tools/toolDefinitionsCore.js.map +1 -1
  153. package/dist/src/tools/writeHandlers.js +31 -17
  154. package/dist/src/tools/writeHandlers.js.map +1 -1
  155. package/dist/src/utils/appDir.d.ts +1 -1
  156. package/dist/src/utils/appDir.js +1 -1
  157. package/dist/src/utils/auditLogger.d.ts +1 -1
  158. package/dist/src/utils/auditLogger.js +1 -1
  159. package/dist/src/utils/backupManager.d.ts +1 -1
  160. package/dist/src/utils/backupManager.js +1 -1
  161. package/dist/src/utils/conceptEngine.d.ts +56 -0
  162. package/dist/src/utils/conceptEngine.js +234 -0
  163. package/dist/src/utils/conceptEngine.js.map +1 -0
  164. package/dist/src/utils/constants.d.ts +1 -1
  165. package/dist/src/utils/constants.js +2 -1
  166. package/dist/src/utils/constants.js.map +1 -1
  167. package/dist/src/utils/diff.d.ts +1 -1
  168. package/dist/src/utils/diff.js +1 -1
  169. package/dist/src/utils/fileLock.d.ts +1 -1
  170. package/dist/src/utils/fileLock.js +1 -1
  171. package/dist/src/utils/fileWalker.d.ts +1 -1
  172. package/dist/src/utils/fileWalker.js +1 -1
  173. package/dist/src/utils/fileWatcher.d.ts +1 -1
  174. package/dist/src/utils/fileWatcher.js +1 -1
  175. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  176. package/dist/src/utils/fuzzySearch.js +1 -1
  177. package/dist/src/utils/gemfileParser.d.ts +1 -1
  178. package/dist/src/utils/gemfileParser.js +1 -1
  179. package/dist/src/utils/logger.d.ts +1 -1
  180. package/dist/src/utils/logger.js +1 -1
  181. package/dist/src/utils/metaprogramming.d.ts +1 -1
  182. package/dist/src/utils/metaprogramming.js +1 -1
  183. package/dist/src/utils/projectRoot.d.ts +9 -0
  184. package/dist/src/utils/projectRoot.js +94 -0
  185. package/dist/src/utils/projectRoot.js.map +1 -0
  186. package/dist/src/utils/railsRoutes.d.ts +1 -1
  187. package/dist/src/utils/railsRoutes.js +1 -1
  188. package/dist/src/utils/rateLimiter.d.ts +26 -1
  189. package/dist/src/utils/rateLimiter.js +26 -1
  190. package/dist/src/utils/rateLimiter.js.map +1 -1
  191. package/dist/src/utils/streaming.d.ts +1 -1
  192. package/dist/src/utils/streaming.js +1 -1
  193. package/dist/src/utils/telemetry.d.ts +1 -1
  194. package/dist/src/utils/telemetry.js +1 -1
  195. package/dist/src/utils/virtualSchema.d.ts +31 -0
  196. package/dist/src/utils/virtualSchema.js +367 -0
  197. package/dist/src/utils/virtualSchema.js.map +1 -0
  198. package/llms.txt +24 -6
  199. package/package.json +4 -2
  200. package/skills/code-context-logo.png +0 -0
  201. package/skills/code-context-pro/SKILL.md +149 -0
  202. package/skills/code-context-pro/references/benchmarks.md +25 -0
  203. package/skills/code-context-pro/references/decision-tree.md +32 -0
  204. package/skills/code-context-pro/references/multi-ide-setup.md +104 -0
  205. package/skills/code-context-pro.zip +0 -0
  206. package/HIRE_ME.md +0 -234
  207. package/SPONSORS.md +0 -104
  208. package/vitest.config.ts +0 -37
@@ -0,0 +1,216 @@
1
+ /**
2
+ * WASM Incremental AST Re-Parsing & Subtree Diff Engine (v5.5.0)
3
+ *
4
+ * Computes sub-millisecond AST re-parsing deltas between old and new code using
5
+ * Tree-sitter's tree.edit() and incremental re-parsing. Identifies exact affected
6
+ * AST nodes, enclosing declarations, and validates syntax error integrity (hasError)
7
+ * in O(log N) time without re-parsing unaffected subtrees.
8
+ */
9
+ import * as fs from "node:fs/promises";
10
+ import * as path from "node:path";
11
+ import { existsSync } from "node:fs";
12
+ import { performance } from "node:perf_hooks";
13
+ import { ParserRegistry } from "../parsers/registry.js";
14
+ import { CodeContextEngine } from "../core/engine.js";
15
+ /**
16
+ * Calculates common prefix length between two strings
17
+ */
18
+ function getCommonPrefix(s1, s2) {
19
+ let i = 0;
20
+ const max = Math.min(s1.length, s2.length);
21
+ while (i < max && s1[i] === s2[i])
22
+ i++;
23
+ return i;
24
+ }
25
+ /**
26
+ * Calculates common suffix length between two strings given prefix offset
27
+ */
28
+ function getCommonSuffix(s1, s2, prefixLen) {
29
+ let len = 0;
30
+ let i1 = s1.length - 1;
31
+ let i2 = s2.length - 1;
32
+ while (i1 >= prefixLen && i2 >= prefixLen && s1[i1] === s2[i2]) {
33
+ len++;
34
+ i1--;
35
+ i2--;
36
+ }
37
+ return len;
38
+ }
39
+ /**
40
+ * Converts byte index into row/column Point
41
+ */
42
+ function indexToPoint(str, index) {
43
+ const slice = str.slice(0, index);
44
+ const lines = slice.split("\n");
45
+ const row = lines.length - 1;
46
+ const column = lines[lines.length - 1].length;
47
+ return { row, column };
48
+ }
49
+ /**
50
+ * Finds the enclosing declaration (function, class, method, or interface)
51
+ */
52
+ function findEnclosingDeclaration(node) {
53
+ let curr = node;
54
+ while (curr) {
55
+ if (curr.type === "function_declaration" ||
56
+ curr.type === "function_definition" ||
57
+ curr.type === "method_definition" ||
58
+ curr.type === "class_declaration" ||
59
+ curr.type === "class_definition" ||
60
+ curr.type === "interface_declaration" ||
61
+ curr.type === "arrow_function") {
62
+ const name = curr.childForFieldName("name")?.text ||
63
+ (curr.parent?.type === "variable_declarator" ? curr.parent.childForFieldName("name")?.text : undefined);
64
+ return { type: curr.type, name };
65
+ }
66
+ curr = curr.parent;
67
+ }
68
+ return null;
69
+ }
70
+ /**
71
+ * Main incrementalAstDiff operation
72
+ */
73
+ export async function incrementalAstDiff(params) {
74
+ let oldTree = null;
75
+ let newTree = null;
76
+ try {
77
+ const targetPath = params.filePath || "in_memory.ts";
78
+ let oldContent = params.oldCode ?? params.oldContent;
79
+ if (oldContent === undefined) {
80
+ if (params.filePath && existsSync(params.filePath)) {
81
+ oldContent = await fs.readFile(params.filePath, "utf-8");
82
+ }
83
+ else {
84
+ oldContent = "";
85
+ }
86
+ }
87
+ let newContent = params.newCode ?? params.newContent;
88
+ if (newContent === undefined) {
89
+ if (params.filePath && existsSync(params.filePath)) {
90
+ newContent = await fs.readFile(params.filePath, "utf-8");
91
+ }
92
+ else {
93
+ return {
94
+ success: false,
95
+ error: "newCode or newContent is required",
96
+ };
97
+ }
98
+ }
99
+ const ext = path.extname(targetPath).toLowerCase();
100
+ // Initialize Parser Registry
101
+ let registry = params.registry;
102
+ if (!registry) {
103
+ const engine = new CodeContextEngine();
104
+ await engine.init();
105
+ registry = new ParserRegistry(engine);
106
+ await registry.init();
107
+ }
108
+ const parser = registry.getParser(ext === ".py" ? ".py" : ".ts");
109
+ if (!parser) {
110
+ return {
111
+ success: false,
112
+ error: `No AST parser available for extension ${ext}`,
113
+ };
114
+ }
115
+ // Parse base tree
116
+ oldTree = parser.parse(oldContent);
117
+ // Compute diff offsets
118
+ const prefixLen = getCommonPrefix(oldContent, newContent);
119
+ const suffixLen = getCommonSuffix(oldContent, newContent, prefixLen);
120
+ const startIndex = prefixLen;
121
+ const oldEndIndex = oldContent.length - suffixLen;
122
+ const newEndIndex = newContent.length - suffixLen;
123
+ const startPos = indexToPoint(oldContent, startIndex);
124
+ const oldEndPos = indexToPoint(oldContent, oldEndIndex);
125
+ const newEndPos = indexToPoint(newContent, newEndIndex);
126
+ // Execute tree-sitter edit on oldTree
127
+ oldTree.edit({
128
+ startIndex,
129
+ oldEndIndex,
130
+ newEndIndex,
131
+ startPosition: startPos,
132
+ oldEndPosition: oldEndPos,
133
+ newEndPosition: newEndPos,
134
+ });
135
+ // Benchmark sub-millisecond re-parsing
136
+ const t0 = performance.now();
137
+ newTree = parser.parse(newContent, oldTree);
138
+ const reparseDurationMs = Number((performance.now() - t0).toFixed(3));
139
+ // Verify syntax integrity
140
+ const hasErrors = newTree.rootNode.hasError;
141
+ // Count error nodes if syntax broke
142
+ let errorNodesCount = 0;
143
+ if (hasErrors) {
144
+ function countErrors(node) {
145
+ if (node.type === "ERROR" || node.isMissing) {
146
+ errorNodesCount++;
147
+ }
148
+ for (let i = 0; i < node.namedChildCount; i++) {
149
+ const c = node.namedChild(i);
150
+ if (c && c.hasError)
151
+ countErrors(c);
152
+ }
153
+ }
154
+ countErrors(newTree.rootNode);
155
+ }
156
+ // Locate affected node in newTree
157
+ const targetIdx = Math.min(startIndex, newContent.length > 0 ? newContent.length - 1 : 0);
158
+ const targetEndIdx = Math.max(targetIdx, Math.min(newEndIndex, newContent.length));
159
+ const rawNode = newTree.rootNode.descendantForIndex(targetIdx, targetEndIdx);
160
+ const affectedNode = rawNode ?? newTree.rootNode;
161
+ const enclosing = findEnclosingDeclaration(affectedNode);
162
+ const startRow = affectedNode.startPosition.row;
163
+ const endRow = affectedNode.endPosition.row;
164
+ const newLines = newContent.split("\n");
165
+ const previewLines = newLines.slice(Math.max(0, startRow - 1), Math.min(newLines.length, endRow + 2));
166
+ const affectedDetail = {
167
+ type: affectedNode.type,
168
+ symbolName: enclosing?.name,
169
+ enclosingScope: enclosing ? `${enclosing.type} ${enclosing.name || "(anonymous)"}` : "global",
170
+ startLine: startRow + 1,
171
+ endLine: endRow + 1,
172
+ startColumn: affectedNode.startPosition.column,
173
+ endColumn: affectedNode.endPosition.column,
174
+ snippet: previewLines.join("\n"),
175
+ };
176
+ const summary = hasErrors
177
+ ? `⚠️ Incremental Re-parse: Syntax Error introduced in '${affectedDetail.enclosingScope}' (Lines ${affectedDetail.startLine}-${affectedDetail.endLine}) in ${reparseDurationMs}ms.`
178
+ : `✅ Incremental Re-parse: Clean syntax update in '${affectedDetail.enclosingScope}' (Lines ${affectedDetail.startLine}-${affectedDetail.endLine}) in ${reparseDurationMs}ms.`;
179
+ const report = {
180
+ filePath: params.filePath,
181
+ reparseDurationMs,
182
+ isSyntaxValid: !hasErrors,
183
+ hasErrors,
184
+ errorNodesCount,
185
+ deltaByteRange: {
186
+ startIndex,
187
+ oldEndIndex,
188
+ newEndIndex,
189
+ },
190
+ affectedNode: affectedDetail,
191
+ summary,
192
+ };
193
+ return {
194
+ success: true,
195
+ content: JSON.stringify(report, null, 2) + "\n\n" + summary,
196
+ };
197
+ }
198
+ catch (error) {
199
+ return {
200
+ success: false,
201
+ error: `incremental_ast_diff failed: ${error instanceof Error ? error.message : String(error)}`,
202
+ };
203
+ }
204
+ finally {
205
+ // SRE Guardrail: Strict WASM Linear Memory Disposal
206
+ try {
207
+ oldTree?.delete();
208
+ }
209
+ catch { }
210
+ try {
211
+ newTree?.delete();
212
+ }
213
+ catch { }
214
+ }
215
+ }
216
+ //# sourceMappingURL=incrementalDiff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incrementalDiff.js","sourceRoot":"","sources":["../../../src/operations/incrementalDiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Scope-Aware Semantic Scope Resolver & Shadowing Guard
3
+ * v5.7.0 Enterprise AST Intelligence
4
+ */
5
+ import { ParserRegistry } from "../parsers/registry.js";
6
+ import type { ReadResult } from "./readCore.js";
7
+ export interface ScopeVariable {
8
+ name: string;
9
+ kind: "var" | "let" | "const" | "parameter" | "function" | "class";
10
+ line: number;
11
+ column: number;
12
+ }
13
+ export interface ShadowingIncident {
14
+ identifier: string;
15
+ innerScopeLine: number;
16
+ outerScopeLine: number;
17
+ warning: string;
18
+ }
19
+ export interface LexicalScopeInfo {
20
+ id: number;
21
+ type: "global" | "module" | "function" | "block";
22
+ startLine: number;
23
+ endLine: number;
24
+ parentId?: number;
25
+ variables: ScopeVariable[];
26
+ }
27
+ export interface LexicalScopeReport {
28
+ filePath?: string;
29
+ totalScopes: number;
30
+ shadowingIncidents: ShadowingIncident[];
31
+ scopes: LexicalScopeInfo[];
32
+ canSafelyRename?: boolean;
33
+ renameCollisionWarning?: string;
34
+ summary: string;
35
+ }
36
+ export interface LexicalScopeOptions {
37
+ filePath?: string;
38
+ code?: string;
39
+ content?: string;
40
+ proposedRename?: {
41
+ targetSymbol: string;
42
+ newSymbolName: string;
43
+ atLine: number;
44
+ };
45
+ projectRoot?: string;
46
+ registry?: ParserRegistry;
47
+ }
48
+ /**
49
+ * Main lexical scope resolver
50
+ */
51
+ export declare function resolveLexicalScope(params: LexicalScopeOptions): Promise<ReadResult>;
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Scope-Aware Semantic Scope Resolver & Shadowing Guard
3
+ * v5.7.0 Enterprise AST Intelligence
4
+ */
5
+ import * as fs from "node:fs/promises";
6
+ import * as path from "node:path";
7
+ import { existsSync } from "node:fs";
8
+ import { ParserRegistry } from "../parsers/registry.js";
9
+ import { CodeContextEngine } from "../core/engine.js";
10
+ /**
11
+ * Builds the lexical scope tree and tracks identifier declarations
12
+ */
13
+ function buildScopeTree(rootNode) {
14
+ const scopes = [];
15
+ const incidents = [];
16
+ let nextScopeId = 1;
17
+ function traverseScope(n, parentId) {
18
+ const isGlobal = !parentId && (n.type === "program" || n.type === "module");
19
+ const isFunction = n.type === "function_declaration" ||
20
+ n.type === "function_definition" ||
21
+ n.type === "method_definition" ||
22
+ n.type === "arrow_function";
23
+ const isBlock = n.type === "statement_block" || n.type === "block";
24
+ let currentScopeId = parentId;
25
+ if (isGlobal || isFunction || isBlock) {
26
+ currentScopeId = nextScopeId++;
27
+ const scopeType = isGlobal ? "global" : isFunction ? "function" : "block";
28
+ scopes.push({
29
+ id: currentScopeId,
30
+ type: scopeType,
31
+ startLine: n.startPosition.row + 1,
32
+ endLine: n.endPosition.row + 1,
33
+ parentId,
34
+ variables: [],
35
+ });
36
+ }
37
+ // Capture parameter declarations
38
+ if (isFunction) {
39
+ const params = n.childForFieldName("parameters");
40
+ if (params) {
41
+ for (let i = 0; i < params.namedChildCount; i++) {
42
+ const p = params.namedChild(i);
43
+ if (p && (p.type === "required_parameter" || p.type === "identifier")) {
44
+ const name = p.type === "identifier" ? p.text : p.childForFieldName("pattern")?.text || p.text;
45
+ const targetScope = scopes.find(s => s.id === currentScopeId);
46
+ if (targetScope && name) {
47
+ targetScope.variables.push({
48
+ name,
49
+ kind: "parameter",
50
+ line: p.startPosition.row + 1,
51
+ column: p.startPosition.column,
52
+ });
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ // Capture variable declarators
59
+ if (n.type === "variable_declarator") {
60
+ const name = n.childForFieldName("name")?.text;
61
+ if (name && currentScopeId) {
62
+ const targetScope = scopes.find(s => s.id === currentScopeId);
63
+ if (targetScope) {
64
+ targetScope.variables.push({
65
+ name,
66
+ kind: "const",
67
+ line: n.startPosition.row + 1,
68
+ column: n.startPosition.column,
69
+ });
70
+ }
71
+ }
72
+ }
73
+ for (let i = 0; i < n.namedChildCount; i++) {
74
+ const child = n.namedChild(i);
75
+ if (child)
76
+ traverseScope(child, currentScopeId);
77
+ }
78
+ return currentScopeId || 0;
79
+ }
80
+ traverseScope(rootNode);
81
+ // Detect shadowing across parent scopes
82
+ for (const scope of scopes) {
83
+ if (!scope.parentId)
84
+ continue;
85
+ for (const v of scope.variables) {
86
+ let ancestorId = scope.parentId;
87
+ while (ancestorId) {
88
+ const ancestor = scopes.find(s => s.id === ancestorId);
89
+ if (ancestor) {
90
+ const shadowed = ancestor.variables.find(av => av.name === v.name);
91
+ if (shadowed) {
92
+ incidents.push({
93
+ identifier: v.name,
94
+ innerScopeLine: v.line,
95
+ outerScopeLine: shadowed.line,
96
+ warning: `Variable '${v.name}' at line ${v.line} shadows outer declaration at line ${shadowed.line}`,
97
+ });
98
+ }
99
+ ancestorId = ancestor.parentId;
100
+ }
101
+ else {
102
+ break;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return { scopes, incidents };
108
+ }
109
+ /**
110
+ * Main lexical scope resolver
111
+ */
112
+ export async function resolveLexicalScope(params) {
113
+ let tree = null;
114
+ try {
115
+ const targetPath = params.filePath || "in_memory.ts";
116
+ let content = params.code ?? params.content;
117
+ if (content === undefined) {
118
+ if (params.filePath && existsSync(params.filePath)) {
119
+ content = await fs.readFile(params.filePath, "utf-8");
120
+ }
121
+ else {
122
+ return {
123
+ success: false,
124
+ error: `File does not exist: ${params.filePath || "none"}`,
125
+ };
126
+ }
127
+ }
128
+ const ext = path.extname(targetPath).toLowerCase();
129
+ let registry = params.registry;
130
+ if (!registry) {
131
+ const engine = new CodeContextEngine();
132
+ await engine.init();
133
+ registry = new ParserRegistry(engine);
134
+ await registry.init();
135
+ }
136
+ const parser = registry.getParser(ext === ".py" ? ".py" : ".ts");
137
+ if (!parser) {
138
+ return {
139
+ success: false,
140
+ error: `No parser available for extension: ${ext}`,
141
+ };
142
+ }
143
+ tree = parser.parse(content);
144
+ const { scopes, incidents } = buildScopeTree(tree.rootNode);
145
+ let canSafelyRename = true;
146
+ let renameCollisionWarning = undefined;
147
+ if (params.proposedRename) {
148
+ const { targetSymbol, newSymbolName, atLine } = params.proposedRename;
149
+ // Find innermost scope enclosing atLine (smallest line span)
150
+ const targetScope = scopes
151
+ .filter(s => atLine >= s.startLine && atLine <= s.endLine)
152
+ .sort((a, b) => (a.endLine - a.startLine) - (b.endLine - b.startLine))[0];
153
+ if (targetScope) {
154
+ // Check if newSymbolName already exists in this scope, its ancestors, or direct children
155
+ const checkScopes = [targetScope];
156
+ let curr = targetScope;
157
+ while (curr.parentId) {
158
+ const parent = scopes.find(s => s.id === curr.parentId);
159
+ if (parent) {
160
+ checkScopes.push(parent);
161
+ curr = parent;
162
+ }
163
+ else {
164
+ break;
165
+ }
166
+ }
167
+ for (const s of scopes) {
168
+ if (s.parentId === targetScope.id && !checkScopes.includes(s)) {
169
+ checkScopes.push(s);
170
+ }
171
+ }
172
+ for (const s of checkScopes) {
173
+ if (s.variables.some(v => v.name === newSymbolName)) {
174
+ canSafelyRename = false;
175
+ renameCollisionWarning = `Cannot safely rename '${targetSymbol}' to '${newSymbolName}': identifier '${newSymbolName}' is already declared in scope (Lines ${s.startLine}-${s.endLine}).`;
176
+ break;
177
+ }
178
+ }
179
+ }
180
+ }
181
+ const report = {
182
+ filePath: params.filePath,
183
+ totalScopes: scopes.length,
184
+ shadowingIncidents: incidents,
185
+ scopes,
186
+ canSafelyRename,
187
+ renameCollisionWarning,
188
+ summary: `Analyzed ${scopes.length} lexical scopes. Detected ${incidents.length} variable shadowing incidents.${renameCollisionWarning ? " ⚠️ Rename collision detected." : ""}`,
189
+ };
190
+ return {
191
+ success: true,
192
+ content: JSON.stringify(report, null, 2),
193
+ };
194
+ }
195
+ catch (error) {
196
+ return {
197
+ success: false,
198
+ error: `resolve_lexical_scope failed: ${error instanceof Error ? error.message : String(error)}`,
199
+ };
200
+ }
201
+ finally {
202
+ if (tree) {
203
+ try {
204
+ tree.delete();
205
+ }
206
+ catch {
207
+ // ignore
208
+ }
209
+ }
210
+ }
211
+ }
212
+ //# sourceMappingURL=lexicalScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexicalScope.js","sourceRoot":"","sources":["../../../src/operations/lexicalScope.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAiDtD;;GAEG;AACH,SAAS,cAAc,CAAC,QAAc;IACpC,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAwB,EAAE,CAAC;IAC1C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,SAAS,aAAa,CAAC,CAAO,EAAE,QAAiB;QAC/C,MAAM,QAAQ,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC5E,MAAM,UAAU,GACd,CAAC,CAAC,IAAI,KAAK,sBAAsB;YACjC,CAAC,CAAC,IAAI,KAAK,qBAAqB;YAChC,CAAC,CAAC,IAAI,KAAK,mBAAmB;YAC9B,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;QAEnE,IAAI,cAAc,GAAG,QAAQ,CAAC;QAE9B,IAAI,QAAQ,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;YACtC,cAAc,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,SAAS,GAA6B,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YAEpG,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;gBAClC,OAAO,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;gBAC9B,QAAQ;gBACR,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;QAED,iCAAiC;QACjC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChD,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;wBACtE,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;wBAC/F,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;wBAC9D,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;4BACxB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;gCACzB,IAAI;gCACJ,IAAI,EAAE,WAAW;gCACjB,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;gCAC7B,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM;6BAC/B,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;YAC/C,IAAI,IAAI,IAAI,cAAc,EAAE,CAAC;gBAC3B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;gBAC9D,IAAI,WAAW,EAAE,CAAC;oBAChB,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC;wBACzB,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;wBAC7B,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM;qBAC/B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK;gBAAE,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,cAAc,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,aAAa,CAAC,QAAQ,CAAC,CAAC;IAExB,wCAAwC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ;YAAE,SAAS;QAE9B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,UAAU,GAAuB,KAAK,CAAC,QAAQ,CAAC;YACpD,OAAO,UAAU,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;gBACvD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnE,IAAI,QAAQ,EAAE,CAAC;wBACb,SAAS,CAAC,IAAI,CAAC;4BACb,UAAU,EAAE,CAAC,CAAC,IAAI;4BAClB,cAAc,EAAE,CAAC,CAAC,IAAI;4BACtB,cAAc,EAAE,QAAQ,CAAC,IAAI;4BAC7B,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,IAAI,sCAAsC,QAAQ,CAAC,IAAI,EAAE;yBACrG,CAAC,CAAC;oBACL,CAAC;oBACD,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAA2B;IACnE,IAAI,IAAI,GAAgB,IAAI,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC;QACrD,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC;QAE5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,wBAAwB,MAAM,CAAC,QAAQ,IAAI,MAAM,EAAE;iBAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAEnD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACvC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sCAAsC,GAAG,EAAE;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5D,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,IAAI,sBAAsB,GAAuB,SAAS,CAAC;QAE3D,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;YACtE,6DAA6D;YAC7D,MAAM,WAAW,GAAG,MAAM;iBACvB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;iBACzD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5E,IAAI,WAAW,EAAE,CAAC;gBAChB,yFAAyF;gBACzF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC;gBAClC,IAAI,IAAI,GAAG,WAAW,CAAC;gBACvB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxD,IAAI,MAAM,EAAE,CAAC;wBACX,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACzB,IAAI,GAAG,MAAM,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,MAAM;oBACR,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9D,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtB,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;oBAC5B,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;wBACpD,eAAe,GAAG,KAAK,CAAC;wBACxB,sBAAsB,GAAG,yBAAyB,YAAY,SAAS,aAAa,kBAAkB,aAAa,yCAAyC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;wBACzL,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAuB;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,kBAAkB,EAAE,SAAS;YAC7B,MAAM;YACN,eAAe;YACf,sBAAsB;YACtB,OAAO,EAAE,YAAY,MAAM,CAAC,MAAM,6BAA6B,SAAS,CAAC,MAAM,iCAAiC,sBAAsB,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE;SACjL,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACjG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -4,3 +4,24 @@ export { extractSymbol, readLines } from "./readCore.js";
4
4
  export { searchPattern } from "./searchOperation.js";
5
5
  export { analyzeImpact } from "./impactAnalysis.js";
6
6
  export { searchSymbols, explainSymbol, batchRead } from "./symbolQuery.js";
7
+ export { searchCodeConcept } from "./conceptSearch.js";
8
+ export { verifyImportIntegrity } from "./importIntegrity.js";
9
+ export { traceTaintFlow } from "./taintAnalysis.js";
10
+ export { backfillTypes } from "./typeInference.js";
11
+ export { enforceArchitectureRules } from "./architectureLinter.js";
12
+ export { compactContextLedger } from "./contextCompactor.js";
13
+ export { generateAstImpactReport } from "./blastRadiusReport.js";
14
+ export { queryCodeAst } from "./astQuery.js";
15
+ export { incrementalAstDiff } from "./incrementalDiff.js";
16
+ export { getAstComplexityMatrix } from "./astComplexity.js";
17
+ export { generateAstMocks } from "./astMockGenerator.js";
18
+ export { detectDeadAstSymbols } from "./deadSymbols.js";
19
+ export { resolveLexicalScope } from "./lexicalScope.js";
20
+ export { validateSqlAst } from "./sqlValidator.js";
21
+ export { astCodemodTranspile } from "./cstCodemod.js";
22
+ export { detectAsyncEventloopBlockers } from "./asyncBlockers.js";
23
+ export { verifyEnvContractDrift } from "./envContract.js";
24
+ export { auditErrorHandlingContracts } from "./errorAudit.js";
25
+ export { extractApiRouteMatrix } from "./apiRoutes.js";
26
+ export { flattenClassHierarchy } from "./classHierarchyFlattener.js";
27
+ export { detectCircularDependencies } from "./circularDependencies.js";
@@ -2,4 +2,25 @@ export { extractSymbol, readLines } from "./readCore.js";
2
2
  export { searchPattern } from "./searchOperation.js";
3
3
  export { analyzeImpact } from "./impactAnalysis.js";
4
4
  export { searchSymbols, explainSymbol, batchRead } from "./symbolQuery.js";
5
+ export { searchCodeConcept } from "./conceptSearch.js";
6
+ export { verifyImportIntegrity } from "./importIntegrity.js";
7
+ export { traceTaintFlow } from "./taintAnalysis.js";
8
+ export { backfillTypes } from "./typeInference.js";
9
+ export { enforceArchitectureRules } from "./architectureLinter.js";
10
+ export { compactContextLedger } from "./contextCompactor.js";
11
+ export { generateAstImpactReport } from "./blastRadiusReport.js";
12
+ export { queryCodeAst } from "./astQuery.js";
13
+ export { incrementalAstDiff } from "./incrementalDiff.js";
14
+ export { getAstComplexityMatrix } from "./astComplexity.js";
15
+ export { generateAstMocks } from "./astMockGenerator.js";
16
+ export { detectDeadAstSymbols } from "./deadSymbols.js";
17
+ export { resolveLexicalScope } from "./lexicalScope.js";
18
+ export { validateSqlAst } from "./sqlValidator.js";
19
+ export { astCodemodTranspile } from "./cstCodemod.js";
20
+ export { detectAsyncEventloopBlockers } from "./asyncBlockers.js";
21
+ export { verifyEnvContractDrift } from "./envContract.js";
22
+ export { auditErrorHandlingContracts } from "./errorAudit.js";
23
+ export { extractApiRouteMatrix } from "./apiRoutes.js";
24
+ export { flattenClassHierarchy } from "./classHierarchyFlattener.js";
25
+ export { detectCircularDependencies } from "./circularDependencies.js";
5
26
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC"}
@@ -23,8 +23,18 @@ export async function extractSymbol(params) {
23
23
  const symbol = cached.symbols.find(s => s.name === params.symbolName && (!params.className || s.className === params.className));
24
24
  if (symbol) {
25
25
  const content = await fs.readFile(params.filePath, "utf-8");
26
- const tree = params.parser.parse(content);
27
- const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
26
+ let tree;
27
+ let extracted = null;
28
+ try {
29
+ tree = params.parser.parse(content);
30
+ extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
31
+ }
32
+ finally {
33
+ try {
34
+ tree?.delete();
35
+ }
36
+ catch { }
37
+ }
28
38
  if (extracted) {
29
39
  return { success: true, content: extracted };
30
40
  }
@@ -33,23 +43,33 @@ export async function extractSymbol(params) {
33
43
  }
34
44
  // Cache miss - parse file
35
45
  const content = await fs.readFile(params.filePath, "utf-8");
36
- const tree = params.parser.parse(content);
37
- const symbols = params.parser.findSymbols(tree);
38
- // Update cache
39
- if (cache) {
40
- const hash = await getFileHash(params.filePath);
41
- const stat = await fs.stat(params.filePath);
42
- await cache.set({
43
- filePath: params.filePath,
44
- hash,
45
- symbols,
46
- lastModified: stat.mtimeMs,
47
- cachedAt: Date.now(),
48
- });
46
+ let tree;
47
+ let symbols = [];
48
+ let extracted = null;
49
+ try {
50
+ tree = params.parser.parse(content);
51
+ symbols = params.parser.findSymbols(tree);
52
+ // Update cache
53
+ if (cache) {
54
+ const hash = await getFileHash(params.filePath);
55
+ const stat = await fs.stat(params.filePath);
56
+ await cache.set({
57
+ filePath: params.filePath,
58
+ hash,
59
+ symbols,
60
+ lastModified: stat.mtimeMs,
61
+ cachedAt: Date.now(),
62
+ });
63
+ }
64
+ extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
65
+ }
66
+ finally {
67
+ try {
68
+ tree?.delete();
69
+ }
70
+ catch { }
49
71
  }
50
- const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
51
72
  if (!extracted) {
52
- const symbols = params.parser.findSymbols(tree);
53
73
  return {
54
74
  success: false,
55
75
  error: `Symbol "${params.symbolName}" not found. Available: ${symbols.map(s => s.name).join(", ")}`,