mcp-code-context 3.6.2 → 3.7.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 (181) hide show
  1. package/CHANGELOG.md +140 -268
  2. package/INSTRUCTIONS.md +31 -12
  3. package/README.md +223 -107
  4. package/SECURITY.md +55 -21
  5. package/dist/src/core/cacheManager.d.ts +4 -5
  6. package/dist/src/core/cacheManager.js +49 -33
  7. package/dist/src/core/cacheManager.js.map +1 -1
  8. package/dist/src/core/engine.d.ts +1 -1
  9. package/dist/src/core/engine.js +3 -3
  10. package/dist/src/core/engine.js.map +1 -1
  11. package/dist/src/core/indexManager.d.ts +58 -0
  12. package/dist/src/core/indexManager.js +252 -0
  13. package/dist/src/core/indexManager.js.map +1 -0
  14. package/dist/src/core/indexManagerQueries.d.ts +14 -0
  15. package/dist/src/core/indexManagerQueries.js +95 -0
  16. package/dist/src/core/indexManagerQueries.js.map +1 -0
  17. package/dist/src/core/sessionManager.d.ts +117 -0
  18. package/dist/src/core/sessionManager.js +231 -0
  19. package/dist/src/core/sessionManager.js.map +1 -0
  20. package/dist/src/core/validator.d.ts +1 -1
  21. package/dist/src/core/validator.js +18 -10
  22. package/dist/src/core/validator.js.map +1 -1
  23. package/dist/src/index.d.ts +1 -13
  24. package/dist/src/index.js +25 -999
  25. package/dist/src/index.js.map +1 -1
  26. package/dist/src/operations/astTransform.d.ts +38 -0
  27. package/dist/src/operations/astTransform.js +239 -0
  28. package/dist/src/operations/astTransform.js.map +1 -0
  29. package/dist/src/operations/compress.d.ts +5 -3
  30. package/dist/src/operations/compress.js +73 -7
  31. package/dist/src/operations/compress.js.map +1 -1
  32. package/dist/src/operations/confirmationStore.d.ts +35 -8
  33. package/dist/src/operations/confirmationStore.js +112 -14
  34. package/dist/src/operations/confirmationStore.js.map +1 -1
  35. package/dist/src/operations/impactAnalysis.d.ts +9 -0
  36. package/dist/src/operations/impactAnalysis.js +61 -0
  37. package/dist/src/operations/impactAnalysis.js.map +1 -0
  38. package/dist/src/operations/pendingStore.d.ts +51 -0
  39. package/dist/src/operations/pendingStore.js +201 -0
  40. package/dist/src/operations/pendingStore.js.map +1 -0
  41. package/dist/src/operations/pendingStoreInit.d.ts +6 -0
  42. package/dist/src/operations/pendingStoreInit.js +42 -0
  43. package/dist/src/operations/pendingStoreInit.js.map +1 -0
  44. package/dist/src/operations/read.d.ts +6 -92
  45. package/dist/src/operations/read.js +4 -445
  46. package/dist/src/operations/read.js.map +1 -1
  47. package/dist/src/operations/readCore.d.ts +33 -0
  48. package/dist/src/operations/readCore.js +142 -0
  49. package/dist/src/operations/readCore.js.map +1 -0
  50. package/dist/src/operations/rename.d.ts +13 -0
  51. package/dist/src/operations/rename.js +130 -0
  52. package/dist/src/operations/rename.js.map +1 -0
  53. package/dist/src/operations/searchOperation.d.ts +16 -0
  54. package/dist/src/operations/searchOperation.js +113 -0
  55. package/dist/src/operations/searchOperation.js.map +1 -0
  56. package/dist/src/operations/symbolQuery.d.ts +38 -0
  57. package/dist/src/operations/symbolQuery.js +194 -0
  58. package/dist/src/operations/symbolQuery.js.map +1 -0
  59. package/dist/src/operations/write.d.ts +11 -14
  60. package/dist/src/operations/write.js +6 -125
  61. package/dist/src/operations/write.js.map +1 -1
  62. package/dist/src/parsers/base.d.ts +1 -1
  63. package/dist/src/parsers/base.js +1 -1
  64. package/dist/src/parsers/csharp.d.ts +12 -0
  65. package/dist/src/parsers/csharp.js +67 -0
  66. package/dist/src/parsers/csharp.js.map +1 -0
  67. package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
  68. package/dist/src/parsers/dartTreeSitter.js +1 -1
  69. package/dist/src/parsers/go.d.ts +11 -0
  70. package/dist/src/parsers/go.js +74 -0
  71. package/dist/src/parsers/go.js.map +1 -0
  72. package/dist/src/parsers/java.d.ts +12 -0
  73. package/dist/src/parsers/java.js +62 -0
  74. package/dist/src/parsers/java.js.map +1 -0
  75. package/dist/src/parsers/kotlin.d.ts +12 -0
  76. package/dist/src/parsers/kotlin.js +75 -0
  77. package/dist/src/parsers/kotlin.js.map +1 -0
  78. package/dist/src/parsers/php.d.ts +1 -1
  79. package/dist/src/parsers/php.js +1 -1
  80. package/dist/src/parsers/python.d.ts +1 -1
  81. package/dist/src/parsers/python.js +1 -1
  82. package/dist/src/parsers/registry.d.ts +1 -1
  83. package/dist/src/parsers/registry.js +63 -2
  84. package/dist/src/parsers/registry.js.map +1 -1
  85. package/dist/src/parsers/ruby.d.ts +12 -0
  86. package/dist/src/parsers/ruby.js +73 -0
  87. package/dist/src/parsers/ruby.js.map +1 -0
  88. package/dist/src/parsers/rust.d.ts +12 -0
  89. package/dist/src/parsers/rust.js +66 -0
  90. package/dist/src/parsers/rust.js.map +1 -0
  91. package/dist/src/parsers/typescript.d.ts +1 -1
  92. package/dist/src/parsers/typescript.js +28 -38
  93. package/dist/src/parsers/typescript.js.map +1 -1
  94. package/dist/src/tools/adminHandlers.d.ts +67 -0
  95. package/dist/src/tools/adminHandlers.js +129 -0
  96. package/dist/src/tools/adminHandlers.js.map +1 -0
  97. package/dist/src/tools/context.d.ts +9 -0
  98. package/dist/src/tools/context.js +21 -0
  99. package/dist/src/tools/context.js.map +1 -0
  100. package/dist/src/tools/handlers.d.ts +4 -0
  101. package/dist/src/tools/handlers.js +5 -0
  102. package/dist/src/tools/handlers.js.map +1 -0
  103. package/dist/src/tools/pipeline.d.ts +6 -0
  104. package/dist/src/tools/pipeline.js +100 -0
  105. package/dist/src/tools/pipeline.js.map +1 -0
  106. package/dist/src/tools/readHandlers.d.ts +55 -0
  107. package/dist/src/tools/readHandlers.js +220 -0
  108. package/dist/src/tools/readHandlers.js.map +1 -0
  109. package/dist/src/tools/toolDefinitions.d.ts +1037 -0
  110. package/dist/src/tools/toolDefinitions.js +13 -0
  111. package/dist/src/tools/toolDefinitions.js.map +1 -0
  112. package/dist/src/tools/toolDefinitionsAdmin.d.ts +89 -0
  113. package/dist/src/tools/toolDefinitionsAdmin.js +99 -0
  114. package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -0
  115. package/dist/src/tools/toolDefinitionsCore.d.ts +949 -0
  116. package/dist/src/tools/toolDefinitionsCore.js +267 -0
  117. package/dist/src/tools/toolDefinitionsCore.js.map +1 -0
  118. package/dist/src/tools/writeHandlers.d.ts +37 -0
  119. package/dist/src/tools/writeHandlers.js +199 -0
  120. package/dist/src/tools/writeHandlers.js.map +1 -0
  121. package/dist/src/utils/appDir.d.ts +19 -0
  122. package/dist/src/utils/appDir.js +50 -0
  123. package/dist/src/utils/appDir.js.map +1 -0
  124. package/dist/src/utils/auditLogWriter.d.ts +9 -0
  125. package/dist/src/utils/auditLogWriter.js +49 -0
  126. package/dist/src/utils/auditLogWriter.js.map +1 -0
  127. package/dist/src/utils/auditLogger.d.ts +1 -10
  128. package/dist/src/utils/auditLogger.js +14 -109
  129. package/dist/src/utils/auditLogger.js.map +1 -1
  130. package/dist/src/utils/auditQuery.d.ts +23 -0
  131. package/dist/src/utils/auditQuery.js +67 -0
  132. package/dist/src/utils/auditQuery.js.map +1 -0
  133. package/dist/src/utils/backupManager.d.ts +2 -2
  134. package/dist/src/utils/backupManager.js +29 -12
  135. package/dist/src/utils/backupManager.js.map +1 -1
  136. package/dist/src/utils/constants.d.ts +1 -1
  137. package/dist/src/utils/constants.js +8 -1
  138. package/dist/src/utils/constants.js.map +1 -1
  139. package/dist/src/utils/diff.d.ts +12 -1
  140. package/dist/src/utils/diff.js +41 -1
  141. package/dist/src/utils/diff.js.map +1 -1
  142. package/dist/src/utils/fileLock.d.ts +7 -2
  143. package/dist/src/utils/fileLock.js +14 -11
  144. package/dist/src/utils/fileLock.js.map +1 -1
  145. package/dist/src/utils/fileWalker.d.ts +1 -1
  146. package/dist/src/utils/fileWalker.js +1 -1
  147. package/dist/src/utils/fileWatcher.d.ts +1 -1
  148. package/dist/src/utils/fileWatcher.js +1 -1
  149. package/dist/src/utils/fuzzySearch.d.ts +1 -1
  150. package/dist/src/utils/fuzzySearch.js +1 -1
  151. package/dist/src/utils/logger.d.ts +1 -1
  152. package/dist/src/utils/logger.js +2 -2
  153. package/dist/src/utils/logger.js.map +1 -1
  154. package/dist/src/utils/rateLimiter.d.ts +9 -1
  155. package/dist/src/utils/rateLimiter.js +12 -1
  156. package/dist/src/utils/rateLimiter.js.map +1 -1
  157. package/dist/src/utils/regexValidator.d.ts +12 -0
  158. package/dist/src/utils/regexValidator.js +48 -0
  159. package/dist/src/utils/regexValidator.js.map +1 -0
  160. package/dist/src/utils/safeRegex.d.ts +2 -92
  161. package/dist/src/utils/safeRegex.js +41 -222
  162. package/dist/src/utils/safeRegex.js.map +1 -1
  163. package/dist/src/utils/safeRegexApi.d.ts +56 -0
  164. package/dist/src/utils/safeRegexApi.js +99 -0
  165. package/dist/src/utils/safeRegexApi.js.map +1 -0
  166. package/dist/src/utils/safeRegexPool.d.ts +7 -0
  167. package/dist/src/utils/safeRegexPool.js +102 -0
  168. package/dist/src/utils/safeRegexPool.js.map +1 -0
  169. package/dist/src/utils/searchTools.js +6 -6
  170. package/dist/src/utils/searchTools.js.map +1 -1
  171. package/dist/src/utils/streaming.d.ts +4 -3
  172. package/dist/src/utils/streaming.js +1 -1
  173. package/dist/src/utils/streaming.js.map +1 -1
  174. package/dist/src/utils/telemetry.d.ts +1 -1
  175. package/dist/src/utils/telemetry.js +1 -1
  176. package/dist/src/utils/toctou.d.ts +7 -0
  177. package/dist/src/utils/toctou.js +24 -0
  178. package/dist/src/utils/toctou.js.map +1 -0
  179. package/llms.txt +199 -31
  180. package/package.json +2 -2
  181. package/scripts/replace-version.js +0 -59
