codesift-mcp 0.1.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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -0
  3. package/dist/cli/args.d.ts +13 -0
  4. package/dist/cli/args.d.ts.map +1 -0
  5. package/dist/cli/args.js +79 -0
  6. package/dist/cli/args.js.map +1 -0
  7. package/dist/cli/commands.d.ts +4 -0
  8. package/dist/cli/commands.d.ts.map +1 -0
  9. package/dist/cli/commands.js +336 -0
  10. package/dist/cli/commands.js.map +1 -0
  11. package/dist/cli/help.d.ts +3 -0
  12. package/dist/cli/help.d.ts.map +1 -0
  13. package/dist/cli/help.js +271 -0
  14. package/dist/cli/help.js.map +1 -0
  15. package/dist/cli.d.ts +3 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +80 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +23 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +49 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/parser/extractors/go.d.ts +4 -0
  24. package/dist/parser/extractors/go.d.ts.map +1 -0
  25. package/dist/parser/extractors/go.js +185 -0
  26. package/dist/parser/extractors/go.js.map +1 -0
  27. package/dist/parser/extractors/javascript.d.ts +9 -0
  28. package/dist/parser/extractors/javascript.d.ts.map +1 -0
  29. package/dist/parser/extractors/javascript.js +10 -0
  30. package/dist/parser/extractors/javascript.js.map +1 -0
  31. package/dist/parser/extractors/markdown.d.ts +15 -0
  32. package/dist/parser/extractors/markdown.d.ts.map +1 -0
  33. package/dist/parser/extractors/markdown.js +217 -0
  34. package/dist/parser/extractors/markdown.js.map +1 -0
  35. package/dist/parser/extractors/prisma.d.ts +17 -0
  36. package/dist/parser/extractors/prisma.d.ts.map +1 -0
  37. package/dist/parser/extractors/prisma.js +121 -0
  38. package/dist/parser/extractors/prisma.js.map +1 -0
  39. package/dist/parser/extractors/python.d.ts +4 -0
  40. package/dist/parser/extractors/python.d.ts.map +1 -0
  41. package/dist/parser/extractors/python.js +203 -0
  42. package/dist/parser/extractors/python.js.map +1 -0
  43. package/dist/parser/extractors/rust.d.ts +4 -0
  44. package/dist/parser/extractors/rust.d.ts.map +1 -0
  45. package/dist/parser/extractors/rust.js +178 -0
  46. package/dist/parser/extractors/rust.js.map +1 -0
  47. package/dist/parser/extractors/typescript.d.ts +4 -0
  48. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  49. package/dist/parser/extractors/typescript.js +296 -0
  50. package/dist/parser/extractors/typescript.js.map +1 -0
  51. package/dist/parser/languages/tree-sitter-css.wasm +0 -0
  52. package/dist/parser/languages/tree-sitter-go.wasm +0 -0
  53. package/dist/parser/languages/tree-sitter-java.wasm +0 -0
  54. package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
  55. package/dist/parser/languages/tree-sitter-json.wasm +0 -0
  56. package/dist/parser/languages/tree-sitter-php.wasm +0 -0
  57. package/dist/parser/languages/tree-sitter-python.wasm +0 -0
  58. package/dist/parser/languages/tree-sitter-ruby.wasm +0 -0
  59. package/dist/parser/languages/tree-sitter-rust.wasm +0 -0
  60. package/dist/parser/languages/tree-sitter-tsx.wasm +0 -0
  61. package/dist/parser/languages/tree-sitter-typescript.wasm +0 -0
  62. package/dist/parser/parser-manager.d.ts +6 -0
  63. package/dist/parser/parser-manager.d.ts.map +1 -0
  64. package/dist/parser/parser-manager.js +60 -0
  65. package/dist/parser/parser-manager.js.map +1 -0
  66. package/dist/parser/symbol-extractor.d.ts +22 -0
  67. package/dist/parser/symbol-extractor.d.ts.map +1 -0
  68. package/dist/parser/symbol-extractor.js +115 -0
  69. package/dist/parser/symbol-extractor.js.map +1 -0
  70. package/dist/retrieval/codebase-retrieval.d.ts +27 -0
  71. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -0
  72. package/dist/retrieval/codebase-retrieval.js +472 -0
  73. package/dist/retrieval/codebase-retrieval.js.map +1 -0
  74. package/dist/search/bm25.d.ts +22 -0
  75. package/dist/search/bm25.d.ts.map +1 -0
  76. package/dist/search/bm25.js +179 -0
  77. package/dist/search/bm25.js.map +1 -0
  78. package/dist/search/chunker.d.ts +9 -0
  79. package/dist/search/chunker.d.ts.map +1 -0
  80. package/dist/search/chunker.js +91 -0
  81. package/dist/search/chunker.js.map +1 -0
  82. package/dist/search/hybrid.d.ts +16 -0
  83. package/dist/search/hybrid.d.ts.map +1 -0
  84. package/dist/search/hybrid.js +51 -0
  85. package/dist/search/hybrid.js.map +1 -0
  86. package/dist/search/semantic.d.ts +44 -0
  87. package/dist/search/semantic.d.ts.map +1 -0
  88. package/dist/search/semantic.js +194 -0
  89. package/dist/search/semantic.js.map +1 -0
  90. package/dist/server.d.ts +2 -0
  91. package/dist/server.d.ts.map +1 -0
  92. package/dist/server.js +285 -0
  93. package/dist/server.js.map +1 -0
  94. package/dist/storage/chunk-store.d.ts +32 -0
  95. package/dist/storage/chunk-store.d.ts.map +1 -0
  96. package/dist/storage/chunk-store.js +144 -0
  97. package/dist/storage/chunk-store.js.map +1 -0
  98. package/dist/storage/embedding-store.d.ts +41 -0
  99. package/dist/storage/embedding-store.d.ts.map +1 -0
  100. package/dist/storage/embedding-store.js +149 -0
  101. package/dist/storage/embedding-store.js.map +1 -0
  102. package/dist/storage/index-store.d.ts +23 -0
  103. package/dist/storage/index-store.d.ts.map +1 -0
  104. package/dist/storage/index-store.js +95 -0
  105. package/dist/storage/index-store.js.map +1 -0
  106. package/dist/storage/registry.d.ts +35 -0
  107. package/dist/storage/registry.d.ts.map +1 -0
  108. package/dist/storage/registry.js +99 -0
  109. package/dist/storage/registry.js.map +1 -0
  110. package/dist/storage/usage-stats.d.ts +32 -0
  111. package/dist/storage/usage-stats.d.ts.map +1 -0
  112. package/dist/storage/usage-stats.js +180 -0
  113. package/dist/storage/usage-stats.js.map +1 -0
  114. package/dist/storage/usage-tracker.d.ts +35 -0
  115. package/dist/storage/usage-tracker.d.ts.map +1 -0
  116. package/dist/storage/usage-tracker.js +245 -0
  117. package/dist/storage/usage-tracker.js.map +1 -0
  118. package/dist/storage/watcher.d.ts +12 -0
  119. package/dist/storage/watcher.d.ts.map +1 -0
  120. package/dist/storage/watcher.js +66 -0
  121. package/dist/storage/watcher.js.map +1 -0
  122. package/dist/tools/context-tools.d.ts +31 -0
  123. package/dist/tools/context-tools.d.ts.map +1 -0
  124. package/dist/tools/context-tools.js +219 -0
  125. package/dist/tools/context-tools.js.map +1 -0
  126. package/dist/tools/diff-tools.d.ts +22 -0
  127. package/dist/tools/diff-tools.d.ts.map +1 -0
  128. package/dist/tools/diff-tools.js +165 -0
  129. package/dist/tools/diff-tools.js.map +1 -0
  130. package/dist/tools/generate-tools.d.ts +11 -0
  131. package/dist/tools/generate-tools.d.ts.map +1 -0
  132. package/dist/tools/generate-tools.js +135 -0
  133. package/dist/tools/generate-tools.js.map +1 -0
  134. package/dist/tools/graph-tools.d.ts +60 -0
  135. package/dist/tools/graph-tools.d.ts.map +1 -0
  136. package/dist/tools/graph-tools.js +313 -0
  137. package/dist/tools/graph-tools.js.map +1 -0
  138. package/dist/tools/index-tools.d.ts +39 -0
  139. package/dist/tools/index-tools.d.ts.map +1 -0
  140. package/dist/tools/index-tools.js +451 -0
  141. package/dist/tools/index-tools.js.map +1 -0
  142. package/dist/tools/outline-tools.d.ts +59 -0
  143. package/dist/tools/outline-tools.d.ts.map +1 -0
  144. package/dist/tools/outline-tools.js +342 -0
  145. package/dist/tools/outline-tools.js.map +1 -0
  146. package/dist/tools/search-tools.d.ts +29 -0
  147. package/dist/tools/search-tools.d.ts.map +1 -0
  148. package/dist/tools/search-tools.js +309 -0
  149. package/dist/tools/search-tools.js.map +1 -0
  150. package/dist/tools/symbol-tools.d.ts +24 -0
  151. package/dist/tools/symbol-tools.d.ts.map +1 -0
  152. package/dist/tools/symbol-tools.js +172 -0
  153. package/dist/tools/symbol-tools.js.map +1 -0
  154. package/dist/types.d.ts +91 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +3 -0
  157. package/dist/types.js.map +1 -0
  158. package/dist/utils/git-validation.d.ts +11 -0
  159. package/dist/utils/git-validation.d.ts.map +1 -0
  160. package/dist/utils/git-validation.js +19 -0
  161. package/dist/utils/git-validation.js.map +1 -0
  162. package/dist/utils/test-file.d.ts +11 -0
  163. package/dist/utils/test-file.d.ts.map +1 -0
  164. package/dist/utils/test-file.js +27 -0
  165. package/dist/utils/test-file.js.map +1 -0
  166. package/package.json +62 -0
  167. package/src/parser/languages/tree-sitter-css.wasm +0 -0
  168. package/src/parser/languages/tree-sitter-go.wasm +0 -0
  169. package/src/parser/languages/tree-sitter-java.wasm +0 -0
  170. package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
  171. package/src/parser/languages/tree-sitter-json.wasm +0 -0
  172. package/src/parser/languages/tree-sitter-php.wasm +0 -0
  173. package/src/parser/languages/tree-sitter-python.wasm +0 -0
  174. package/src/parser/languages/tree-sitter-ruby.wasm +0 -0
  175. package/src/parser/languages/tree-sitter-rust.wasm +0 -0
  176. package/src/parser/languages/tree-sitter-tsx.wasm +0 -0
  177. package/src/parser/languages/tree-sitter-typescript.wasm +0 -0
