@j0hanz/filesystem-context-mcp 1.0.10 → 1.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 (288) hide show
  1. package/README.md +112 -22
  2. package/dist/__tests__/lib/errors.test.js +3 -23
  3. package/dist/__tests__/lib/errors.test.js.map +1 -1
  4. package/dist/__tests__/lib/file-operations.test.js +34 -0
  5. package/dist/__tests__/lib/file-operations.test.js.map +1 -1
  6. package/dist/__tests__/lib/path-validation.test.js +8 -0
  7. package/dist/__tests__/lib/path-validation.test.js.map +1 -1
  8. package/dist/__tests__/schemas/validators.test.js +130 -124
  9. package/dist/__tests__/schemas/validators.test.js.map +1 -1
  10. package/dist/__tests__/security/filesystem-boundary.test.js +1 -1
  11. package/dist/__tests__/security/filesystem-boundary.test.js.map +1 -1
  12. package/dist/config/types.d.ts +1 -58
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/config/types.js +0 -2
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/index.js +3 -5
  17. package/dist/index.js.map +1 -1
  18. package/dist/instructions.md +1 -2
  19. package/dist/lib/constants.d.ts +9 -7
  20. package/dist/lib/constants.d.ts.map +1 -1
  21. package/dist/lib/constants.js +89 -298
  22. package/dist/lib/constants.js.map +1 -1
  23. package/dist/lib/errors.d.ts +25 -1
  24. package/dist/lib/errors.d.ts.map +1 -1
  25. package/dist/lib/errors.js +4 -112
  26. package/dist/lib/errors.js.map +1 -1
  27. package/dist/lib/file-operations/analyze-directory.d.ts +8 -0
  28. package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -0
  29. package/dist/lib/file-operations/analyze-directory.js +117 -0
  30. package/dist/lib/file-operations/analyze-directory.js.map +1 -0
  31. package/dist/lib/file-operations/directory-items.d.ts +20 -0
  32. package/dist/lib/file-operations/directory-items.d.ts.map +1 -0
  33. package/dist/lib/file-operations/directory-items.js +85 -0
  34. package/dist/lib/file-operations/directory-items.js.map +1 -0
  35. package/dist/lib/file-operations/directory-iteration.d.ts +17 -0
  36. package/dist/lib/file-operations/directory-iteration.d.ts.map +1 -0
  37. package/dist/lib/file-operations/directory-iteration.js +55 -0
  38. package/dist/lib/file-operations/directory-iteration.js.map +1 -0
  39. package/dist/lib/file-operations/directory-tree.d.ts +9 -0
  40. package/dist/lib/file-operations/directory-tree.d.ts.map +1 -0
  41. package/dist/lib/file-operations/directory-tree.js +175 -0
  42. package/dist/lib/file-operations/directory-tree.js.map +1 -0
  43. package/dist/lib/file-operations/file-info.d.ts +3 -0
  44. package/dist/lib/file-operations/file-info.d.ts.map +1 -0
  45. package/dist/lib/file-operations/file-info.js +56 -0
  46. package/dist/lib/file-operations/file-info.js.map +1 -0
  47. package/dist/lib/file-operations/list-directory.d.ts +10 -0
  48. package/dist/lib/file-operations/list-directory.d.ts.map +1 -0
  49. package/dist/lib/file-operations/list-directory.js +189 -0
  50. package/dist/lib/file-operations/list-directory.js.map +1 -0
  51. package/dist/lib/file-operations/read-media-file.d.ts +5 -0
  52. package/dist/lib/file-operations/read-media-file.d.ts.map +1 -0
  53. package/dist/lib/file-operations/read-media-file.js +31 -0
  54. package/dist/lib/file-operations/read-media-file.js.map +1 -0
  55. package/dist/lib/file-operations/read-multiple-files.d.ts +16 -0
  56. package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -0
  57. package/dist/lib/file-operations/read-multiple-files.js +98 -0
  58. package/dist/lib/file-operations/read-multiple-files.js.map +1 -0
  59. package/dist/lib/file-operations/search-content.d.ts +16 -0
  60. package/dist/lib/file-operations/search-content.d.ts.map +1 -0
  61. package/dist/lib/file-operations/search-content.js +431 -0
  62. package/dist/lib/file-operations/search-content.js.map +1 -0
  63. package/dist/lib/file-operations/search-files.d.ts +9 -0
  64. package/dist/lib/file-operations/search-files.d.ts.map +1 -0
  65. package/dist/lib/file-operations/search-files.js +139 -0
  66. package/dist/lib/file-operations/search-files.js.map +1 -0
  67. package/dist/lib/file-operations/sorting.d.ts +12 -0
  68. package/dist/lib/file-operations/sorting.d.ts.map +1 -0
  69. package/dist/lib/file-operations/sorting.js +24 -0
  70. package/dist/lib/file-operations/sorting.js.map +1 -0
  71. package/dist/lib/file-operations.d.ts +9 -57
  72. package/dist/lib/file-operations.d.ts.map +1 -1
  73. package/dist/lib/file-operations.js +9 -733
  74. package/dist/lib/file-operations.js.map +1 -1
  75. package/dist/lib/fs-helpers/binary-detect.d.ts +3 -0
  76. package/dist/lib/fs-helpers/binary-detect.d.ts.map +1 -0
  77. package/dist/lib/fs-helpers/binary-detect.js +54 -0
  78. package/dist/lib/fs-helpers/binary-detect.js.map +1 -0
  79. package/dist/lib/fs-helpers/concurrency.d.ts +11 -0
  80. package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -0
  81. package/dist/lib/fs-helpers/concurrency.js +95 -0
  82. package/dist/lib/fs-helpers/concurrency.js.map +1 -0
  83. package/dist/lib/fs-helpers/fs-utils.d.ts +5 -0
  84. package/dist/lib/fs-helpers/fs-utils.d.ts.map +1 -0
  85. package/dist/lib/fs-helpers/fs-utils.js +13 -0
  86. package/dist/lib/fs-helpers/fs-utils.js.map +1 -0
  87. package/dist/lib/fs-helpers/readers/head-file.d.ts +2 -0
  88. package/dist/lib/fs-helpers/readers/head-file.d.ts.map +1 -0
  89. package/dist/lib/fs-helpers/readers/head-file.js +73 -0
  90. package/dist/lib/fs-helpers/readers/head-file.js.map +1 -0
  91. package/dist/lib/fs-helpers/readers/line-range.d.ts +7 -0
  92. package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -0
  93. package/dist/lib/fs-helpers/readers/line-range.js +46 -0
  94. package/dist/lib/fs-helpers/readers/line-range.js.map +1 -0
  95. package/dist/lib/fs-helpers/readers/read-file.d.ts +16 -0
  96. package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -0
  97. package/dist/lib/fs-helpers/readers/read-file.js +87 -0
  98. package/dist/lib/fs-helpers/readers/read-file.js.map +1 -0
  99. package/dist/lib/fs-helpers/readers/tail-file.d.ts +2 -0
  100. package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -0
  101. package/dist/lib/fs-helpers/readers/tail-file.js +98 -0
  102. package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -0
  103. package/dist/lib/fs-helpers/readers/utf8.d.ts +3 -0
  104. package/dist/lib/fs-helpers/readers/utf8.d.ts.map +1 -0
  105. package/dist/lib/fs-helpers/readers/utf8.js +22 -0
  106. package/dist/lib/fs-helpers/readers/utf8.js.map +1 -0
  107. package/dist/lib/fs-helpers/readers.d.ts +4 -0
  108. package/dist/lib/fs-helpers/readers.d.ts.map +1 -0
  109. package/dist/lib/fs-helpers/readers.js +4 -0
  110. package/dist/lib/fs-helpers/readers.js.map +1 -0
  111. package/dist/lib/fs-helpers.d.ts +4 -25
  112. package/dist/lib/fs-helpers.d.ts.map +1 -1
  113. package/dist/lib/fs-helpers.js +4 -350
  114. package/dist/lib/fs-helpers.js.map +1 -1
  115. package/dist/lib/path-utils.d.ts.map +1 -1
  116. package/dist/lib/path-utils.js +0 -2
  117. package/dist/lib/path-utils.js.map +1 -1
  118. package/dist/lib/path-validation/allowed-directories.d.ts +9 -0
  119. package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -0
  120. package/dist/lib/path-validation/allowed-directories.js +94 -0
  121. package/dist/lib/path-validation/allowed-directories.js.map +1 -0
  122. package/dist/lib/path-validation/errors.d.ts +5 -0
  123. package/dist/lib/path-validation/errors.d.ts.map +1 -0
  124. package/dist/lib/path-validation/errors.js +33 -0
  125. package/dist/lib/path-validation/errors.js.map +1 -0
  126. package/dist/lib/path-validation/roots.d.ts +3 -0
  127. package/dist/lib/path-validation/roots.d.ts.map +1 -0
  128. package/dist/lib/path-validation/roots.js +49 -0
  129. package/dist/lib/path-validation/roots.js.map +1 -0
  130. package/dist/lib/path-validation/validators.d.ts +9 -0
  131. package/dist/lib/path-validation/validators.d.ts.map +1 -0
  132. package/dist/lib/path-validation/validators.js +70 -0
  133. package/dist/lib/path-validation/validators.js.map +1 -0
  134. package/dist/lib/path-validation.d.ts +3 -7
  135. package/dist/lib/path-validation.d.ts.map +1 -1
  136. package/dist/lib/path-validation.js +3 -124
  137. package/dist/lib/path-validation.js.map +1 -1
  138. package/dist/schemas/input-helpers.d.ts +8 -0
  139. package/dist/schemas/input-helpers.d.ts.map +1 -0
  140. package/dist/schemas/input-helpers.js +44 -0
  141. package/dist/schemas/input-helpers.js.map +1 -0
  142. package/dist/schemas/inputs.d.ts +8 -5
  143. package/dist/schemas/inputs.d.ts.map +1 -1
  144. package/dist/schemas/inputs.js +41 -64
  145. package/dist/schemas/inputs.js.map +1 -1
  146. package/dist/schemas/output-helpers.d.ts +24 -0
  147. package/dist/schemas/output-helpers.d.ts.map +1 -0
  148. package/dist/schemas/output-helpers.js +13 -0
  149. package/dist/schemas/output-helpers.js.map +1 -0
  150. package/dist/schemas/outputs.d.ts +480 -46
  151. package/dist/schemas/outputs.d.ts.map +1 -1
  152. package/dist/schemas/outputs.js +26 -41
  153. package/dist/schemas/outputs.js.map +1 -1
  154. package/dist/server.d.ts +9 -1
  155. package/dist/server.d.ts.map +1 -1
  156. package/dist/server.js +29 -57
  157. package/dist/server.js.map +1 -1
  158. package/dist/tools/analyze-directory.d.ts.map +1 -1
  159. package/dist/tools/analyze-directory.js +116 -54
  160. package/dist/tools/analyze-directory.js.map +1 -1
  161. package/dist/tools/directory-tree.d.ts.map +1 -1
  162. package/dist/tools/directory-tree.js +86 -49
  163. package/dist/tools/directory-tree.js.map +1 -1
  164. package/dist/tools/get-file-info.d.ts.map +1 -1
  165. package/dist/tools/get-file-info.js +71 -37
  166. package/dist/tools/get-file-info.js.map +1 -1
  167. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  168. package/dist/tools/list-allowed-dirs.js +48 -35
  169. package/dist/tools/list-allowed-dirs.js.map +1 -1
  170. package/dist/tools/list-directory.d.ts.map +1 -1
  171. package/dist/tools/list-directory.js +131 -60
  172. package/dist/tools/list-directory.js.map +1 -1
  173. package/dist/tools/read-file.d.ts.map +1 -1
  174. package/dist/tools/read-file.js +70 -56
  175. package/dist/tools/read-file.js.map +1 -1
  176. package/dist/tools/read-media-file.d.ts.map +1 -1
  177. package/dist/tools/read-media-file.js +39 -41
  178. package/dist/tools/read-media-file.js.map +1 -1
  179. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  180. package/dist/tools/read-multiple-files.js +57 -50
  181. package/dist/tools/read-multiple-files.js.map +1 -1
  182. package/dist/tools/search-content.d.ts.map +1 -1
  183. package/dist/tools/search-content.js +147 -95
  184. package/dist/tools/search-content.js.map +1 -1
  185. package/dist/tools/search-files.d.ts.map +1 -1
  186. package/dist/tools/search-files.js +122 -51
  187. package/dist/tools/search-files.js.map +1 -1
  188. package/dist/tools/tool-response.d.ts +9 -0
  189. package/dist/tools/tool-response.d.ts.map +1 -0
  190. package/dist/tools/tool-response.js +7 -0
  191. package/dist/tools/tool-response.js.map +1 -0
  192. package/package.json +2 -1
  193. package/dist/__tests__/errors.test.d.ts +0 -2
  194. package/dist/__tests__/errors.test.d.ts.map +0 -1
  195. package/dist/__tests__/errors.test.js +0 -88
  196. package/dist/__tests__/errors.test.js.map +0 -1
  197. package/dist/__tests__/file-operations.test.d.ts +0 -2
  198. package/dist/__tests__/file-operations.test.d.ts.map +0 -1
  199. package/dist/__tests__/file-operations.test.js +0 -230
  200. package/dist/__tests__/file-operations.test.js.map +0 -1
  201. package/dist/__tests__/lib/formatters.test.d.ts +0 -2
  202. package/dist/__tests__/lib/formatters.test.d.ts.map +0 -1
  203. package/dist/__tests__/lib/formatters.test.js +0 -248
  204. package/dist/__tests__/lib/formatters.test.js.map +0 -1
  205. package/dist/__tests__/lib/image-parsing.test.d.ts +0 -2
  206. package/dist/__tests__/lib/image-parsing.test.d.ts.map +0 -1
  207. package/dist/__tests__/lib/image-parsing.test.js +0 -262
  208. package/dist/__tests__/lib/image-parsing.test.js.map +0 -1
  209. package/dist/__tests__/path-validation.test.d.ts +0 -2
  210. package/dist/__tests__/path-validation.test.d.ts.map +0 -1
  211. package/dist/__tests__/path-validation.test.js +0 -92
  212. package/dist/__tests__/path-validation.test.js.map +0 -1
  213. package/dist/lib/directory-helpers.d.ts +0 -4
  214. package/dist/lib/directory-helpers.d.ts.map +0 -1
  215. package/dist/lib/directory-helpers.js +0 -36
  216. package/dist/lib/directory-helpers.js.map +0 -1
  217. package/dist/lib/formatters.d.ts +0 -21
  218. package/dist/lib/formatters.d.ts.map +0 -1
  219. package/dist/lib/formatters.js +0 -206
  220. package/dist/lib/formatters.js.map +0 -1
  221. package/dist/lib/image-parsing.d.ts +0 -4
  222. package/dist/lib/image-parsing.d.ts.map +0 -1
  223. package/dist/lib/image-parsing.js +0 -130
  224. package/dist/lib/image-parsing.js.map +0 -1
  225. package/dist/lib/mcp-logger.d.ts +0 -11
  226. package/dist/lib/mcp-logger.d.ts.map +0 -1
  227. package/dist/lib/mcp-logger.js +0 -49
  228. package/dist/lib/mcp-logger.js.map +0 -1
  229. package/dist/lib/roots-utils.d.ts +0 -7
  230. package/dist/lib/roots-utils.d.ts.map +0 -1
  231. package/dist/lib/roots-utils.js +0 -39
  232. package/dist/lib/roots-utils.js.map +0 -1
  233. package/dist/lib/search-helpers.d.ts +0 -13
  234. package/dist/lib/search-helpers.d.ts.map +0 -1
  235. package/dist/lib/search-helpers.js +0 -205
  236. package/dist/lib/search-helpers.js.map +0 -1
  237. package/dist/lib/sorting.d.ts +0 -12
  238. package/dist/lib/sorting.d.ts.map +0 -1
  239. package/dist/lib/sorting.js +0 -41
  240. package/dist/lib/sorting.js.map +0 -1
  241. package/dist/lib/types.d.ts +0 -6
  242. package/dist/lib/types.d.ts.map +0 -1
  243. package/dist/lib/types.js +0 -2
  244. package/dist/lib/types.js.map +0 -1
  245. package/dist/prompts/analyze-codebase.d.ts +0 -3
  246. package/dist/prompts/analyze-codebase.d.ts.map +0 -1
  247. package/dist/prompts/analyze-codebase.js +0 -144
  248. package/dist/prompts/analyze-codebase.js.map +0 -1
  249. package/dist/prompts/filesystem-query.d.ts +0 -3
  250. package/dist/prompts/filesystem-query.d.ts.map +0 -1
  251. package/dist/prompts/filesystem-query.js +0 -168
  252. package/dist/prompts/filesystem-query.js.map +0 -1
  253. package/dist/prompts/find-duplicates.d.ts +0 -3
  254. package/dist/prompts/find-duplicates.d.ts.map +0 -1
  255. package/dist/prompts/find-duplicates.js +0 -77
  256. package/dist/prompts/find-duplicates.js.map +0 -1
  257. package/dist/prompts/index.d.ts +0 -3
  258. package/dist/prompts/index.d.ts.map +0 -1
  259. package/dist/prompts/index.js +0 -13
  260. package/dist/prompts/index.js.map +0 -1
  261. package/dist/prompts/project-overview.d.ts +0 -3
  262. package/dist/prompts/project-overview.d.ts.map +0 -1
  263. package/dist/prompts/project-overview.js +0 -122
  264. package/dist/prompts/project-overview.js.map +0 -1
  265. package/dist/prompts/search-and-replace.d.ts +0 -3
  266. package/dist/prompts/search-and-replace.d.ts.map +0 -1
  267. package/dist/prompts/search-and-replace.js +0 -130
  268. package/dist/prompts/search-and-replace.js.map +0 -1
  269. package/dist/prompts/shared.d.ts +0 -11
  270. package/dist/prompts/shared.d.ts.map +0 -1
  271. package/dist/prompts/shared.js +0 -32
  272. package/dist/prompts/shared.js.map +0 -1
  273. package/dist/resources/index.d.ts +0 -3
  274. package/dist/resources/index.d.ts.map +0 -1
  275. package/dist/resources/index.js +0 -54
  276. package/dist/resources/index.js.map +0 -1
  277. package/dist/schemas/validators.d.ts +0 -12
  278. package/dist/schemas/validators.d.ts.map +0 -1
  279. package/dist/schemas/validators.js +0 -35
  280. package/dist/schemas/validators.js.map +0 -1
  281. package/dist/utils/index.d.ts +0 -2
  282. package/dist/utils/index.d.ts.map +0 -1
  283. package/dist/utils/index.js +0 -2
  284. package/dist/utils/index.js.map +0 -1
  285. package/dist/utils/response-helpers.d.ts +0 -22
  286. package/dist/utils/response-helpers.d.ts.map +0 -1
  287. package/dist/utils/response-helpers.js +0 -24
  288. package/dist/utils/response-helpers.js.map +0 -1