@@ -1,92 +1,6 @@
1
- /**
2
- * Read Operations - v3.6.2
3
- * FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern
4
- */
5
- import { BaseParser } from "../parsers/base.js";
6
- import { CacheManager } from "../core/cacheManager.js";
7
- export interface ReadResult {
8
- success: boolean;
9
- content?: string;
10
- symbols?: any[];
11
- error?: string;
12
- }
13
- /**
14
- * Extract a specific symbol from a file
15
- */
16
- export declare function extractSymbol(params: {
17
- filePath: string;
18
- projectRoot: string;
19
- symbolName: string;
20
- className?: string;
21
- parser: BaseParser;
22
- useCache?: boolean;
23
- cache?: CacheManager | null;
24
- }): Promise<ReadResult>;
25
- /**
26
- * Read specific line ranges from a file
27
- */
28
- export declare function readLines(params: {
29
- filePath: string;
30
- startLine?: number;
31
- endLine?: number;
32
- aroundPattern?: string;
33
- contextLines?: number;
34
- }): Promise<ReadResult>;
35
- /**
36
- * Search for code patterns across files
37
- */
38
- export declare function searchPattern(params: {
39
- rootDir: string;
40
- pattern: string;
41
- fileExtensions?: string[];
42
- excludeDirs?: string[];
43
- showContext?: boolean;
44
- contextLines?: number;
45
- maxResults?: number;
46
- startIndex?: number;
47
- fuzzyMatch?: boolean;
48
- fuzzyThreshold?: number;
49
- }): Promise<ReadResult>;
50
- /**
51
- * Analyze file dependencies (impact analysis)
52
- */
53
- export declare function analyzeImpact(params: {
54
- filePath: string;
55
- rootDir: string;
56
- }): Promise<ReadResult>;
57
- /**
58
- * NEW-02: Search symbols by name across the repo (AST-aware, not text search)
59
- */
60
- export declare function searchSymbols(params: {
61
- rootDir: string;
62
- query: string;
63
- projectRoot: string;
64
- fuzzy?: boolean;
65
- types?: string[];
66
- fileExtensions?: string[];
67
- excludeDirs?: string[];
68
- maxResults?: number;
69
- }): Promise<ReadResult>;
70
- /**
71
- * NEW-03: Explain a symbol — signature + callers + callees in one call
72
- */
73
- export declare function explainSymbol(params: {
74
- filePath: string;
75
- projectRoot: string;
76
- symbolName: string;
77
- className?: string;
78
- parser: BaseParser;
79
- rootDir: string;
80
- }): Promise<ReadResult>;
81
- /**
82
- * NEW-05: Batch read multiple symbols in one call
83
- */
84
- export declare function batchRead(params: {
85
- reads: Array<{
86
- filePath: string;
87
- symbolName: string;
88
- className?: string;
89
- }>;
90
- projectRoot: string;
91
- parser: (ext: string) => BaseParser | null;
92
- }): Promise<ReadResult>;
1
+ /** Read operations — barrel exports */
2
+ export type { ReadResult } from "./readCore.js";
3
+ export { extractSymbol, readLines } from "./readCore.js";
4
+ export { searchPattern } from "./searchOperation.js";
5
+ export { analyzeImpact } from "./impactAnalysis.js";
6
+ export { searchSymbols, explainSymbol, batchRead } from "./symbolQuery.js";
@@ -1,446 +1,5 @@
1
- /**
2
- * Read Operations - v3.6.2
3
- * FIXES: extractSymbol args, batch regex (worker_threads) in readLines/searchPattern
4
- */
5
- import * as fs from "node:fs/promises";
6
- import * as path from "node:path";
7
- import * as crypto from "node:crypto";
8
- import { EXCLUDE_DIRS, SUPPORTED_EXTENSIONS, MAX_FILES_SEARCH, OPERATION_TIMEOUT_MS } from "../utils/constants.js";
9
- import { safeRegexFindFirst, safeRegexMultiFileBatchTest, validateRegexPattern } from "../utils/safeRegex.js";
10
- import { walkDir } from "../utils/fileWalker.js";
11
- import { fuzzySearch } from "../utils/fuzzySearch.js";
12
- import { searchWithNativeTool } from "../utils/searchTools.js";
13
- const DEFAULT_MAX_RESULTS = 10; // Changed from 50 for pagination
14
- const SCAN_TIMEOUT_BASE_MS = 1000;
15
- const SCAN_TIMEOUT_PER_FILE_MS = 10;
16
- async function getFileHash(filePath) {
17
- const content = await fs.readFile(filePath, 'utf-8');
18
- return crypto.createHash('md5').update(content).digest('hex');
19
- }
20
- /**
21
- * Extract a specific symbol from a file
22
- */
23
- export async function extractSymbol(params) {
24
- try {
25
- const cache = params.cache;
26
- // Try cache first
27
- if (cache) {
28
- const hash = await getFileHash(params.filePath);
29
- const cached = await cache.get(params.filePath, hash);
30
- if (cached) {
31
- const symbol = cached.symbols.find(s => s.name === params.symbolName && (!params.className || s.className === params.className));
32
- if (symbol) {
33
- const content = await fs.readFile(params.filePath, "utf-8");
34
- const tree = params.parser.parse(content);
35
- const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
36
- if (extracted) {
37
- return { success: true, content: extracted };
38
- }
39
- }
40
- }
41
- }
42
- // Cache miss - parse file
43
- const content = await fs.readFile(params.filePath, "utf-8");
44
- const tree = params.parser.parse(content);
45
- const symbols = params.parser.findSymbols(tree);
46
- // Update cache
47
- if (cache) {
48
- const hash = await getFileHash(params.filePath);
49
- const stat = await fs.stat(params.filePath);
50
- await cache.set({
51
- filePath: params.filePath,
52
- hash,
53
- symbols,
54
- lastModified: stat.mtimeMs,
55
- cachedAt: Date.now(),
56
- });
57
- }
58
- const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
59
- if (!extracted) {
60
- const symbols = params.parser.findSymbols(tree);
61
- return {
62
- success: false,
63
- error: `Symbol "${params.symbolName}" not found. Available: ${symbols.map(s => s.name).join(", ")}`,
64
- symbols,
65
- };
66
- }
67
- return {
68
- success: true,
69
- content: extracted,
70
- };
71
- }
72
- catch (error) {
73
- return {
74
- success: false,
75
- error: error instanceof Error ? error.message : String(error),
76
- };
77
- }
78
- }
79
- /**
80
- * Read specific line ranges from a file
81
- */
82
- export async function readLines(params) {
83
- try {
84
- const content = await fs.readFile(params.filePath, "utf-8");
85
- const lines = content.split("\n");
86
- if (params.aroundPattern) {
87
- const validation = validateRegexPattern(params.aroundPattern);
88
- if (!validation.safe) {
89
- return {
90
- success: false,
91
- error: `Unsafe regex pattern: ${validation.issues.join(", ")}`,
92
- };
93
- }
94
- const regex = new RegExp(params.aroundPattern);
95
- const findResult = await safeRegexFindFirst(regex, lines);
96
- if (findResult.timedOut) {
97
- return {
98
- success: false,
99
- error: `Regex timed out searching for pattern (potential ReDoS)`,
100
- };
101
- }
102
- if (!findResult.success) {
103
- return { success: false, error: findResult.error };
104
- }
105
- const matchIndex = findResult.matchIndex;
106
- if (matchIndex === -1) {
107
- return {
108
- success: false,
109
- error: `Pattern "${params.aroundPattern}" not found`,
110
- };
111
- }
112
- const context = params.contextLines || 5;
113
- const start = Math.max(0, matchIndex - context);
114
- const end = Math.min(lines.length, matchIndex + context + 1);
115
- const matchLine = matchIndex + 1; // 1-indexed for display
116
- return {
117
- success: true,
118
- content: `Match found at line ${matchLine} (showing lines ${start + 1}-${end}):\n${lines.slice(start, end).join("\n")}`,
119
- };
120
- }
121
- if (params.startLine !== undefined && params.endLine !== undefined) {
122
- const start = params.startLine - 1;
123
- const end = params.endLine;
124
- if (start < 0 || end > lines.length) {
125
- return {
126
- success: false,
127
- error: `Invalid line range: ${params.startLine}-${params.endLine} (file has ${lines.length} lines)`,
128
- };
129
- }
130
- return {
131
- success: true,
132
- content: lines.slice(start, end).join("\n"),
133
- };
134
- }
135
- return {
136
- success: false,
137
- error: "Must provide either startLine+endLine or aroundPattern",
138
- };
139
- }
140
- catch (error) {
141
- return {
142
- success: false,
143
- error: error instanceof Error ? error.message : String(error),
144
- };
145
- }
146
- }
147
- /**
148
- * Search for code patterns across files
149
- */
150
- export async function searchPattern(params) {
151
- try {
152
- const maxResults = params.maxResults || DEFAULT_MAX_RESULTS;
153
- // Try native tools first (ripgrep > ugrep > ag > findstr/grep)
154
- const nativeResult = await searchWithNativeTool(params.pattern, params.rootDir, maxResults, 10000);
155
- if (nativeResult && !nativeResult.timedOut) {
156
- const startIdx = params.startIndex || 0;
157
- const paginatedMatches = nativeResult.matches.slice(startIdx, startIdx + maxResults);
158
- const results = paginatedMatches.map(m => ({
159
- file: m.file,
160
- line: m.line,
161
- content: m.content,
162
- }));
163
- const totalResults = nativeResult.matches.length;
164
- const hasMore = startIdx + maxResults < totalResults;
165
- const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results (via ${nativeResult.tool})${hasMore ? ' (use startIndex to see more)' : ''}`;
166
- return { success: true, content: JSON.stringify(results, null, 2) + footer };
167
- }
168
- // Fallback to regex-based search
169
- const validation = validateRegexPattern(params.pattern);
170
- if (!validation.safe) {
171
- return {
172
- success: false,
173
- error: `Unsafe regex pattern: ${validation.issues.join(", ")}`,
174
- };
175
- }
176
- const regex = new RegExp(params.pattern, "g");
177
- const extensions = params.fileExtensions || SUPPORTED_EXTENSIONS;
178
- const excludeDirs = params.excludeDirs || EXCLUDE_DIRS;
179
- // Step 1: Collect all files and their lines
180
- const fileEntries = [];
181
- await walkDir(params.rootDir, {
182
- extensions,
183
- excludeDirs,
184
- onFile: async (fullPath) => {
185
- const content = await fs.readFile(fullPath, "utf-8");
186
- fileEntries.push({ path: fullPath, lines: content.split("\n") });
187
- },
188
- });
189
- // CRITICAL: Prevent OOM in large monorepos
190
- if (fileEntries.length > MAX_FILES_SEARCH) {
191
- return {
192
- success: false,
193
- error: `Too many files to search (${fileEntries.length}). Maximum: ${MAX_FILES_SEARCH}. Try narrowing your search with fileExtensions or excludeDirs.`
194
- };
195
- }
196
- // Step 2: ONE worker for ALL files — eliminates N worker spawns
197
- const scanTimeout = Math.min(OPERATION_TIMEOUT_MS, SCAN_TIMEOUT_BASE_MS + fileEntries.length * SCAN_TIMEOUT_PER_FILE_MS);
198
- const batchResult = await safeRegexMultiFileBatchTest(regex, fileEntries, scanTimeout);
199
- if (batchResult.timedOut) {
200
- console.warn(`\u26a0\ufe0f Regex scan timed out across ${fileEntries.length} files`);
201
- return { success: false, error: `Regex scan timed out (${fileEntries.length} files, potential ReDoS)` };
202
- }
203
- if (!batchResult.success) {
204
- return { success: false, error: batchResult.error };
205
- }
206
- // Step 3: Collect results with pagination
207
- const startIdx = params.startIndex || 0;
208
- const maxRes = params.maxResults || DEFAULT_MAX_RESULTS;
209
- const allMatches = batchResult.results;
210
- // Apply fuzzy filtering if requested
211
- let filteredMatches = allMatches;
212
- if (params.fuzzyMatch) {
213
- const fuzzyThreshold = params.fuzzyThreshold ?? 0.4;
214
- const searchItems = allMatches.map(m => ({
215
- ...m,
216
- searchText: `${m.file} ${m.content}`,
217
- }));
218
- const fuzzyResults = fuzzySearch(searchItems, params.pattern, {
219
- threshold: fuzzyThreshold,
220
- keys: ['searchText'],
221
- });
222
- filteredMatches = fuzzyResults.map(r => r.item);
223
- }
224
- // Paginate results
225
- const paginatedMatches = filteredMatches.slice(startIdx, startIdx + maxRes);
226
- const results = paginatedMatches.map(match => ({
227
- file: match.file,
228
- line: match.index + 1,
229
- content: match.content,
230
- }));
231
- // Add pagination footer
232
- const totalResults = filteredMatches.length;
233
- const hasMore = startIdx + maxRes < totalResults;
234
- const footer = `\n\nShowing ${startIdx + 1}-${startIdx + results.length} of ${totalResults} results${hasMore ? ' (use startIndex to see more)' : ''}`;
235
- return {
236
- success: true,
237
- content: JSON.stringify(results, null, 2) + footer,
238
- };
239
- }
240
- catch (error) {
241
- return {
242
- success: false,
243
- error: error instanceof Error ? error.message : String(error),
244
- };
245
- }
246
- }
247
- /**
248
- * Analyze file dependencies (impact analysis)
249
- */
250
- export async function analyzeImpact(params) {
251
- try {
252
- const dependents = [];
253
- const targetFile = path.basename(params.filePath);
254
- await walkDir(params.rootDir, {
255
- extensions: SUPPORTED_EXTENSIONS,
256
- excludeDirs: EXCLUDE_DIRS,
257
- onFile: async (fullPath) => {
258
- const content = await fs.readFile(fullPath, "utf-8");
259
- // Check for imports/requires
260
- const importPatterns = [
261
- new RegExp(`import.*from.*['"].*${targetFile.replace(/\.[^.]+$/, "")}`, "g"),
262
- new RegExp(`require\\(['"].*${targetFile}`, "g"),
263
- new RegExp(`from.*${targetFile.replace(/\.[^.]+$/, "")}.*import`, "g"),
264
- ];
265
- if (importPatterns.some(pattern => pattern.test(content))) {
266
- dependents.push(fullPath);
267
- }
268
- },
269
- });
270
- return {
271
- success: true,
272
- content: JSON.stringify({ file: params.filePath, dependents }, null, 2),
273
- };
274
- }
275
- catch (error) {
276
- return {
277
- success: false,
278
- error: error instanceof Error ? error.message : String(error),
279
- };
280
- }
281
- }
282
- /**
283
- * NEW-02: Search symbols by name across the repo (AST-aware, not text search)
284
- */
285
- export async function searchSymbols(params) {
286
- try {
287
- const { ParserRegistry } = await import('../parsers/registry.js');
288
- const { CodeContextEngine } = await import('../core/engine.js');
289
- const engine = new CodeContextEngine();
290
- await engine.init();
291
- const registry = new ParserRegistry(engine);
292
- await registry.init();
293
- const extensions = params.fileExtensions || SUPPORTED_EXTENSIONS;
294
- const excludeDirs = params.excludeDirs || EXCLUDE_DIRS;
295
- const maxResults = params.maxResults || 20;
296
- const results = [];
297
- await walkDir(params.rootDir, {
298
- extensions,
299
- excludeDirs,
300
- onFile: async (fullPath) => {
301
- if (results.length >= maxResults * 3)
302
- return; // over-collect for fuzzy filtering
303
- const ext = path.extname(fullPath);
304
- const parser = registry.getParser(ext);
305
- if (!parser)
306
- return;
307
- const content = await fs.readFile(fullPath, 'utf-8');
308
- const tree = parser.parse(content);
309
- const symbols = parser.findSymbols(tree);
310
- for (const sym of symbols) {
311
- if (params.types && params.types.length > 0 && !params.types.includes(sym.type))
312
- continue;
313
- results.push({
314
- name: sym.name,
315
- type: sym.type,
316
- file: fullPath,
317
- startLine: sym.startLine,
318
- endLine: sym.endLine,
319
- className: sym.className,
320
- });
321
- }
322
- },
323
- });
324
- // Filter by query
325
- let filtered = results;
326
- if (params.fuzzy) {
327
- const fuzzyResults = fuzzySearch(results, params.query, {
328
- threshold: 0.4,
329
- keys: ['name'],
330
- });
331
- filtered = fuzzyResults.map(r => r.item);
332
- }
333
- else {
334
- const q = params.query.toLowerCase();
335
- filtered = results.filter(r => r.name.toLowerCase().includes(q));
336
- }
337
- const paginated = filtered.slice(0, maxResults);
338
- const hasMore = filtered.length > maxResults;
339
- const footer = `\n\nShowing ${paginated.length} of ${filtered.length} symbols${hasMore ? ' (increase maxResults to see more)' : ''}`;
340
- return {
341
- success: true,
342
- content: JSON.stringify(paginated, null, 2) + footer,
343
- };
344
- }
345
- catch (error) {
346
- return {
347
- success: false,
348
- error: error instanceof Error ? error.message : String(error),
349
- };
350
- }
351
- }
352
- /**
353
- * NEW-03: Explain a symbol — signature + callers + callees in one call
354
- */
355
- export async function explainSymbol(params) {
356
- try {
357
- const content = await fs.readFile(params.filePath, 'utf-8');
358
- const tree = params.parser.parse(content);
359
- const symbols = params.parser.findSymbols(tree);
360
- const sym = symbols.find(s => s.name === params.symbolName && (!params.className || s.className === params.className));
361
- if (!sym) {
362
- return {
363
- success: false,
364
- error: `Symbol "${params.symbolName}" not found. Available: ${symbols.map(s => s.name).join(', ')}`,
365
- };
366
- }
367
- const extracted = params.parser.extractSymbol(tree, params.symbolName, params.className);
368
- // Extract signature (first line of the symbol)
369
- const signature = extracted ? extracted.split('\n')[0].trim() : '';
370
- // Find callers (files that reference this symbol name)
371
- const callers = [];
372
- await walkDir(params.rootDir, {
373
- extensions: SUPPORTED_EXTENSIONS,
374
- excludeDirs: EXCLUDE_DIRS,
375
- onFile: async (fullPath) => {
376
- if (fullPath === params.filePath)
377
- return;
378
- const c = await fs.readFile(fullPath, 'utf-8');
379
- if (c.includes(params.symbolName))
380
- callers.push(fullPath);
381
- },
382
- });
383
- const result = {
384
- name: sym.name,
385
- type: sym.type,
386
- className: sym.className,
387
- signature,
388
- startLine: sym.startLine,
389
- endLine: sym.endLine,
390
- file: params.filePath,
391
- callers: callers.slice(0, 10), // cap at 10
392
- callerCount: callers.length,
393
- };
394
- return {
395
- success: true,
396
- content: JSON.stringify(result, null, 2),
397
- };
398
- }
399
- catch (error) {
400
- return {
401
- success: false,
402
- error: error instanceof Error ? error.message : String(error),
403
- };
404
- }
405
- }
406
- /**
407
- * NEW-05: Batch read multiple symbols in one call
408
- */
409
- export async function batchRead(params) {
410
- try {
411
- const results = [];
412
- for (const read of params.reads) {
413
- const ext = path.extname(read.filePath);
414
- const parser = params.parser(ext);
415
- if (!parser) {
416
- results.push({ ...read, error: `No parser for ${ext}` });
417
- continue;
418
- }
419
- const r = await extractSymbol({
420
- filePath: read.filePath,
421
- projectRoot: params.projectRoot,
422
- symbolName: read.symbolName,
423
- className: read.className,
424
- parser,
425
- });
426
- results.push({
427
- filePath: read.filePath,
428
- symbolName: read.symbolName,
429
- className: read.className,
430
- content: r.content,
431
- error: r.error,
432
- });
433
- }
434
- return {
435
- success: true,
436
- content: JSON.stringify(results, null, 2),
437
- };
438
- }
439
- catch (error) {
440
- return {
441
- success: false,
442
- error: error instanceof Error ? error.message : String(error),
443
- };
444
- }
445
- }
1
+ export { extractSymbol, readLines } from "./readCore.js";
2
+ export { searchPattern } from "./searchOperation.js";
3
+ export { analyzeImpact } from "./impactAnalysis.js";
4
+ export { searchSymbols, explainSymbol, batchRead } from "./symbolQuery.js";
446
5
  //# sourceMappingURL=read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/operations/read.ts"],"names":[],"mappings":"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"}
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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Read core — extractSymbol and readLines
3
+ */
4
+ import { BaseParser } from "../parsers/base.js";
5
+ import { CacheManager } from "../core/cacheManager.js";
6
+ export interface ReadResult {
7
+ success: boolean;
8
+ content?: string;
9
+ symbols?: unknown[];
10
+ error?: string;
11
+ }
12
+ /**
13
+ * Extract a specific symbol from a file
14
+ */
15
+ export declare function extractSymbol(params: {
16
+ filePath: string;
17
+ projectRoot: string;
18
+ symbolName: string;
19
+ className?: string;
20
+ parser: BaseParser;
21
+ useCache?: boolean;
22
+ cache?: CacheManager | null;
23
+ }): Promise<ReadResult>;
24
+ /**
25
+ * Read specific line ranges from a file
26
+ */
27
+ export declare function readLines(params: {
28
+ filePath: string;
29
+ startLine?: number;
30
+ endLine?: number;
31
+ aroundPattern?: string;
32
+ contextLines?: number;
33
+ }): Promise<ReadResult>;