@@ -0,0 +1,309 @@
1
+ import { readFile, readdir, stat } from "node:fs/promises";
2
+ import { join, relative, extname } from "node:path";
3
+ import { getBM25Index, getCodeIndex } from "./index-tools.js";
4
+ import { searchBM25 } from "../search/bm25.js";
5
+ import { loadConfig } from "../config.js";
6
+ const DEFAULT_MAX_TEXT_MATCHES = 500;
7
+ const MAX_FILE_SIZE = 1_000_000; // 1MB — skip giant files
8
+ const MAX_WALK_FILES = 50_000; // Safety limit — stop walking after this many files
9
+ /** Directories to skip during text search file walk */
10
+ const IGNORE_DIRS = new Set([
11
+ "node_modules", ".git", "dist", "build", "coverage",
12
+ ".codesift", ".next", "__pycache__", ".pytest_cache",
13
+ ".venv", "venv", ".tox", ".mypy_cache", ".turbo",
14
+ "generated", "audit-results", ".backup", "jscpd-report",
15
+ ]);
16
+ /** Binary/non-text extensions to skip during text search */
17
+ const BINARY_EXTENSIONS = new Set([
18
+ ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".ico", ".svg",
19
+ ".woff", ".woff2", ".ttf", ".eot", ".otf",
20
+ ".zip", ".gz", ".tar", ".bz2", ".7z", ".rar",
21
+ ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx",
22
+ ".exe", ".dll", ".so", ".dylib", ".o", ".obj",
23
+ ".wasm", ".class", ".pyc", ".pyo",
24
+ ".mp3", ".mp4", ".avi", ".mov", ".mkv", ".wav", ".flac",
25
+ ".db", ".sqlite", ".sqlite3",
26
+ ".lock",
27
+ ]);
28
+ /**
29
+ * Match a file path against a simple glob pattern.
30
+ * Supports: "*.ts", "src/*.ts", "src/**\/*.ts", "**\/*.test.ts"
31
+ */
32
+ function matchFilePattern(filePath, pattern) {
33
+ // Exact match
34
+ if (filePath === pattern)
35
+ return true;
36
+ // "**\/" prefix — match anywhere in path
37
+ if (pattern.startsWith("**/")) {
38
+ const suffix = pattern.slice(3);
39
+ // Recursively match the suffix against every segment tail
40
+ return matchFilePattern(filePath, suffix) ||
41
+ filePath.includes("/" + suffix) ||
42
+ matchFileSuffix(filePath, suffix);
43
+ }
44
+ // "*" at the start — match extension-style patterns like "*.ts"
45
+ if (pattern.startsWith("*") && !pattern.includes("/")) {
46
+ const suffix = pattern.slice(1);
47
+ return filePath.endsWith(suffix);
48
+ }
49
+ // "dir/**" — match everything under directory (e.g., "src/**")
50
+ if (pattern.endsWith("/**")) {
51
+ const prefix = pattern.slice(0, -3);
52
+ return filePath.startsWith(prefix + "/") || filePath === prefix;
53
+ }
54
+ // Pattern with "**" in the middle (e.g., "src/**/*.ts")
55
+ if (pattern.includes("/**/")) {
56
+ const [prefix, suffix] = splitFirst(pattern, "/**/");
57
+ if (!filePath.startsWith(prefix + "/") && filePath !== prefix)
58
+ return false;
59
+ const rest = filePath.slice(prefix.length + 1);
60
+ return matchFilePattern(rest, suffix) ||
61
+ matchFilePattern(rest, "**/" + suffix);
62
+ }
63
+ // Simple directory prefix + filename pattern (e.g., "src/*.ts")
64
+ if (pattern.includes("/") && pattern.includes("*")) {
65
+ const lastSlash = pattern.lastIndexOf("/");
66
+ const dirPart = pattern.slice(0, lastSlash);
67
+ const filePart = pattern.slice(lastSlash + 1);
68
+ const fileLastSlash = filePath.lastIndexOf("/");
69
+ const fileDir = fileLastSlash >= 0 ? filePath.slice(0, fileLastSlash) : "";
70
+ const fileName = fileLastSlash >= 0 ? filePath.slice(fileLastSlash + 1) : filePath;
71
+ if (fileDir !== dirPart)
72
+ return false;
73
+ return matchFilePattern(fileName, filePart);
74
+ }
75
+ // No wildcards: substring match on the full path
76
+ // "risk.service.ts" matches "src/lib/services/risk/risk.service.ts"
77
+ // "validators" matches "src/lib/validators/schema.ts"
78
+ if (!pattern.includes("*")) {
79
+ return filePath.includes(pattern);
80
+ }
81
+ return false;
82
+ }
83
+ function matchFileSuffix(filePath, suffix) {
84
+ if (suffix.startsWith("*")) {
85
+ const ext = suffix.slice(1);
86
+ return filePath.endsWith(ext);
87
+ }
88
+ return filePath.endsWith("/" + suffix) || filePath === suffix;
89
+ }
90
+ function splitFirst(str, sep) {
91
+ const idx = str.indexOf(sep);
92
+ if (idx < 0)
93
+ return [str, ""];
94
+ return [str.slice(0, idx), str.slice(idx + sep.length)];
95
+ }
96
+ /**
97
+ * Walk a directory tree collecting all text files.
98
+ * Returns relative paths from rootPath.
99
+ * Unlike the index walk, this includes ALL text files (not just parseable ones).
100
+ */
101
+ async function walkAllTextFiles(rootPath) {
102
+ const files = [];
103
+ let limitReached = false;
104
+ async function walk(dirPath) {
105
+ if (limitReached)
106
+ return;
107
+ let entries;
108
+ try {
109
+ entries = await readdir(dirPath, { withFileTypes: true });
110
+ }
111
+ catch {
112
+ return; // permission denied, etc.
113
+ }
114
+ for (const entry of entries) {
115
+ if (limitReached)
116
+ return;
117
+ const fullPath = join(dirPath, entry.name);
118
+ if (entry.isDirectory()) {
119
+ if (IGNORE_DIRS.has(entry.name) || entry.name.startsWith(".")) {
120
+ continue;
121
+ }
122
+ await walk(fullPath);
123
+ }
124
+ else if (entry.isFile()) {
125
+ const ext = extname(entry.name);
126
+ // Skip binary files
127
+ if (BINARY_EXTENSIONS.has(ext))
128
+ continue;
129
+ // Skip files that are too large
130
+ try {
131
+ const fileStat = await stat(fullPath);
132
+ if (fileStat.size > MAX_FILE_SIZE)
133
+ continue;
134
+ }
135
+ catch {
136
+ continue;
137
+ }
138
+ files.push(relative(rootPath, fullPath));
139
+ if (files.length >= MAX_WALK_FILES) {
140
+ console.warn(`[codesift] walkAllTextFiles: reached ${MAX_WALK_FILES} file limit, returning partial results`);
141
+ limitReached = true;
142
+ return;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ await walk(rootPath);
148
+ return files;
149
+ }
150
+ /**
151
+ * Search symbols by name/signature/docstring using BM25 ranking.
152
+ * Supports filtering by symbol kind and file pattern.
153
+ *
154
+ * When query is empty, returns all symbols matching the filters (up to top_k).
155
+ * When kind or file_pattern filters are active, BM25 searches a wider candidate
156
+ * set to avoid post-filter truncation.
157
+ */
158
+ export async function searchSymbols(repo, query, options) {
159
+ const index = await getBM25Index(repo);
160
+ if (!index) {
161
+ throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
162
+ }
163
+ const config = loadConfig();
164
+ const topK = options?.top_k ?? config.defaultTopK;
165
+ const includeSource = options?.include_source ?? true;
166
+ const hasKindFilter = !!options?.kind;
167
+ const hasFileFilter = !!options?.file_pattern;
168
+ const hasFilters = hasKindFilter || hasFileFilter;
169
+ let results;
170
+ if (!query.trim()) {
171
+ // Empty query: return all symbols matching filters (no BM25 scoring)
172
+ const allSymbols = [...index.symbols.values()];
173
+ let filtered = allSymbols;
174
+ if (hasKindFilter) {
175
+ const kind = options.kind;
176
+ filtered = filtered.filter((s) => s.kind === kind);
177
+ }
178
+ if (hasFileFilter) {
179
+ const pattern = options.file_pattern;
180
+ filtered = filtered.filter((s) => matchFilePattern(s.file, pattern));
181
+ }
182
+ results = filtered.slice(0, topK).map((symbol) => ({
183
+ symbol,
184
+ score: 0,
185
+ }));
186
+ }
187
+ else {
188
+ // When filters are active, search a wider candidate set from BM25
189
+ // so that post-filter truncation doesn't lose relevant results.
190
+ const searchTopK = hasFilters ? Math.max(topK * 5, 200) : topK;
191
+ results = searchBM25(index, query, searchTopK, config.bm25FieldWeights);
192
+ // Filter by symbol kind
193
+ if (hasKindFilter) {
194
+ const kind = options.kind;
195
+ results = results.filter((r) => r.symbol.kind === kind);
196
+ }
197
+ // Filter by file pattern
198
+ if (hasFileFilter) {
199
+ const pattern = options.file_pattern;
200
+ results = results.filter((r) => matchFilePattern(r.symbol.file, pattern));
201
+ }
202
+ // Re-truncate to requested top_k after filtering
203
+ results = results.slice(0, topK);
204
+ }
205
+ // Strip source if not requested
206
+ if (!includeSource) {
207
+ results = results.map((r) => {
208
+ const { source: _source, ...symbolWithoutSource } = r.symbol;
209
+ return { ...r, symbol: symbolWithoutSource };
210
+ });
211
+ }
212
+ // Truncate source to source_chars limit (default 500 when include_source=true)
213
+ const sourceChars = options?.source_chars ?? (includeSource ? 500 : undefined);
214
+ if (includeSource && sourceChars !== undefined && sourceChars > 0) {
215
+ results = results.map((r) => {
216
+ const source = r.symbol.source;
217
+ if (source && source.length > sourceChars) {
218
+ return {
219
+ ...r,
220
+ symbol: { ...r.symbol, source: source.slice(0, sourceChars) + "..." },
221
+ };
222
+ }
223
+ return r;
224
+ });
225
+ }
226
+ return results;
227
+ }
228
+ /**
229
+ * Full-text search across all files in a repository.
230
+ * Walks the filesystem to search ALL text files, not just indexed ones.
231
+ */
232
+ export async function searchText(repo, query, options) {
233
+ const index = await getCodeIndex(repo);
234
+ if (!index) {
235
+ throw new Error(`Repository "${repo}" not found. Run index_folder first.`);
236
+ }
237
+ const contextLines = options?.context_lines ?? 2;
238
+ const useRegex = options?.regex ?? false;
239
+ const filePattern = options?.file_pattern;
240
+ const maxResults = options?.max_results ?? DEFAULT_MAX_TEXT_MATCHES;
241
+ let regex = null;
242
+ if (useRegex) {
243
+ try {
244
+ regex = new RegExp(query);
245
+ }
246
+ catch (err) {
247
+ const message = err instanceof Error ? err.message : String(err);
248
+ throw new Error(`Invalid regex pattern: ${message}`);
249
+ }
250
+ }
251
+ // Walk the filesystem to find ALL text files (not just indexed/parseable ones)
252
+ const allFiles = await walkAllTextFiles(index.root);
253
+ const matches = [];
254
+ for (const filePath of allFiles) {
255
+ if (matches.length >= maxResults)
256
+ break;
257
+ // Filter by file pattern
258
+ if (filePattern && !matchFilePattern(filePath, filePattern)) {
259
+ continue;
260
+ }
261
+ const fullPath = join(index.root, filePath);
262
+ let content;
263
+ try {
264
+ content = await readFile(fullPath, "utf-8");
265
+ }
266
+ catch {
267
+ continue; // File may have been deleted or moved
268
+ }
269
+ const lines = content.split("\n");
270
+ for (let i = 0; i < lines.length; i++) {
271
+ if (matches.length >= maxResults)
272
+ break;
273
+ const line = lines[i];
274
+ if (line === undefined)
275
+ continue;
276
+ const isMatch = regex ? regex.test(line) : line.includes(query);
277
+ if (!isMatch)
278
+ continue;
279
+ const contextBefore = [];
280
+ const contextAfter = [];
281
+ for (let j = Math.max(0, i - contextLines); j < i; j++) {
282
+ const ctxLine = lines[j];
283
+ if (ctxLine !== undefined) {
284
+ contextBefore.push(ctxLine);
285
+ }
286
+ }
287
+ for (let j = i + 1; j <= Math.min(lines.length - 1, i + contextLines); j++) {
288
+ const ctxLine = lines[j];
289
+ if (ctxLine !== undefined) {
290
+ contextAfter.push(ctxLine);
291
+ }
292
+ }
293
+ const match = {
294
+ file: filePath,
295
+ line: i + 1, // 1-based
296
+ content: line,
297
+ };
298
+ if (contextBefore.length > 0) {
299
+ match.context_before = contextBefore;
300
+ }
301
+ if (contextAfter.length > 0) {
302
+ match.context_after = contextAfter;
303
+ }
304
+ matches.push(match);
305
+ }
306
+ }
307
+ return matches;
308
+ }
309
+ //# sourceMappingURL=search-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools.js","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CodeSymbol, Reference } from "../types.js";
2
+ /**
3
+ * Retrieve a single symbol by ID with fresh source from disk.
4
+ */
5
+ export declare function getSymbol(repo: string, symbolId: string): Promise<CodeSymbol | null>;
6
+ /**
7
+ * Retrieve multiple symbols by ID with fresh source from disk.
8
+ * Groups reads by file to minimize disk I/O.
9
+ */
10
+ export declare function getSymbols(repo: string, symbolIds: string[]): Promise<CodeSymbol[]>;
11
+ /**
12
+ * Find references to a symbol name across indexed files.
13
+ * Matches whole words only using word-boundary regex.
14
+ */
15
+ export declare function findReferences(repo: string, symbolName: string, filePattern?: string): Promise<Reference[]>;
16
+ /**
17
+ * Search for a symbol by query and return it with full source.
18
+ * Optionally includes references across the codebase.
19
+ */
20
+ export declare function findAndShow(repo: string, query: string, includeRefs?: boolean): Promise<{
21
+ symbol: CodeSymbol;
22
+ references?: Reference[];
23
+ } | null>;
24
+ //# sourceMappingURL=symbol-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-tools.d.ts","sourceRoot":"","sources":["../../src/tools/symbol-tools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwBzD;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAqB5B;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CA0DvB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,EAAE,CAAC,CAmDtB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAqBlE"}
@@ -0,0 +1,172 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { searchBM25 } from "../search/bm25.js";
4
+ import { loadConfig } from "../config.js";
5
+ import { getCodeIndex, getBM25Index } from "./index-tools.js";
6
+ const MAX_REFERENCES = 200;
7
+ const MAX_CONTEXT_LENGTH = 200; // Truncate context lines to prevent huge output from minified files
8
+ /**
9
+ * Read a source file and extract lines for a symbol (1-based, inclusive).
10
+ * Returns undefined if the file cannot be read.
11
+ */
12
+ async function extractSource(repoRoot, file, startLine, endLine) {
13
+ try {
14
+ const content = await readFile(join(repoRoot, file), "utf-8");
15
+ const lines = content.split("\n");
16
+ return lines.slice(startLine - 1, endLine).join("\n");
17
+ }
18
+ catch {
19
+ return undefined;
20
+ }
21
+ }
22
+ /**
23
+ * Retrieve a single symbol by ID with fresh source from disk.
24
+ */
25
+ export async function getSymbol(repo, symbolId) {
26
+ const index = await getCodeIndex(repo);
27
+ if (!index) {
28
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
29
+ }
30
+ const symbol = index.symbols.find((s) => s.id === symbolId);
31
+ if (!symbol)
32
+ return null;
33
+ const source = await extractSource(index.root, symbol.file, symbol.start_line, symbol.end_line);
34
+ const result = { ...symbol };
35
+ if (source !== undefined) {
36
+ result.source = source;
37
+ }
38
+ return result;
39
+ }
40
+ /**
41
+ * Retrieve multiple symbols by ID with fresh source from disk.
42
+ * Groups reads by file to minimize disk I/O.
43
+ */
44
+ export async function getSymbols(repo, symbolIds) {
45
+ const index = await getCodeIndex(repo);
46
+ if (!index) {
47
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
48
+ }
49
+ // Build lookup map for requested symbols
50
+ const symbolMap = new Map();
51
+ for (const sym of index.symbols) {
52
+ if (symbolIds.includes(sym.id)) {
53
+ symbolMap.set(sym.id, sym);
54
+ }
55
+ }
56
+ // Group symbols by file to read each file only once
57
+ const byFile = new Map();
58
+ for (const id of symbolIds) {
59
+ const sym = symbolMap.get(id);
60
+ if (!sym)
61
+ continue;
62
+ let group = byFile.get(sym.file);
63
+ if (!group) {
64
+ group = [];
65
+ byFile.set(sym.file, group);
66
+ }
67
+ group.push(sym);
68
+ }
69
+ // Read each file once, extract source for all symbols in that file
70
+ const results = new Map();
71
+ for (const [file, symbols] of byFile) {
72
+ let fileContent;
73
+ try {
74
+ fileContent = await readFile(join(index.root, file), "utf-8");
75
+ }
76
+ catch {
77
+ // File may have been deleted since indexing
78
+ }
79
+ const lines = fileContent?.split("\n");
80
+ for (const sym of symbols) {
81
+ const result = { ...sym };
82
+ if (lines) {
83
+ result.source = lines.slice(sym.start_line - 1, sym.end_line).join("\n");
84
+ }
85
+ results.set(sym.id, result);
86
+ }
87
+ }
88
+ // Return in the same order as requested, skipping missing IDs
89
+ const ordered = [];
90
+ for (const id of symbolIds) {
91
+ const sym = results.get(id);
92
+ if (sym)
93
+ ordered.push(sym);
94
+ }
95
+ return ordered;
96
+ }
97
+ /**
98
+ * Find references to a symbol name across indexed files.
99
+ * Matches whole words only using word-boundary regex.
100
+ */
101
+ export async function findReferences(repo, symbolName, filePattern) {
102
+ const index = await getCodeIndex(repo);
103
+ if (!index) {
104
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
105
+ }
106
+ // Escape special regex characters in symbol name
107
+ const escaped = symbolName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
108
+ const pattern = new RegExp(`\\b${escaped}\\b`);
109
+ // Optional file pattern filter
110
+ const fileFilter = filePattern
111
+ ? new RegExp(filePattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\\\*/g, ".*"))
112
+ : null;
113
+ const refs = [];
114
+ for (const fileEntry of index.files) {
115
+ if (refs.length >= MAX_REFERENCES)
116
+ break;
117
+ if (fileFilter && !fileFilter.test(fileEntry.path))
118
+ continue;
119
+ let content;
120
+ try {
121
+ content = await readFile(join(index.root, fileEntry.path), "utf-8");
122
+ }
123
+ catch {
124
+ continue; // File may have been deleted
125
+ }
126
+ const lines = content.split("\n");
127
+ for (let i = 0; i < lines.length; i++) {
128
+ if (refs.length >= MAX_REFERENCES)
129
+ break;
130
+ const line = lines[i];
131
+ if (line === undefined)
132
+ continue;
133
+ const match = pattern.exec(line);
134
+ if (match) {
135
+ const rawContext = line.trimEnd();
136
+ refs.push({
137
+ file: fileEntry.path,
138
+ line: i + 1,
139
+ col: match.index + 1,
140
+ context: rawContext.length > MAX_CONTEXT_LENGTH
141
+ ? rawContext.slice(0, MAX_CONTEXT_LENGTH) + "..."
142
+ : rawContext,
143
+ });
144
+ }
145
+ }
146
+ }
147
+ return refs;
148
+ }
149
+ /**
150
+ * Search for a symbol by query and return it with full source.
151
+ * Optionally includes references across the codebase.
152
+ */
153
+ export async function findAndShow(repo, query, includeRefs) {
154
+ const bm25Index = await getBM25Index(repo);
155
+ if (!bm25Index) {
156
+ throw new Error(`Repository "${repo}" not found. Index it first with index_folder.`);
157
+ }
158
+ const config = loadConfig();
159
+ const results = searchBM25(bm25Index, query, 1, config.bm25FieldWeights);
160
+ const topResult = results[0];
161
+ if (!topResult)
162
+ return null;
163
+ const fullSymbol = await getSymbol(repo, topResult.symbol.id);
164
+ if (!fullSymbol)
165
+ return null;
166
+ if (includeRefs) {
167
+ const references = await findReferences(repo, fullSymbol.name);
168
+ return { symbol: fullSymbol, references };
169
+ }
170
+ return { symbol: fullSymbol };
171
+ }
172
+ //# sourceMappingURL=symbol-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-tools.js","sourceRoot":"","sources":["../../src/tools/symbol-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ export type SymbolKind = "function" | "method" | "class" | "interface" | "type" | "variable" | "constant" | "field" | "enum" | "namespace" | "module" | "section" | "metadata" | "test_suite" | "test_case" | "test_hook" | "default_export" | "unknown";
2
+ export interface FileLocation {
3
+ file: string;
4
+ start_line: number;
5
+ end_line: number;
6
+ start_col?: number;
7
+ end_col?: number;
8
+ }
9
+ export interface CodeSymbol extends FileLocation {
10
+ id: string;
11
+ repo: string;
12
+ name: string;
13
+ kind: SymbolKind;
14
+ signature?: string;
15
+ docstring?: string;
16
+ source?: string;
17
+ parent?: string;
18
+ tokens?: string[];
19
+ }
20
+ export interface FileEntry {
21
+ path: string;
22
+ language: string;
23
+ symbol_count: number;
24
+ last_modified: number;
25
+ }
26
+ export interface CodeIndex {
27
+ repo: string;
28
+ root: string;
29
+ symbols: CodeSymbol[];
30
+ files: FileEntry[];
31
+ created_at: number;
32
+ updated_at: number;
33
+ symbol_count: number;
34
+ file_count: number;
35
+ }
36
+ export interface RepoMeta {
37
+ name: string;
38
+ root: string;
39
+ index_path: string;
40
+ symbol_count: number;
41
+ file_count: number;
42
+ updated_at: number;
43
+ }
44
+ export interface Registry {
45
+ repos: Record<string, RepoMeta>;
46
+ updated_at: number;
47
+ }
48
+ export interface SearchResult {
49
+ symbol: CodeSymbol;
50
+ score: number;
51
+ matches?: string[];
52
+ }
53
+ export interface Reference {
54
+ file: string;
55
+ line: number;
56
+ col?: number;
57
+ context: string;
58
+ }
59
+ export interface TextMatch {
60
+ file: string;
61
+ line: number;
62
+ content: string;
63
+ context_before?: string[];
64
+ context_after?: string[];
65
+ }
66
+ export type Direction = "callers" | "callees";
67
+ export interface CallNode {
68
+ symbol: CodeSymbol;
69
+ children: CallNode[];
70
+ }
71
+ export interface ImpactResult {
72
+ changed_files: string[];
73
+ affected_symbols: CodeSymbol[];
74
+ dependency_graph: Record<string, string[]>;
75
+ }
76
+ export interface EmbeddingMeta {
77
+ model: string;
78
+ provider: "voyage" | "openai" | "ollama";
79
+ dimensions: number;
80
+ symbol_count: number;
81
+ updated_at: number;
82
+ }
83
+ export interface CodeChunk {
84
+ id: string;
85
+ file: string;
86
+ startLine: number;
87
+ endLine: number;
88
+ text: string;
89
+ tokenCount: number;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Core domain types for CodeSift
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iCAAiC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Git ref/URL validation utilities — shared across tools that invoke git.
3
+ * Prevents command injection when refs/URLs are passed to execFileSync.
4
+ */
5
+ /** Allows alphanumeric, `/`, `.`, `-`, `_`, `~`, `^`, `@`, `{`, `}`. */
6
+ export declare const GIT_REF_PATTERN: RegExp;
7
+ export declare function validateGitRef(ref: string): void;
8
+ /** Allows HTTPS, SSH, git://, and file:// protocols. */
9
+ export declare const GIT_URL_PATTERN: RegExp;
10
+ export declare function validateGitUrl(url: string): void;
11
+ //# sourceMappingURL=git-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-validation.d.ts","sourceRoot":"","sources":["../../src/utils/git-validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wEAAwE;AACxE,eAAO,MAAM,eAAe,QAA6B,CAAC;AAE1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED,wDAAwD;AACxD,eAAO,MAAM,eAAe,QAA2D,CAAC;AAExF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIhD"}