codedev-mcp 3.2.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 (229) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/LICENSE +21 -0
  3. package/README.md +760 -0
  4. package/dist/analyzers/api-contract.d.ts +46 -0
  5. package/dist/analyzers/api-contract.d.ts.map +1 -0
  6. package/dist/analyzers/api-contract.js +319 -0
  7. package/dist/analyzers/api-contract.js.map +1 -0
  8. package/dist/analyzers/architecture.d.ts +37 -0
  9. package/dist/analyzers/architecture.d.ts.map +1 -0
  10. package/dist/analyzers/architecture.js +149 -0
  11. package/dist/analyzers/architecture.js.map +1 -0
  12. package/dist/analyzers/branch-compare.d.ts +46 -0
  13. package/dist/analyzers/branch-compare.d.ts.map +1 -0
  14. package/dist/analyzers/branch-compare.js +128 -0
  15. package/dist/analyzers/branch-compare.js.map +1 -0
  16. package/dist/analyzers/cicd.d.ts +42 -0
  17. package/dist/analyzers/cicd.d.ts.map +1 -0
  18. package/dist/analyzers/cicd.js +237 -0
  19. package/dist/analyzers/cicd.js.map +1 -0
  20. package/dist/analyzers/codebase.d.ts +64 -0
  21. package/dist/analyzers/codebase.d.ts.map +1 -0
  22. package/dist/analyzers/codebase.js +354 -0
  23. package/dist/analyzers/codebase.js.map +1 -0
  24. package/dist/analyzers/complexity-heatmap.d.ts +50 -0
  25. package/dist/analyzers/complexity-heatmap.d.ts.map +1 -0
  26. package/dist/analyzers/complexity-heatmap.js +156 -0
  27. package/dist/analyzers/complexity-heatmap.js.map +1 -0
  28. package/dist/analyzers/context-pack.d.ts +43 -0
  29. package/dist/analyzers/context-pack.d.ts.map +1 -0
  30. package/dist/analyzers/context-pack.js +232 -0
  31. package/dist/analyzers/context-pack.js.map +1 -0
  32. package/dist/analyzers/coverage.d.ts +70 -0
  33. package/dist/analyzers/coverage.d.ts.map +1 -0
  34. package/dist/analyzers/coverage.js +313 -0
  35. package/dist/analyzers/coverage.js.map +1 -0
  36. package/dist/analyzers/db-schema.d.ts +55 -0
  37. package/dist/analyzers/db-schema.d.ts.map +1 -0
  38. package/dist/analyzers/db-schema.js +237 -0
  39. package/dist/analyzers/db-schema.js.map +1 -0
  40. package/dist/analyzers/dead-code.d.ts +34 -0
  41. package/dist/analyzers/dead-code.d.ts.map +1 -0
  42. package/dist/analyzers/dead-code.js +131 -0
  43. package/dist/analyzers/dead-code.js.map +1 -0
  44. package/dist/analyzers/dep-vuln.d.ts +36 -0
  45. package/dist/analyzers/dep-vuln.d.ts.map +1 -0
  46. package/dist/analyzers/dep-vuln.js +342 -0
  47. package/dist/analyzers/dep-vuln.js.map +1 -0
  48. package/dist/analyzers/docs.d.ts +47 -0
  49. package/dist/analyzers/docs.d.ts.map +1 -0
  50. package/dist/analyzers/docs.js +473 -0
  51. package/dist/analyzers/docs.js.map +1 -0
  52. package/dist/analyzers/git.d.ts +115 -0
  53. package/dist/analyzers/git.d.ts.map +1 -0
  54. package/dist/analyzers/git.js +214 -0
  55. package/dist/analyzers/git.js.map +1 -0
  56. package/dist/analyzers/iac.d.ts +39 -0
  57. package/dist/analyzers/iac.d.ts.map +1 -0
  58. package/dist/analyzers/iac.js +233 -0
  59. package/dist/analyzers/iac.js.map +1 -0
  60. package/dist/analyzers/impact.d.ts +51 -0
  61. package/dist/analyzers/impact.d.ts.map +1 -0
  62. package/dist/analyzers/impact.js +235 -0
  63. package/dist/analyzers/impact.js.map +1 -0
  64. package/dist/analyzers/monorepo.d.ts +36 -0
  65. package/dist/analyzers/monorepo.d.ts.map +1 -0
  66. package/dist/analyzers/monorepo.js +233 -0
  67. package/dist/analyzers/monorepo.js.map +1 -0
  68. package/dist/analyzers/notebook.d.ts +53 -0
  69. package/dist/analyzers/notebook.d.ts.map +1 -0
  70. package/dist/analyzers/notebook.js +149 -0
  71. package/dist/analyzers/notebook.js.map +1 -0
  72. package/dist/analyzers/perf-profile.d.ts +39 -0
  73. package/dist/analyzers/perf-profile.d.ts.map +1 -0
  74. package/dist/analyzers/perf-profile.js +222 -0
  75. package/dist/analyzers/perf-profile.js.map +1 -0
  76. package/dist/analyzers/scaffold.d.ts +46 -0
  77. package/dist/analyzers/scaffold.d.ts.map +1 -0
  78. package/dist/analyzers/scaffold.js +313 -0
  79. package/dist/analyzers/scaffold.js.map +1 -0
  80. package/dist/analyzers/security.d.ts +42 -0
  81. package/dist/analyzers/security.d.ts.map +1 -0
  82. package/dist/analyzers/security.js +281 -0
  83. package/dist/analyzers/security.js.map +1 -0
  84. package/dist/analyzers/symbols.d.ts +49 -0
  85. package/dist/analyzers/symbols.d.ts.map +1 -0
  86. package/dist/analyzers/symbols.js +212 -0
  87. package/dist/analyzers/symbols.js.map +1 -0
  88. package/dist/analyzers/tree-sitter.d.ts +71 -0
  89. package/dist/analyzers/tree-sitter.d.ts.map +1 -0
  90. package/dist/analyzers/tree-sitter.js +333 -0
  91. package/dist/analyzers/tree-sitter.js.map +1 -0
  92. package/dist/analyzers/type-flow.d.ts +39 -0
  93. package/dist/analyzers/type-flow.d.ts.map +1 -0
  94. package/dist/analyzers/type-flow.js +75 -0
  95. package/dist/analyzers/type-flow.js.map +1 -0
  96. package/dist/cache/memory-cache.d.ts +130 -0
  97. package/dist/cache/memory-cache.d.ts.map +1 -0
  98. package/dist/cache/memory-cache.js +273 -0
  99. package/dist/cache/memory-cache.js.map +1 -0
  100. package/dist/config.d.ts +32 -0
  101. package/dist/config.d.ts.map +1 -0
  102. package/dist/config.js +57 -0
  103. package/dist/config.js.map +1 -0
  104. package/dist/constants/instructions.d.ts +2 -0
  105. package/dist/constants/instructions.d.ts.map +1 -0
  106. package/dist/constants/instructions.js +82 -0
  107. package/dist/constants/instructions.js.map +1 -0
  108. package/dist/db/connection.d.ts +12 -0
  109. package/dist/db/connection.d.ts.map +1 -0
  110. package/dist/db/connection.js +34 -0
  111. package/dist/db/connection.js.map +1 -0
  112. package/dist/db/json-store.d.ts +111 -0
  113. package/dist/db/json-store.d.ts.map +1 -0
  114. package/dist/db/json-store.js +201 -0
  115. package/dist/db/json-store.js.map +1 -0
  116. package/dist/db/sqlite-store.d.ts +153 -0
  117. package/dist/db/sqlite-store.d.ts.map +1 -0
  118. package/dist/db/sqlite-store.js +388 -0
  119. package/dist/db/sqlite-store.js.map +1 -0
  120. package/dist/index.d.ts +17 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +116 -0
  123. package/dist/index.js.map +1 -0
  124. package/dist/resources/health.d.ts +35 -0
  125. package/dist/resources/health.d.ts.map +1 -0
  126. package/dist/resources/health.js +81 -0
  127. package/dist/resources/health.js.map +1 -0
  128. package/dist/schemas/output-schemas.d.ts +517 -0
  129. package/dist/schemas/output-schemas.d.ts.map +1 -0
  130. package/dist/schemas/output-schemas.js +296 -0
  131. package/dist/schemas/output-schemas.js.map +1 -0
  132. package/dist/search/fast-search.d.ts +90 -0
  133. package/dist/search/fast-search.d.ts.map +1 -0
  134. package/dist/search/fast-search.js +387 -0
  135. package/dist/search/fast-search.js.map +1 -0
  136. package/dist/search/semantic.d.ts +26 -0
  137. package/dist/search/semantic.d.ts.map +1 -0
  138. package/dist/search/semantic.js +458 -0
  139. package/dist/search/semantic.js.map +1 -0
  140. package/dist/tools/analysis.d.ts +7 -0
  141. package/dist/tools/analysis.d.ts.map +1 -0
  142. package/dist/tools/analysis.js +491 -0
  143. package/dist/tools/analysis.js.map +1 -0
  144. package/dist/tools/architecture.d.ts +7 -0
  145. package/dist/tools/architecture.d.ts.map +1 -0
  146. package/dist/tools/architecture.js +176 -0
  147. package/dist/tools/architecture.js.map +1 -0
  148. package/dist/tools/devops.d.ts +7 -0
  149. package/dist/tools/devops.d.ts.map +1 -0
  150. package/dist/tools/devops.js +179 -0
  151. package/dist/tools/devops.js.map +1 -0
  152. package/dist/tools/docs.d.ts +7 -0
  153. package/dist/tools/docs.d.ts.map +1 -0
  154. package/dist/tools/docs.js +102 -0
  155. package/dist/tools/docs.js.map +1 -0
  156. package/dist/tools/git.d.ts +7 -0
  157. package/dist/tools/git.d.ts.map +1 -0
  158. package/dist/tools/git.js +475 -0
  159. package/dist/tools/git.js.map +1 -0
  160. package/dist/tools/nav.d.ts +7 -0
  161. package/dist/tools/nav.d.ts.map +1 -0
  162. package/dist/tools/nav.js +275 -0
  163. package/dist/tools/nav.js.map +1 -0
  164. package/dist/tools/notebook.d.ts +7 -0
  165. package/dist/tools/notebook.d.ts.map +1 -0
  166. package/dist/tools/notebook.js +102 -0
  167. package/dist/tools/notebook.js.map +1 -0
  168. package/dist/tools/performance.d.ts +7 -0
  169. package/dist/tools/performance.d.ts.map +1 -0
  170. package/dist/tools/performance.js +59 -0
  171. package/dist/tools/performance.js.map +1 -0
  172. package/dist/tools/quality.d.ts +7 -0
  173. package/dist/tools/quality.d.ts.map +1 -0
  174. package/dist/tools/quality.js +279 -0
  175. package/dist/tools/quality.js.map +1 -0
  176. package/dist/tools/scaffold.d.ts +7 -0
  177. package/dist/tools/scaffold.d.ts.map +1 -0
  178. package/dist/tools/scaffold.js +80 -0
  179. package/dist/tools/scaffold.js.map +1 -0
  180. package/dist/tools/search.d.ts +7 -0
  181. package/dist/tools/search.d.ts.map +1 -0
  182. package/dist/tools/search.js +308 -0
  183. package/dist/tools/search.js.map +1 -0
  184. package/dist/tools/security.d.ts +7 -0
  185. package/dist/tools/security.d.ts.map +1 -0
  186. package/dist/tools/security.js +138 -0
  187. package/dist/tools/security.js.map +1 -0
  188. package/dist/utils/analytics.d.ts +69 -0
  189. package/dist/utils/analytics.d.ts.map +1 -0
  190. package/dist/utils/analytics.js +144 -0
  191. package/dist/utils/analytics.js.map +1 -0
  192. package/dist/utils/concurrency.d.ts +43 -0
  193. package/dist/utils/concurrency.d.ts.map +1 -0
  194. package/dist/utils/concurrency.js +78 -0
  195. package/dist/utils/concurrency.js.map +1 -0
  196. package/dist/utils/fallback.d.ts +52 -0
  197. package/dist/utils/fallback.d.ts.map +1 -0
  198. package/dist/utils/fallback.js +137 -0
  199. package/dist/utils/fallback.js.map +1 -0
  200. package/dist/utils/git-hooks.d.ts +24 -0
  201. package/dist/utils/git-hooks.d.ts.map +1 -0
  202. package/dist/utils/git-hooks.js +108 -0
  203. package/dist/utils/git-hooks.js.map +1 -0
  204. package/dist/utils/languages.d.ts +72 -0
  205. package/dist/utils/languages.d.ts.map +1 -0
  206. package/dist/utils/languages.js +463 -0
  207. package/dist/utils/languages.js.map +1 -0
  208. package/dist/utils/logger.d.ts +13 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +34 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/plugins.d.ts +105 -0
  213. package/dist/utils/plugins.d.ts.map +1 -0
  214. package/dist/utils/plugins.js +325 -0
  215. package/dist/utils/plugins.js.map +1 -0
  216. package/dist/utils/security.d.ts +17 -0
  217. package/dist/utils/security.d.ts.map +1 -0
  218. package/dist/utils/security.js +48 -0
  219. package/dist/utils/security.js.map +1 -0
  220. package/dist/utils/streaming.d.ts +56 -0
  221. package/dist/utils/streaming.d.ts.map +1 -0
  222. package/dist/utils/streaming.js +95 -0
  223. package/dist/utils/streaming.js.map +1 -0
  224. package/dist/version.d.ts +3 -0
  225. package/dist/version.d.ts.map +1 -0
  226. package/dist/version.js +3 -0
  227. package/dist/version.js.map +1 -0
  228. package/mcp.json +100 -0
  229. package/package.json +89 -0