@@ -1,205 +0,0 @@
1
- import * as readline from 'node:readline';
2
- import { createReadStream } from 'node:fs';
3
- import { MAX_LINE_CONTENT_LENGTH, REGEX_MATCH_TIMEOUT_MS, } from './constants.js';
4
- // Circular buffer to hold context lines before a match
5
- class CircularLineBuffer {
6
- capacity;
7
- buffer;
8
- writeIndex = 0;
9
- count = 0;
10
- constructor(capacity) {
11
- this.capacity = capacity;
12
- this.buffer = new Array(capacity);
13
- }
14
- push(line) {
15
- // Defensive truncation (should already be handled by caller)
16
- const truncatedLine = line.length > MAX_LINE_CONTENT_LENGTH
17
- ? line.substring(0, MAX_LINE_CONTENT_LENGTH)
18
- : line;
19
- this.buffer[this.writeIndex] = truncatedLine;
20
- this.writeIndex = (this.writeIndex + 1) % this.capacity;
21
- if (this.count < this.capacity)
22
- this.count++;
23
- }
24
- toArray() {
25
- if (this.count === 0)
26
- return [];
27
- if (this.count < this.capacity) {
28
- return this.buffer.slice(0, this.count);
29
- }
30
- // Buffer is full - return in correct order with single allocation
31
- // Avoids multiple spread/slice allocations for better GC performance
32
- const result = new Array(this.capacity);
33
- let writeIdx = 0;
34
- for (let i = this.writeIndex; i < this.capacity; i++) {
35
- result[writeIdx++] = this.buffer[i] ?? '';
36
- }
37
- for (let i = 0; i < this.writeIndex; i++) {
38
- result[writeIdx++] = this.buffer[i] ?? '';
39
- }
40
- return result;
41
- }
42
- clear() {
43
- this.count = 0;
44
- this.writeIndex = 0;
45
- }
46
- }
47
- // Count regex matches with timeout protection (returns -1 on timeout)
48
- function countRegexMatches(line, regex, timeoutMs = REGEX_MATCH_TIMEOUT_MS) {
49
- // Safety check for empty line
50
- if (line.length === 0)
51
- return 0;
52
- regex.lastIndex = 0;
53
- let count = 0;
54
- const deadline = Date.now() + timeoutMs;
55
- // Hard cap prevents issues with extremely long lines (e.g., minified JS)
56
- const maxIterations = Math.min(line.length * 2, 10000);
57
- let iterations = 0;
58
- let lastIndex = 0;
59
- let match;
60
- while ((match = regex.exec(line)) !== null) {
61
- count++;
62
- iterations++;
63
- // Prevent infinite loops on zero-width matches
64
- if (match[0] === '') {
65
- const { lastIndex: newIndex } = regex;
66
- regex.lastIndex++;
67
- lastIndex = newIndex + 1;
68
- // Prevent advancing beyond string length
69
- if (regex.lastIndex > line.length)
70
- break;
71
- }
72
- else {
73
- const { lastIndex: currentIndex } = regex;
74
- // Detect if regex is stuck (lastIndex not advancing)
75
- if (currentIndex === lastIndex) {
76
- return -1; // Regex not making progress
77
- }
78
- lastIndex = currentIndex;
79
- }
80
- // Hybrid timeout check for both fast and slow regex patterns
81
- const shouldCheckTimeout = (count > 0 && count % 10 === 0) ||
82
- (iterations > 0 && iterations % 50 === 0);
83
- if (shouldCheckTimeout && Date.now() > deadline) {
84
- return -1; // Signal timeout
85
- }
86
- // Safety check for runaway regex
87
- if (iterations > maxIterations) {
88
- return -1; // Signal runaway regex
89
- }
90
- }
91
- return count;
92
- }
93
- // Check if regex is simple enough to be safe without full ReDoS check
94
- export function isSimpleSafePattern(pattern) {
95
- // Validate input
96
- if (typeof pattern !== 'string' || pattern.length === 0) {
97
- return false;
98
- }
99
- // Patterns with nested quantifiers are the main ReDoS concern
100
- const nestedQuantifierPattern = /[+*?}]\s*\)\s*[+*?{]/;
101
- if (nestedQuantifierPattern.test(pattern)) {
102
- return false;
103
- }
104
- // Check for high repetition counts that safe-regex2 would flag (default limit is 25)
105
- const highRepetitionPattern = /\{(\d+)(?:,\d*)?\}/g;
106
- let match;
107
- while ((match = highRepetitionPattern.exec(pattern)) !== null) {
108
- const countStr = match[1];
109
- if (countStr === undefined)
110
- continue;
111
- const count = parseInt(countStr, 10);
112
- // Check for NaN and high values
113
- if (Number.isNaN(count) || count >= 25) {
114
- return false;
115
- }
116
- }
117
- return true;
118
- }
119
- // Process pending matches to add context-after lines
120
- function updatePendingMatches(pendingMatches, trimmedLine) {
121
- for (const pending of pendingMatches) {
122
- if (pending.afterNeeded > 0) {
123
- pending.match.contextAfter ??= [];
124
- pending.match.contextAfter.push(trimmedLine);
125
- pending.afterNeeded--;
126
- }
127
- }
128
- // Remove completed pending matches from the front
129
- while (pendingMatches.length > 0 && pendingMatches[0]?.afterNeeded === 0) {
130
- pendingMatches.shift();
131
- }
132
- }
133
- // Trim and truncate line content for storage
134
- function prepareTrimmedLine(line) {
135
- return line.trim().substring(0, MAX_LINE_CONTENT_LENGTH);
136
- }
137
- // Prepare final search pattern with optional literal escaping and word boundaries
138
- export function prepareSearchPattern(searchPattern, options) {
139
- let finalPattern = searchPattern;
140
- if (options.isLiteral) {
141
- finalPattern = finalPattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
142
- }
143
- if (options.wholeWord) {
144
- finalPattern = `\\b${finalPattern}\\b`;
145
- }
146
- return finalPattern;
147
- }
148
- export async function scanFileForContent(filePath, regex, options) {
149
- const { maxResults, contextLines, deadlineMs, currentMatchCount } = options;
150
- const matches = [];
151
- let linesSkippedDueToRegexTimeout = 0;
152
- let fileHadMatches = false;
153
- const fileStream = createReadStream(filePath, { encoding: 'utf-8' });
154
- const rl = readline.createInterface({
155
- input: fileStream,
156
- crlfDelay: Infinity,
157
- });
158
- let lineNumber = 0;
159
- const lineBuffer = contextLines > 0 ? new CircularLineBuffer(contextLines) : null;
160
- const pendingMatches = [];
161
- try {
162
- for await (const line of rl) {
163
- lineNumber++;
164
- if (deadlineMs !== undefined && Date.now() > deadlineMs)
165
- break;
166
- if (currentMatchCount + matches.length >= maxResults)
167
- break;
168
- const trimmedLine = prepareTrimmedLine(line);
169
- updatePendingMatches(pendingMatches, trimmedLine);
170
- const matchCount = countRegexMatches(line, regex);
171
- if (matchCount < 0) {
172
- linesSkippedDueToRegexTimeout++;
173
- lineBuffer?.push(trimmedLine);
174
- continue;
175
- }
176
- if (matchCount > 0) {
177
- fileHadMatches = true;
178
- const newMatch = {
179
- file: filePath,
180
- line: lineNumber,
181
- content: trimmedLine,
182
- matchCount,
183
- };
184
- const contextBefore = lineBuffer?.toArray();
185
- if (contextBefore?.length) {
186
- newMatch.contextBefore = contextBefore;
187
- }
188
- matches.push(newMatch);
189
- if (contextLines > 0) {
190
- pendingMatches.push({
191
- match: newMatch,
192
- afterNeeded: contextLines,
193
- });
194
- }
195
- }
196
- lineBuffer?.push(trimmedLine);
197
- }
198
- }
199
- finally {
200
- rl.close();
201
- fileStream.destroy();
202
- }
203
- return { matches, linesSkippedDueToRegexTimeout, fileHadMatches };
204
- }
205
- //# sourceMappingURL=search-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-helpers.js","sourceRoot":"","sources":["../../src/lib/search-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { FileType } from '../config/types.js';
2
- interface SortableEntry {
3
- name?: string;
4
- size?: number;
5
- modified?: Date;
6
- type?: FileType;
7
- path?: string;
8
- }
9
- export declare function createSorter<T extends SortableEntry>(sortBy: 'name' | 'size' | 'modified' | 'type' | 'path'): (a: T, b: T) => number;
10
- export declare function createSearchResultSorter(sortBy: 'name' | 'size' | 'modified' | 'path'): (a: SortableEntry, b: SortableEntry) => number;
11
- export {};
12
- //# sourceMappingURL=sorting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sorting.d.ts","sourceRoot":"","sources":["../../src/lib/sorting.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAGD,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAClD,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GACrD,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAmBxB;AAGD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAC5C,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,KAAK,MAAM,CAgBhD"}
@@ -1,41 +0,0 @@
1
- import * as path from 'node:path';
2
- // Create a reusable comparator function based on sort criteria
3
- export function createSorter(sortBy) {
4
- return (a, b) => {
5
- switch (sortBy) {
6
- case 'size':
7
- return (b.size ?? 0) - (a.size ?? 0);
8
- case 'modified':
9
- return (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0);
10
- case 'type':
11
- if (a.type !== b.type) {
12
- return a.type === 'directory' ? -1 : 1;
13
- }
14
- return (a.name ?? '').localeCompare(b.name ?? '');
15
- case 'path':
16
- return (a.path ?? '').localeCompare(b.path ?? '');
17
- case 'name':
18
- default:
19
- return (a.name ?? '').localeCompare(b.name ?? '');
20
- }
21
- };
22
- }
23
- // Specialized sorter for search results that extracts basename for name sorting
24
- export function createSearchResultSorter(sortBy) {
25
- return (a, b) => {
26
- switch (sortBy) {
27
- case 'size':
28
- return (b.size ?? 0) - (a.size ?? 0);
29
- case 'modified':
30
- return (b.modified?.getTime() ?? 0) - (a.modified?.getTime() ?? 0);
31
- case 'name':
32
- return path
33
- .basename(a.path ?? '')
34
- .localeCompare(path.basename(b.path ?? ''));
35
- case 'path':
36
- default:
37
- return (a.path ?? '').localeCompare(b.path ?? '');
38
- }
39
- };
40
- }
41
- //# sourceMappingURL=sorting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sorting.js","sourceRoot":"","sources":["../../src/lib/sorting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAalC,+DAA+D;AAC/D,MAAM,UAAU,YAAY,CAC1B,MAAsD;IAEtD,OAAO,CAAC,CAAI,EAAE,CAAI,EAAU,EAAE;QAC5B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,UAAU;gBACb,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM;gBACT,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;oBACtB,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpD,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACpD,KAAK,MAAM,CAAC;YACZ;gBACE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wBAAwB,CACtC,MAA6C;IAE7C,OAAO,CAAC,CAAgB,EAAE,CAAgB,EAAU,EAAE;QACpD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACvC,KAAK,UAAU;gBACb,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,KAAK,MAAM;gBACT,OAAO,IAAI;qBACR,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;qBACtB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC;YACZ;gBACE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @deprecated Import types directly from '../config/types.js' instead.
3
- * This re-export exists only for backward compatibility.
4
- */
5
- export type { AnalyzeDirectoryResult, ContentMatch, DetailedError, DirectoryAnalysis, DirectoryEntry, DirectoryTreeResult, ErrorCode, ErrorResponse, FileInfo, FileType, ListDirectoryResult, MediaFileResult, SearchContentResult, SearchFilesResult, SearchResult, TreeEntry, } from '../config/types.js';
6
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,YAAY,EACV,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,MAAM,oBAAoB,CAAC"}
package/dist/lib/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerAnalyzeCodebasePrompt(server: McpServer): void;
3
- //# sourceMappingURL=analyze-codebase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-codebase.d.ts","sourceRoot":"","sources":["../../src/prompts/analyze-codebase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8EzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4FrE"}
@@ -1,144 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { buildExcludes, pathCompleter } from './shared.js';
4
- // Extended excludes for codebase analysis (adds minified files)
5
- const ANALYZE_EXCLUDES = buildExcludes('minified');
6
- const FOCUS_CONFIG = {
7
- architecture: {
8
- patterns: [
9
- 'export (class|interface|type|function) \\w+',
10
- '^import .+ from',
11
- '@module|@package|@namespace',
12
- ],
13
- deliverables: [
14
- 'Module organization & boundaries',
15
- 'Dependency graph (imports/exports)',
16
- 'Layer violations & circular deps',
17
- 'Entry points & public API surface',
18
- ],
19
- maxResults: 100,
20
- },
21
- patterns: {
22
- patterns: [
23
- 'class \\w+Factory|create\\w+\\(',
24
- 'getInstance\\(|private constructor',
25
- 'subscribe\\(|addEventListener\\(|on[A-Z]\\w+\\(',
26
- 'implements \\w+(Strategy|Handler|Provider)',
27
- ],
28
- deliverables: [
29
- 'Design patterns identified (Factory, Singleton, Observer, Strategy)',
30
- 'Pattern usage frequency & locations',
31
- 'Anti-patterns & code smells',
32
- 'Refactoring opportunities',
33
- ],
34
- maxResults: 50,
35
- },
36
- quality: {
37
- patterns: [
38
- 'TODO|FIXME|HACK|XXX|BUG',
39
- '@deprecated|@obsolete|@legacy',
40
- 'console\\.(log|warn|error|debug)',
41
- 'eslint-disable|@ts-ignore|@ts-expect-error',
42
- ],
43
- deliverables: [
44
- 'Technical debt inventory with severity',
45
- 'Debug/console statements left behind',
46
- 'Suppressed linting rules',
47
- 'Documentation coverage gaps',
48
- ],
49
- maxResults: 100,
50
- },
51
- security: {
52
- patterns: [
53
- 'eval\\(|new Function\\(|exec\\(',
54
- 'password|secret|api_?key|token|credential',
55
- 'innerHTML|dangerouslySetInnerHTML|outerHTML',
56
- 'process\\.env\\.|\\$\\{.*SECRET|\\$\\{.*KEY',
57
- ],
58
- deliverables: [
59
- 'Potential code injection vulnerabilities',
60
- 'Hardcoded secrets & credentials',
61
- 'Unsafe DOM manipulation',
62
- 'Environment variable exposure',
63
- ],
64
- maxResults: 50,
65
- },
66
- };
67
- export function registerAnalyzeCodebasePrompt(server) {
68
- server.registerPrompt('analyze-codebase', {
69
- description: 'Deep code analysis: architecture, patterns, quality, or security',
70
- argsSchema: {
71
- path: completable(z.string().min(1).describe('Codebase root path'), pathCompleter),
72
- focus: z
73
- .enum(['architecture', 'patterns', 'quality', 'security', 'all'])
74
- .optional()
75
- .default('all')
76
- .describe('Focus: architecture, patterns, quality, security, or all'),
77
- filePattern: z
78
- .string()
79
- .optional()
80
- .default('**/*.{ts,js,tsx,jsx,py,java,go,rs}')
81
- .describe('Source file glob pattern'),
82
- maxDepth: z
83
- .number()
84
- .int()
85
- .min(1)
86
- .max(20)
87
- .optional()
88
- .default(10)
89
- .describe('Maximum directory depth (default: 10)'),
90
- },
91
- }, ({ path, focus, filePattern, maxDepth }) => {
92
- const focusAreas = focus === 'all' ? Object.keys(FOCUS_CONFIG) : [focus];
93
- const allPatterns = focusAreas.flatMap((f) => FOCUS_CONFIG[f]?.patterns ?? []);
94
- const allDeliverables = focusAreas.flatMap((f) => FOCUS_CONFIG[f]?.deliverables ?? []);
95
- const maxResults = Math.min(...focusAreas.map((f) => FOCUS_CONFIG[f]?.maxResults ?? 100));
96
- const excludesJson = JSON.stringify(ANALYZE_EXCLUDES);
97
- // Build search instructions for each focus area
98
- const searchInstructions = focusAreas
99
- .map((f) => {
100
- const config = FOCUS_CONFIG[f];
101
- if (!config)
102
- return '';
103
- return ` - **${f}**: \`${config.patterns.slice(0, 2).join('` or `')}\``;
104
- })
105
- .filter(Boolean)
106
- .join('\n');
107
- return {
108
- messages: [
109
- {
110
- role: 'user',
111
- content: {
112
- type: 'text',
113
- text: `Analyze codebase at "${path}" (focus: **${focus}**).
114
-
115
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
116
-
117
- **Default excludes:** ${ANALYZE_EXCLUDES.slice(0, 4).join(', ')}
118
-
119
- **Workflow:**
120
- 1. \`directory_tree\` maxDepth=${maxDepth} excludePatterns=${excludesJson} → structure overview
121
- 2. \`search_files\` pattern="${filePattern}" excludePatterns=${excludesJson} → find source files
122
- 3. \`analyze_directory\` maxDepth=${maxDepth} excludePatterns=${excludesJson} → stats & hotspots
123
- 4. \`search_content\` contextLines=2 maxResults=${maxResults} excludePatterns=${excludesJson} → search for:
124
- ${searchInstructions}
125
- 5. \`read_multiple_files\` → batch examine key files (most efficient)
126
-
127
- **Regex patterns to search:**
128
- ${allPatterns.map((p) => `- \`${p}\``).join('\n')}
129
-
130
- **Deliverables:**
131
- ${allDeliverables.map((d) => `- ${d}`).join('\n')}
132
-
133
- **Final Report:**
134
- - Executive summary (1-2 paragraphs)
135
- - Findings by category with file:line references
136
- - Prioritized recommendations (High/Medium/Low)
137
- - Quick wins vs long-term improvements`,
138
- },
139
- },
140
- ],
141
- };
142
- });
143
- }
144
- //# sourceMappingURL=analyze-codebase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze-codebase.js","sourceRoot":"","sources":["../../src/prompts/analyze-codebase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAG9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;AASnD,MAAM,YAAY,GAAgC;IAChD,YAAY,EAAE;QACZ,QAAQ,EAAE;YACR,6CAA6C;YAC7C,iBAAiB;YACjB,6BAA6B;SAC9B;QACD,YAAY,EAAE;YACZ,kCAAkC;YAClC,oCAAoC;YACpC,kCAAkC;YAClC,mCAAmC;SACpC;QACD,UAAU,EAAE,GAAG;KAChB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,iCAAiC;YACjC,oCAAoC;YACpC,iDAAiD;YACjD,4CAA4C;SAC7C;QACD,YAAY,EAAE;YACZ,qEAAqE;YACrE,qCAAqC;YACrC,6BAA6B;YAC7B,2BAA2B;SAC5B;QACD,UAAU,EAAE,EAAE;KACf;IACD,OAAO,EAAE;QACP,QAAQ,EAAE;YACR,yBAAyB;YACzB,+BAA+B;YAC/B,kCAAkC;YAClC,4CAA4C;SAC7C;QACD,YAAY,EAAE;YACZ,wCAAwC;YACxC,sCAAsC;YACtC,0BAA0B;YAC1B,6BAA6B;SAC9B;QACD,UAAU,EAAE,GAAG;KAChB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE;YACR,iCAAiC;YACjC,2CAA2C;YAC3C,6CAA6C;YAC7C,6CAA6C;SAC9C;QACD,YAAY,EAAE;YACZ,0CAA0C;YAC1C,iCAAiC;YACjC,yBAAyB;YACzB,+BAA+B;SAChC;QACD,UAAU,EAAE,EAAE;KACf;CACF,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC7D,MAAM,CAAC,cAAc,CACnB,kBAAkB,EAClB;QACE,WAAW,EACT,kEAAkE;QACpE,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAChD,aAAa,CACd;YACD,KAAK,EAAE,CAAC;iBACL,IAAI,CAAC,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;iBAChE,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,0DAA0D,CAAC;YACvE,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,oCAAoC,CAAC;iBAC7C,QAAQ,CAAC,0BAA0B,CAAC;YACvC,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CAAC,uCAAuC,CAAC;SACrD;KACF,EACD,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzC,MAAM,UAAU,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CACvC,CAAC;QACF,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,IAAI,EAAE,CAC3C,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,GAAG,CAAC,CAC7D,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAEtD,gDAAgD;QAChD,MAAM,kBAAkB,GAAG,UAAU;aAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvB,OAAO,UAAU,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,wBAAwB,IAAI,eAAe,KAAK;;;;wBAI5C,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;iCAG9B,QAAQ,oBAAoB,YAAY;+BAC1C,WAAW,qBAAqB,YAAY;oCACvC,QAAQ,oBAAoB,YAAY;kDAC1B,UAAU,oBAAoB,YAAY;EAC1F,kBAAkB;;;;EAIlB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAG/C,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;uCAMV;qBAC1B;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerFilesystemQueryPrompt(server: McpServer): void;
3
- //# sourceMappingURL=filesystem-query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-query.d.ts","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyEzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6HrE"}
@@ -1,168 +0,0 @@
1
- import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
2
- import { z } from 'zod';
3
- import { DEFAULT_EXCLUDES, pathCompleter } from './shared.js';
4
- const OPERATIONS = {
5
- explore: {
6
- tools: `1. \`directory_tree\` maxDepth={depth} excludePatterns={excludes} → hierarchy
7
- 2. \`analyze_directory\` excludePatterns={excludes} → stats
8
- 3. \`list_directory\` sortBy="modified" → recent activity`,
9
- deliverables: `- Structure overview & folder purposes
10
- - File distribution by type
11
- - Key config/entry files
12
- - Notable findings`,
13
- requiresPattern: false,
14
- usesDepth: true,
15
- },
16
- 'find-files': {
17
- tools: `1. \`search_files\` pattern="{pattern}" excludePatterns={excludes} maxResults=100 → find matches
18
- 2. \`read_multiple_files\` → batch examine contents
19
- 3. \`get_file_info\` → metadata if needed`,
20
- deliverables: `- Matched files with sizes (up to 100 results)
21
- - Content summary of key files
22
- - Related pattern suggestions`,
23
- requiresPattern: true,
24
- usesDepth: true,
25
- maxResults: 100,
26
- },
27
- 'search-code': {
28
- tools: `1. \`search_content\` pattern="{pattern}" contextLines=2 maxResults=50 excludePatterns={excludes} → find matches
29
- 2. \`read_multiple_files\` → batch read for full context`,
30
- deliverables: `- Match count & files affected (up to 50 matches)
31
- - Key matches with surrounding context
32
- - Pattern usage analysis
33
- - Suggested refactoring if duplicates found`,
34
- requiresPattern: true,
35
- usesDepth: false,
36
- maxResults: 50,
37
- },
38
- 'analyze-size': {
39
- tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → size stats
40
- 2. \`directory_tree\` includeSize=true maxDepth={depth} excludePatterns={excludes} → visualize
41
- 3. \`search_files\` sortBy="size" maxResults=20 → largest files`,
42
- deliverables: `- Total size & file counts
43
- - Top 10 largest files with paths
44
- - Size breakdown by extension
45
- - Cleanup suggestions (large/unused files)`,
46
- requiresPattern: false,
47
- usesDepth: true,
48
- },
49
- 'recent-changes': {
50
- tools: `1. \`analyze_directory\` maxDepth={depth} excludePatterns={excludes} → recentlyModified
51
- 2. \`list_directory\` sortBy="modified" recursive=true maxDepth={depth}
52
- 3. \`read_multiple_files\` → batch examine recent files`,
53
- deliverables: `- Recent activity timeline (last 24h, 7d, 30d)
54
- - Most active directories
55
- - Change patterns & hot spots
56
- - Files to review`,
57
- requiresPattern: false,
58
- usesDepth: true,
59
- },
60
- };
61
- export function registerFilesystemQueryPrompt(server) {
62
- server.registerPrompt('filesystem-query', {
63
- description: 'Guided filesystem operations: explore, find, search, size, changes',
64
- argsSchema: {
65
- path: completable(z.string().min(1).describe('Target path'), pathCompleter),
66
- operation: z
67
- .enum([
68
- 'explore',
69
- 'find-files',
70
- 'search-code',
71
- 'analyze-size',
72
- 'recent-changes',
73
- ])
74
- .describe('Operation type'),
75
- pattern: z
76
- .string()
77
- .optional()
78
- .describe('Search pattern (glob for find-files, regex for search-code)'),
79
- depth: z
80
- .number()
81
- .int()
82
- .min(1)
83
- .max(20)
84
- .optional()
85
- .default(5)
86
- .describe('Max depth (1-20, default: 5)'),
87
- caseSensitive: z
88
- .boolean()
89
- .optional()
90
- .default(false)
91
- .describe('Case-sensitive search (search-code only)'),
92
- },
93
- }, ({ path, operation, pattern, depth, caseSensitive }) => {
94
- const config = OPERATIONS[operation];
95
- // Type guard - should never happen with enum validation, but TypeScript needs this
96
- if (!config) {
97
- return {
98
- messages: [
99
- {
100
- role: 'user',
101
- content: {
102
- type: 'text',
103
- text: `Unknown operation: "${operation}". Valid operations: ${Object.keys(OPERATIONS).join(', ')}`,
104
- },
105
- },
106
- ],
107
- };
108
- }
109
- const excludesJson = JSON.stringify(DEFAULT_EXCLUDES);
110
- // Validate pattern requirement
111
- if (config.requiresPattern && !pattern) {
112
- return {
113
- messages: [
114
- {
115
- role: 'user',
116
- content: {
117
- type: 'text',
118
- text: `⚠️ The "${operation}" operation requires a pattern.
119
-
120
- Please provide:
121
- - For **find-files**: a glob pattern (e.g., "**/*.ts", "src/**/*.json")
122
- - For **search-code**: a regex pattern (e.g., "TODO|FIXME", "function\\s+\\w+")`,
123
- },
124
- },
125
- ],
126
- };
127
- }
128
- // Build tools section with substitutions
129
- const tools = config.tools
130
- .replace(/{depth}/g, String(depth))
131
- .replace(/{excludes}/g, excludesJson)
132
- .replace(/{pattern}/g, pattern ?? '*');
133
- // Build search options for search-code
134
- const searchOptions = operation === 'search-code'
135
- ? ` caseSensitive=${String(caseSensitive)}`
136
- : '';
137
- const patternInfo = pattern ? ` pattern="${pattern}"` : '';
138
- const depthInfo = config.usesDepth ? ` maxDepth=${String(depth)}` : '';
139
- const promptText = `**${operation.charAt(0).toUpperCase() + operation.slice(1)}** "${path}"${patternInfo}${depthInfo}${searchOptions}
140
-
141
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
142
-
143
- **Default excludes:** ${DEFAULT_EXCLUDES.join(', ')}
144
-
145
- **Tools:**
146
- ${tools}
147
-
148
- **Deliverables:**
149
- ${config.deliverables}
150
-
151
- **Best Practices:**
152
- - Use \`read_multiple_files\` to batch read (more efficient than sequential reads)
153
- - Stop early if results are sufficient
154
- - Report any inaccessible paths encountered`;
155
- return {
156
- messages: [
157
- {
158
- role: 'user',
159
- content: {
160
- type: 'text',
161
- text: promptText,
162
- },
163
- },
164
- ],
165
- };
166
- });
167
- }
168
- //# sourceMappingURL=filesystem-query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem-query.js","sourceRoot":"","sources":["../../src/prompts/filesystem-query.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerFindDuplicatesPrompt(server: McpServer): void;
3
- //# sourceMappingURL=find-duplicates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-duplicates.d.ts","sourceRoot":"","sources":["../../src/prompts/find-duplicates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgFpE"}