@@ -0,0 +1,387 @@
1
+ /**
2
+ * Fast Code Search Engine
3
+ * Uses ripgrep (rg) for blazing fast search, falls back to grep
4
+ * Handles codebases of any size efficiently
5
+ */
6
+ import { execFile } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ import { readFile } from 'node:fs/promises';
9
+ import path from 'node:path';
10
+ const execFileAsync = promisify(execFile);
11
+ let _rgAvailable = null;
12
+ /**
13
+ * Checks if ripgrep (rg) is available in the system path.
14
+ * Caches the result for subsequent calls.
15
+ *
16
+ * @returns Promise resolving to true if rg is available, false otherwise.
17
+ */
18
+ async function isRgAvailable() {
19
+ if (_rgAvailable !== null)
20
+ return _rgAvailable;
21
+ try {
22
+ await execFileAsync('rg', ['--version']);
23
+ _rgAvailable = true;
24
+ }
25
+ catch {
26
+ _rgAvailable = false;
27
+ }
28
+ return _rgAvailable;
29
+ }
30
+ /**
31
+ * Resets the cached availability of ripgrep.
32
+ * Intended for testing purposes only.
33
+ */
34
+ export function resetRgAvailability() {
35
+ _rgAvailable = null;
36
+ }
37
+ /**
38
+ * Primary search function that delegates to ripgrep if available, otherwise falls back to grep.
39
+ *
40
+ * @param opts - The search options including pattern, cwd, and filters.
41
+ * @returns A promise resolving to an array of search results.
42
+ */
43
+ export async function searchCode(opts) {
44
+ if (await isRgAvailable()) {
45
+ return searchWithRipgrep(opts);
46
+ }
47
+ return searchWithGrep(opts);
48
+ }
49
+ /**
50
+ * Default list of directories to exclude from search to improve performance.
51
+ */
52
+ const DEFAULT_EXCLUDES = [
53
+ 'node_modules',
54
+ '.git',
55
+ 'dist',
56
+ 'build',
57
+ '__pycache__',
58
+ '.venv',
59
+ 'venv',
60
+ '.tox',
61
+ '.mypy_cache',
62
+ 'target',
63
+ 'bin',
64
+ 'obj',
65
+ '.next',
66
+ '.nuxt',
67
+ 'coverage',
68
+ '.pytest_cache',
69
+ '.gradle',
70
+ 'vendor',
71
+ 'Pods',
72
+ '.dart_tool',
73
+ '.pub-cache',
74
+ ];
75
+ /**
76
+ * executes search using ripgrep.
77
+ *
78
+ * @param opts - Search options.
79
+ * @returns Array of matches.
80
+ */
81
+ async function searchWithRipgrep(opts) {
82
+ const args = ['--json', '--line-number', '--column', '--no-heading'];
83
+ if (!opts.caseSensitive)
84
+ args.push('--ignore-case');
85
+ if (opts.wholeWord)
86
+ args.push('--word-regexp');
87
+ if (!opts.isRegex)
88
+ args.push('--fixed-strings');
89
+ if (opts.maxResults)
90
+ args.push('--max-count', String(opts.maxResults));
91
+ if (opts.contextLines) {
92
+ args.push('--before-context', String(opts.contextLines));
93
+ args.push('--after-context', String(opts.contextLines));
94
+ }
95
+ if (!opts.includeHidden)
96
+ args.push('--no-hidden');
97
+ const excludeDirs = [...DEFAULT_EXCLUDES, ...(opts.excludeDirs || [])];
98
+ for (const dir of excludeDirs) {
99
+ args.push('--glob', `!${dir}`);
100
+ }
101
+ if (opts.fileGlob) {
102
+ args.push('--glob', opts.fileGlob);
103
+ }
104
+ args.push(opts.pattern, '.');
105
+ try {
106
+ const { stdout } = await execFileAsync('rg', args, {
107
+ cwd: opts.cwd,
108
+ maxBuffer: 50 * 1024 * 1024,
109
+ timeout: 30000,
110
+ });
111
+ return parseRipgrepJson(stdout, opts.cwd);
112
+ }
113
+ catch (error) {
114
+ if (isExitCodeError(error) && error.code === 1)
115
+ return [];
116
+ if (error instanceof Error) {
117
+ throw new Error(`Search failed: ${error.message}`);
118
+ }
119
+ throw new Error('Search failed with unknown error');
120
+ }
121
+ }
122
+ /**
123
+ * Type guard for error with code property.
124
+ *
125
+ * @param error - The error to check.
126
+ * @returns True if error has a code property.
127
+ */
128
+ function isExitCodeError(error) {
129
+ return typeof error === 'object' && error !== null && 'code' in error;
130
+ }
131
+ /**
132
+ * Parses the newline-delimited JSON output from ripgrep.
133
+ *
134
+ * @param output - Raw stdout from ripgrep.
135
+ * @param cwd - Current working directory to resolve relative paths.
136
+ * @returns Parsed search results.
137
+ */
138
+ function parseRipgrepJson(output, cwd) {
139
+ const results = [];
140
+ const lines = output.split('\n').filter(Boolean);
141
+ for (const line of lines) {
142
+ try {
143
+ const parsed = JSON.parse(line);
144
+ if (parsed.type === 'match') {
145
+ const data = parsed.data;
146
+ results.push({
147
+ file: path.relative(cwd, data.path.text),
148
+ line: data.line_number,
149
+ column: data.submatches?.[0]?.start,
150
+ text: data.lines.text.trimEnd(),
151
+ });
152
+ }
153
+ }
154
+ catch {
155
+ // Intentionally suppressed: skip malformed lines
156
+ }
157
+ }
158
+ return results;
159
+ }
160
+ /**
161
+ * Executes search using standard grep (fallback).
162
+ *
163
+ * @param opts - Search options.
164
+ * @returns Array of matches.
165
+ */
166
+ async function searchWithGrep(opts) {
167
+ const args = ['-r', '-n', '--line-number'];
168
+ if (!opts.caseSensitive)
169
+ args.push('-i');
170
+ if (opts.wholeWord)
171
+ args.push('-w');
172
+ if (!opts.isRegex)
173
+ args.push('-F');
174
+ if (opts.maxResults)
175
+ args.push('-m', String(opts.maxResults));
176
+ if (opts.contextLines) {
177
+ args.push('-B', String(opts.contextLines));
178
+ args.push('-A', String(opts.contextLines));
179
+ }
180
+ const excludeDirs = [
181
+ 'node_modules',
182
+ '.git',
183
+ 'dist',
184
+ 'build',
185
+ '__pycache__',
186
+ '.venv',
187
+ 'venv',
188
+ 'target',
189
+ 'bin',
190
+ 'obj',
191
+ '.next',
192
+ 'coverage',
193
+ 'vendor',
194
+ ...(opts.excludeDirs || []),
195
+ ];
196
+ for (const dir of excludeDirs) {
197
+ args.push(`--exclude-dir=${dir}`);
198
+ }
199
+ if (opts.fileGlob) {
200
+ args.push(`--include=${opts.fileGlob}`);
201
+ }
202
+ args.push(opts.pattern, '.');
203
+ try {
204
+ const { stdout } = await execFileAsync('grep', args, {
205
+ cwd: opts.cwd,
206
+ maxBuffer: 50 * 1024 * 1024,
207
+ timeout: 30000,
208
+ });
209
+ return parseGrepOutput(stdout);
210
+ }
211
+ catch (error) {
212
+ if (isExitCodeError(error) && error.code === 1)
213
+ return [];
214
+ if (error instanceof Error) {
215
+ throw new Error(`Search failed: ${error.message}`);
216
+ }
217
+ throw new Error('Search failed with unknown error');
218
+ }
219
+ }
220
+ /**
221
+ * Parses the standard grep output.
222
+ *
223
+ * @param output - Raw stdout from grep.
224
+ * @returns Parsed search results.
225
+ */
226
+ function parseGrepOutput(output) {
227
+ const results = [];
228
+ const lines = output.split('\n').filter(Boolean);
229
+ for (const line of lines) {
230
+ const match = line.match(/^\.?\/?(.+?):(\d+):(.*)$/);
231
+ if (match) {
232
+ results.push({
233
+ file: match[1],
234
+ line: parseInt(match[2], 10),
235
+ text: match[3].trimEnd(),
236
+ });
237
+ }
238
+ }
239
+ return results;
240
+ }
241
+ /**
242
+ * Lists files in a directory using 'fd' or 'find'.
243
+ *
244
+ * @param cwd - Directory to search in.
245
+ * @param options - Filtering options.
246
+ * @returns List of file paths relative to cwd.
247
+ */
248
+ export async function listFiles(cwd, options) {
249
+ const excludes = [
250
+ 'node_modules',
251
+ '.git',
252
+ 'dist',
253
+ 'build',
254
+ '__pycache__',
255
+ '.venv',
256
+ 'venv',
257
+ 'target',
258
+ 'bin',
259
+ 'obj',
260
+ '.next',
261
+ 'coverage',
262
+ 'vendor',
263
+ 'Pods',
264
+ '.dart_tool',
265
+ ...(options?.excludeDirs || []),
266
+ ];
267
+ try {
268
+ const fdArgs = [];
269
+ if (options?.type === 'file')
270
+ fdArgs.push('--type', 'f');
271
+ else if (options?.type === 'dir')
272
+ fdArgs.push('--type', 'd');
273
+ if (options?.maxDepth)
274
+ fdArgs.push('--max-depth', String(options.maxDepth));
275
+ for (const dir of excludes)
276
+ fdArgs.push('--exclude', dir);
277
+ fdArgs.push('--hidden');
278
+ if (options?.glob)
279
+ fdArgs.push('--glob', options.glob);
280
+ else
281
+ fdArgs.push('.');
282
+ const { stdout } = await execFileAsync('fd', fdArgs, { cwd, maxBuffer: 20 * 1024 * 1024, timeout: 15000 });
283
+ return stdout.split('\n').filter(Boolean);
284
+ }
285
+ catch {
286
+ // Fallback to find if fd fails
287
+ }
288
+ try {
289
+ const findArgs = ['.'];
290
+ if (options?.maxDepth)
291
+ findArgs.push('-maxdepth', String(options.maxDepth));
292
+ const excludeExpr = [];
293
+ for (const dir of excludes) {
294
+ excludeExpr.push('-name', dir, '-o');
295
+ }
296
+ if (excludeExpr.length > 0) {
297
+ excludeExpr.pop();
298
+ findArgs.push('(', ...excludeExpr, ')', '-prune', '-o');
299
+ }
300
+ if (options?.type === 'file')
301
+ findArgs.push('-type', 'f');
302
+ else if (options?.type === 'dir')
303
+ findArgs.push('-type', 'd');
304
+ if (options?.glob) {
305
+ findArgs.push('-name', options.glob);
306
+ }
307
+ findArgs.push('-print');
308
+ const { stdout } = await execFileAsync('find', findArgs, {
309
+ cwd,
310
+ maxBuffer: 20 * 1024 * 1024,
311
+ timeout: 15000,
312
+ });
313
+ return stdout
314
+ .split('\n')
315
+ .filter(Boolean)
316
+ .map((f) => f.replace(/^\.\//, ''));
317
+ }
318
+ catch (error) {
319
+ // Handle permission errors gracefully - find may write to stderr but still succeed
320
+ // In CI environments, find can encounter permission denied errors for system directories
321
+ const err = error;
322
+ // If we have stdout despite errors, use it (find can succeed with permission warnings)
323
+ if (err.stdout) {
324
+ return err.stdout
325
+ .split('\n')
326
+ .filter(Boolean)
327
+ .map((f) => f.replace(/^\.\//, ''));
328
+ }
329
+ // If it's just permission errors, return empty array (common in CI environments)
330
+ const stderr = err.stderr || '';
331
+ const message = err instanceof Error ? err.message : err.message || String(err);
332
+ if (stderr.includes('Permission denied') ||
333
+ stderr.includes('permission') ||
334
+ message.includes('Permission denied') ||
335
+ message.includes('permission')) {
336
+ return [];
337
+ }
338
+ throw new Error(`File listing failed: ${message}`);
339
+ }
340
+ }
341
+ /**
342
+ * Counts the number of lines in a file efficiently using 'wc -l'.
343
+ *
344
+ * @param filePath - Path to the file.
345
+ * @returns Number of lines.
346
+ */
347
+ export async function countLines(filePath) {
348
+ try {
349
+ const { stdout } = await execFileAsync('wc', ['-l', filePath]);
350
+ return parseInt(stdout.trim().split(/\s+/)[0], 10);
351
+ }
352
+ catch {
353
+ const content = await readFile(filePath, 'utf-8');
354
+ return content.split('\n').length;
355
+ }
356
+ }
357
+ /**
358
+ * Reads a specific range of lines from a file.
359
+ *
360
+ * @param filePath - Path to the file.
361
+ * @param startLine - 1-based start line.
362
+ * @param endLine - 1-based end line (inclusive).
363
+ * @returns Content and total line count.
364
+ */
365
+ export async function readFileRange(filePath, startLine, endLine) {
366
+ if (!startLine && !endLine) {
367
+ const content = await readFile(filePath, 'utf-8');
368
+ return { content, totalLines: content.split('\n').length };
369
+ }
370
+ try {
371
+ const range = startLine && endLine ? `${startLine},${endLine}p` : startLine ? `${startLine},$p` : `1,${endLine}p`;
372
+ const { stdout } = await execFileAsync('sed', ['-n', range, filePath]);
373
+ const total = await countLines(filePath);
374
+ return { content: stdout, totalLines: total };
375
+ }
376
+ catch {
377
+ const content = await readFile(filePath, 'utf-8');
378
+ const lines = content.split('\n');
379
+ const start = (startLine || 1) - 1;
380
+ const end = endLine || lines.length;
381
+ return {
382
+ content: lines.slice(start, end).join('\n'),
383
+ totalLines: lines.length,
384
+ };
385
+ }
386
+ }
387
+ //# sourceMappingURL=fast-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-search.js","sourceRoot":"","sources":["../../src/search/fast-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Semantic code search using TF-IDF scoring.
3
+ * No external model dependencies — works offline, instant startup.
4
+ *
5
+ * Answers queries like "find authentication logic" or "error handling code"
6
+ * by matching against function names, comments, imports, and string literals.
7
+ */
8
+ interface SemanticResult {
9
+ file: string;
10
+ startLine: number;
11
+ endLine: number;
12
+ score: number;
13
+ snippet: string;
14
+ matchedTerms: string[];
15
+ }
16
+ /**
17
+ * Perform semantic search across files.
18
+ * @param files - List of file paths to search.
19
+ * @param query - The search query string.
20
+ * @param cwd - The working directory.
21
+ * @param maxResults - Maximum number of results to return.
22
+ * @returns Ranked search results with scores and snippets.
23
+ */
24
+ export declare function semanticSearch(files: string[], query: string, cwd: string, maxResults?: number): Promise<SemanticResult[]>;
25
+ export {};
26
+ //# sourceMappingURL=semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA2ZD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,UAAU,SAAK,GACd,OAAO,CAAC,cAAc,EAAE,CAAC,CA4D3B"}