@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,77 +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 duplicate scanning (adds minified/bundled files to base excludes)
5
- const DUPLICATE_EXCLUDES = buildExcludes('minified', 'bundled');
6
- export function registerFindDuplicatesPrompt(server) {
7
- server.registerPrompt('find-duplicates', {
8
- description: 'Find duplicate code, similar patterns, and refactoring opportunities',
9
- argsSchema: {
10
- path: completable(z.string().min(1).describe('Root path to search'), pathCompleter),
11
- pattern: z
12
- .string()
13
- .optional()
14
- .default('**/*.{ts,js,tsx,jsx,py,java}')
15
- .describe('Source file glob pattern'),
16
- searchTerm: z
17
- .string()
18
- .optional()
19
- .describe('Specific function/pattern to find duplicates of'),
20
- minLines: z
21
- .number()
22
- .int()
23
- .min(2)
24
- .max(50)
25
- .optional()
26
- .default(5)
27
- .describe('Minimum lines to consider as duplicate (default: 5)'),
28
- },
29
- }, ({ path, pattern, searchTerm, minLines }) => {
30
- const excludePatterns = JSON.stringify(DUPLICATE_EXCLUDES);
31
- const searchInstructions = searchTerm
32
- ? `\`search_content\` pattern="${searchTerm}" contextLines=2 → find all occurrences`
33
- : `\`search_content\` → find duplicates using these patterns:
34
- - Function signatures: \`(export )?(async )?(function|const)\\s+\\w+\`
35
- - Import blocks: \`^import .+ from\`
36
- - Error handlers: \`catch\\s*\\(\` or \`\\.catch\\(\`
37
- - Repeated utility patterns: loops, conditionals, API calls`;
38
- return {
39
- messages: [
40
- {
41
- role: 'user',
42
- content: {
43
- type: 'text',
44
- text: `Find duplicate code in "${path}".
45
-
46
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
47
-
48
- **Workflow:**
49
- 1. \`search_files\` pattern="${pattern}" excludePatterns=${excludePatterns}
50
- 2. \`analyze_directory\` excludePatterns=${excludePatterns} → identify similar-sized files (potential copies)
51
- 3. ${searchInstructions}
52
- 4. \`read_multiple_files\` → batch compare suspect files
53
-
54
- **Duplicate Detection Criteria (minimum ${minLines} lines):**
55
- - Code blocks that are character-for-character identical
56
- - Code with only variable/parameter name differences
57
- - Structural duplicates: same logic, different formatting
58
-
59
- **Report Format:**
60
- | Category | Description |
61
- |----------|-------------|
62
- | **Exact duplicates** | Identical code blocks with file:line locations |
63
- | **Near duplicates** | 80%+ similar code, highlight differences |
64
- | **Extractable patterns** | Repeated logic → shared utility/hook candidates |
65
- | **Refactoring plan** | Priority order, files affected, breaking change risks |
66
-
67
- **For each duplicate found, provide:**
68
- 1. File locations (all occurrences)
69
- 2. Code snippet (first occurrence)
70
- 3. Suggested abstraction (function name, module location)`,
71
- },
72
- },
73
- ],
74
- };
75
- });
76
- }
77
- //# sourceMappingURL=find-duplicates.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-duplicates.js","sourceRoot":"","sources":["../../src/prompts/find-duplicates.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,0FAA0F;AAC1F,MAAM,kBAAkB,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAEhE,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,cAAc,CACnB,iBAAiB,EACjB;QACE,WAAW,EACT,sEAAsE;QACxE,UAAU,EAAE;YACV,IAAI,EAAE,WAAW,CACf,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EACjD,aAAa,CACd;YACD,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,8BAA8B,CAAC;iBACvC,QAAQ,CAAC,0BAA0B,CAAC;YACvC,UAAU,EAAE,CAAC;iBACV,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;YAC9D,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,CAAC,CAAC;iBACV,QAAQ,CAAC,qDAAqD,CAAC;SACnE;KACF,EACD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAE3D,MAAM,kBAAkB,GAAG,UAAU;YACnC,CAAC,CAAC,+BAA+B,UAAU,yCAAyC;YACpF,CAAC,CAAC;;;;4DAIkD,CAAC;QAEvD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2BAA2B,IAAI;;;;;+BAKpB,OAAO,qBAAqB,eAAe;2CAC/B,eAAe;KACrD,kBAAkB;;;0CAGmB,QAAQ;;;;;;;;;;;;;;;;0DAgBQ;qBAC7C;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 registerAllPrompts(server: McpServer): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAM1D"}
@@ -1,13 +0,0 @@
1
- import { registerAnalyzeCodebasePrompt } from './analyze-codebase.js';
2
- import { registerFilesystemQueryPrompt } from './filesystem-query.js';
3
- import { registerFindDuplicatesPrompt } from './find-duplicates.js';
4
- import { registerProjectOverviewPrompt } from './project-overview.js';
5
- import { registerSearchAndReplacePrompt } from './search-and-replace.js';
6
- export function registerAllPrompts(server) {
7
- registerProjectOverviewPrompt(server);
8
- registerAnalyzeCodebasePrompt(server);
9
- registerFindDuplicatesPrompt(server);
10
- registerSearchAndReplacePrompt(server);
11
- registerFilesystemQueryPrompt(server);
12
- }
13
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerProjectOverviewPrompt(server: McpServer): void;
3
- //# sourceMappingURL=project-overview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/project-overview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+FrE"}
@@ -1,122 +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 project overview (adds framework-specific dirs)
5
- const PROJECT_EXCLUDES = buildExcludes('nextjs', 'nuxtjs');
6
- // Config files to look for by category
7
- const CONFIG_FILES = {
8
- project: [
9
- 'package.json',
10
- 'pyproject.toml',
11
- 'Cargo.toml',
12
- 'go.mod',
13
- 'pom.xml',
14
- 'build.gradle',
15
- ],
16
- typescript: ['tsconfig.json', 'jsconfig.json'],
17
- build: [
18
- 'vite.config.*',
19
- 'webpack.config.*',
20
- 'rollup.config.*',
21
- 'next.config.*',
22
- 'nuxt.config.*',
23
- ],
24
- lint: ['.eslintrc*', 'eslint.config.*', '.prettierrc*', 'biome.json'],
25
- docker: ['Dockerfile', 'docker-compose.yml', 'docker-compose.yaml'],
26
- ci: ['.github/workflows/*.yml', '.gitlab-ci.yml'],
27
- docs: ['README.md', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE'],
28
- env: ['.env.example', '.env.sample', '.env.template'],
29
- };
30
- // Build flat list of priority config files for the prompt
31
- function getConfigFileList() {
32
- return Object.entries(CONFIG_FILES)
33
- .map(([category, files]) => `- **${category}**: ${files.slice(0, 3).join(', ')}`)
34
- .join('\n');
35
- }
36
- export function registerProjectOverviewPrompt(server) {
37
- server.registerPrompt('project-overview', {
38
- description: 'Quick overview of project structure, tech stack, and key files',
39
- argsSchema: {
40
- path: completable(z.string().min(1).describe('Project root path'), pathCompleter),
41
- depth: z
42
- .number()
43
- .int()
44
- .min(1)
45
- .max(10)
46
- .optional()
47
- .default(4)
48
- .describe('Tree depth (1-10, default: 4)'),
49
- includeCI: z
50
- .boolean()
51
- .optional()
52
- .default(false)
53
- .describe('Include CI/CD config analysis'),
54
- },
55
- }, ({ path, depth, includeCI }) => {
56
- const excludesJson = JSON.stringify(PROJECT_EXCLUDES);
57
- const configList = getConfigFileList();
58
- // Priority files to always try reading
59
- const priorityFiles = [
60
- 'package.json',
61
- 'README.md',
62
- 'tsconfig.json',
63
- ...(includeCI ? ['.github/workflows/*.yml'] : []),
64
- ];
65
- return {
66
- messages: [
67
- {
68
- role: 'user',
69
- content: {
70
- type: 'text',
71
- text: `Analyze project at "${path}".
72
-
73
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
74
-
75
- **Default excludes:** ${PROJECT_EXCLUDES.slice(0, 4).join(', ')}
76
-
77
- **Workflow:**
78
- 1. \`directory_tree\` maxDepth=${String(depth)} excludePatterns=${excludesJson} → structure
79
- 2. \`search_files\` pattern="*config*|*.json|*.toml|*.yml" excludePatterns=${excludesJson} → find config files
80
- 3. \`analyze_directory\` excludePatterns=${excludesJson} → stats & largest files
81
- 4. \`read_multiple_files\` → batch read found configs (priority: ${priorityFiles.join(', ')})
82
-
83
- **Config files to look for:**
84
- ${configList}
85
-
86
- **Deliverables:**
87
-
88
- | Section | Details |
89
- |---------|---------|
90
- | **Tech Stack** | Languages, frameworks, runtime versions |
91
- | **Package Manager** | npm/yarn/pnpm + lock file present |
92
- | **Build System** | Bundler, compiler, scripts |
93
- | **Folder Structure** | src/, lib/, tests/ conventions |
94
- | **Entry Points** | main, bin, exports in package.json |
95
- | **Dependencies** | Key deps vs devDeps, outdated indicators |
96
- | **Code Quality** | Linting, formatting, type checking setup |
97
- ${includeCI ? '| **CI/CD** | Workflows, test/deploy pipelines |' : ''}
98
-
99
- **Output Format:**
100
- \`\`\`
101
- ## Project: {name}
102
- **Type**: {monorepo|library|application|cli}
103
- **Stack**: {languages} + {frameworks}
104
- **Build**: {tool} → {output}
105
-
106
- ### Structure
107
- {tree summary}
108
-
109
- ### Key Findings
110
- - {finding 1}
111
- - {finding 2}
112
-
113
- ### Recommendations
114
- - {recommendation if any}
115
- \`\`\``,
116
- },
117
- },
118
- ],
119
- };
120
- });
121
- }
122
- //# sourceMappingURL=project-overview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-overview.js","sourceRoot":"","sources":["../../src/prompts/project-overview.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 registerSearchAndReplacePrompt(server: McpServer): void;
3
- //# sourceMappingURL=search-and-replace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-and-replace.d.ts","sourceRoot":"","sources":["../../src/prompts/search-and-replace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkJtE"}
@@ -1,130 +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 search-and-replace (adds lock/minified files)
5
- const SEARCH_REPLACE_EXCLUDES = buildExcludes('lockFiles', 'minified');
6
- export function registerSearchAndReplacePrompt(server) {
7
- server.registerPrompt('search-and-replace-plan', {
8
- description: 'Plan search & replace with impact analysis and safety categorization (read-only analysis)',
9
- argsSchema: {
10
- path: completable(z.string().min(1).describe('Root path to search'), pathCompleter),
11
- searchPattern: z
12
- .string()
13
- .min(1)
14
- .describe('Search pattern (regex supported, use isLiteral=true for plain text)'),
15
- replacement: z.string().describe('Replacement text'),
16
- filePattern: z
17
- .string()
18
- .optional()
19
- .default('**/*.{ts,js,tsx,jsx,py,java,go,rs,md,json}')
20
- .describe('File glob pattern'),
21
- caseSensitive: z
22
- .boolean()
23
- .optional()
24
- .default(false)
25
- .describe('Case sensitive match'),
26
- wholeWord: z
27
- .boolean()
28
- .optional()
29
- .default(false)
30
- .describe('Match whole words only'),
31
- isLiteral: z
32
- .boolean()
33
- .optional()
34
- .default(false)
35
- .describe('Treat search pattern as literal text (auto-escape regex chars)'),
36
- maxResults: z
37
- .number()
38
- .int()
39
- .min(1)
40
- .max(500)
41
- .optional()
42
- .default(100)
43
- .describe('Maximum matches to analyze (default: 100)'),
44
- },
45
- }, ({ path, searchPattern, replacement, filePattern, caseSensitive, wholeWord, isLiteral, maxResults, }) => {
46
- const excludesJson = JSON.stringify(SEARCH_REPLACE_EXCLUDES);
47
- // Build search options string
48
- const searchOptions = [
49
- `pattern="${searchPattern}"`,
50
- `filePattern="${filePattern}"`,
51
- `excludePatterns=${excludesJson}`,
52
- 'contextLines=2',
53
- `maxResults=${maxResults}`,
54
- `caseSensitive=${String(caseSensitive)}`,
55
- `wholeWord=${String(wholeWord)}`,
56
- `isLiteral=${String(isLiteral)}`,
57
- ].join(' ');
58
- return {
59
- messages: [
60
- {
61
- role: 'user',
62
- content: {
63
- type: 'text',
64
- text: `**Search & Replace Analysis** for "${path}"
65
-
66
- ⚠️ **READ-ONLY ANALYSIS** - This server cannot modify files. This prompt generates a replacement plan for manual execution or use with other tools.
67
-
68
- ⚠️ First run \`list_allowed_directories\` to verify path is accessible.
69
-
70
- **Operation:**
71
- | Field | Value |
72
- |-------|-------|
73
- | Search | \`${searchPattern}\` |
74
- | Replace | \`${replacement}\` |
75
- | Files | \`${filePattern}\` |
76
- | Case-sensitive | ${String(caseSensitive)} |
77
- | Whole word | ${String(wholeWord)} |
78
- | Literal (no regex) | ${String(isLiteral)} |
79
- | Max results | ${maxResults} |
80
-
81
- **Default excludes:** ${SEARCH_REPLACE_EXCLUDES.slice(0, 4).join(', ')}
82
-
83
- **Workflow:**
84
- 1. \`search_content\` ${searchOptions}
85
- 2. \`read_multiple_files\` → batch examine files with complex matches
86
-
87
- **Categorize each match:**
88
- | Category | Criteria | Action |
89
- |----------|----------|--------|
90
- | ✅ **Safe** | Simple, isolated, no side effects | Auto-replaceable |
91
- | ⚠️ **Review** | In comments, strings, or complex context | Manual verification needed |
92
- | ❌ **Skip** | False positive, partial match, generated code | Do not replace |
93
-
94
- **Impact Analysis:**
95
- - API changes (function signatures, exports)
96
- - Import/require statements
97
- - Test files & assertions
98
- - Documentation & comments
99
- - Config files (may need special handling)
100
-
101
- **Deliverables:**
102
-
103
- 1. **Summary Table:**
104
- | File | Matches | Safe | Review | Skip |
105
- |------|---------|------|--------|------|
106
-
107
- 2. **Diff Preview** (for each match):
108
- \`\`\`diff
109
- - {original line with match highlighted}
110
- + {line after replacement}
111
- \`\`\`
112
-
113
- 3. **Execution Plan:**
114
- - Phase 1: Safe replacements (list files)
115
- - Phase 2: Review required (list files + concerns)
116
- - Phase 3: Related updates (imports, tests, docs)
117
-
118
- 4. **Risk Assessment:**
119
- - Breaking change likelihood (High/Medium/Low)
120
- - Rollback strategy
121
- - Files to backup first
122
-
123
- ⚠️ **If matches exceed ${maxResults}**: Report total count and recommend narrowing \`filePattern\` or \`searchPattern\`.`,
124
- },
125
- },
126
- ],
127
- };
128
- });
129
- }
130
- //# sourceMappingURL=search-and-replace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-and-replace.js","sourceRoot":"","sources":["../../src/prompts/search-and-replace.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export declare function pathCompleter(value: string): string[];
2
- export declare const DEFAULT_EXCLUDES: readonly ["node_modules/**", ".git/**", "dist/**", "build/**", "coverage/**"];
3
- export declare const EXTENDED_EXCLUDES: {
4
- readonly minified: readonly ["*.min.js"];
5
- readonly bundled: readonly ["*.bundle.js"];
6
- readonly lockFiles: readonly ["*.lock"];
7
- readonly nextjs: readonly [".next/**"];
8
- readonly nuxtjs: readonly [".nuxt/**"];
9
- };
10
- export declare function buildExcludes(...extensions: (keyof typeof EXTENDED_EXCLUDES)[]): string[];
11
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/prompts/shared.ts"],"names":[],"mappings":"AAGA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAQrD;AAGD,eAAO,MAAM,gBAAgB,+EAMnB,CAAC;AAGX,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC;AAGX,wBAAgB,aAAa,CAC3B,GAAG,UAAU,EAAE,CAAC,MAAM,OAAO,iBAAiB,CAAC,EAAE,GAChD,MAAM,EAAE,CAKV"}
@@ -1,32 +0,0 @@
1
- import { getAllowedDirectories } from '../lib/path-validation.js';
2
- // Path autocompletion for prompt arguments
3
- export function pathCompleter(value) {
4
- const dirs = getAllowedDirectories();
5
- const lowerValue = value.toLowerCase();
6
- return dirs.filter((d) => d.toLowerCase().includes(lowerValue) ||
7
- lowerValue.includes(d.toLowerCase().slice(0, 10)));
8
- }
9
- // Common directories to exclude from filesystem operations
10
- export const DEFAULT_EXCLUDES = [
11
- 'node_modules/**',
12
- '.git/**',
13
- 'dist/**',
14
- 'build/**',
15
- 'coverage/**',
16
- ];
17
- // Extended exclude patterns for different use cases
18
- export const EXTENDED_EXCLUDES = {
19
- minified: ['*.min.js'],
20
- bundled: ['*.bundle.js'],
21
- lockFiles: ['*.lock'],
22
- nextjs: ['.next/**'],
23
- nuxtjs: ['.nuxt/**'],
24
- };
25
- // Build exclude patterns by combining base with extensions
26
- export function buildExcludes(...extensions) {
27
- return [
28
- ...DEFAULT_EXCLUDES,
29
- ...extensions.flatMap((ext) => [...EXTENDED_EXCLUDES[ext]]),
30
- ];
31
- }
32
- //# sourceMappingURL=shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/prompts/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,IAAI,GAAG,qBAAqB,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACpD,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,SAAS;IACT,SAAS;IACT,UAAU;IACV,aAAa;CACL,CAAC;AAEX,oDAAoD;AACpD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,CAAC,UAAU,CAAU;IAC/B,OAAO,EAAE,CAAC,aAAa,CAAU;IACjC,SAAS,EAAE,CAAC,QAAQ,CAAU;IAC9B,MAAM,EAAE,CAAC,UAAU,CAAU;IAC7B,MAAM,EAAE,CAAC,UAAU,CAAU;CACrB,CAAC;AAEX,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAC3B,GAAG,UAA8C;IAEjD,OAAO;QACL,GAAG,gBAAgB;QACnB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerAllResources(server: McpServer): void;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwE5D"}
@@ -1,54 +0,0 @@
1
- import { getAllowedDirectories } from '../lib/path-validation.js';
2
- export function registerAllResources(server) {
3
- // Static resource: allowed directories configuration
4
- server.registerResource('allowed-directories', 'config://allowed-directories', {
5
- title: 'Allowed Directories',
6
- description: 'List of directories this server is permitted to access. ' +
7
- 'All filesystem operations are sandboxed to these paths.',
8
- mimeType: 'application/json',
9
- }, (uri) => ({
10
- contents: [
11
- {
12
- uri: uri.href,
13
- mimeType: 'application/json',
14
- text: JSON.stringify({
15
- allowedDirectories: getAllowedDirectories(),
16
- count: getAllowedDirectories().length,
17
- }, null, 2),
18
- },
19
- ],
20
- }));
21
- // Static resource: server capabilities summary
22
- server.registerResource('server-info', 'config://server-info', {
23
- title: 'Server Information',
24
- description: 'Summary of available tools, their purposes, and usage guidelines.',
25
- mimeType: 'application/json',
26
- }, (uri) => ({
27
- contents: [
28
- {
29
- uri: uri.href,
30
- mimeType: 'application/json',
31
- text: JSON.stringify({
32
- name: 'filesystem-context-mcp',
33
- type: 'read-only',
34
- toolCategories: {
35
- discovery: [
36
- 'list_allowed_directories',
37
- 'directory_tree',
38
- 'list_directory',
39
- ],
40
- search: ['search_files', 'search_content'],
41
- read: ['read_file', 'read_multiple_files', 'read_media_file'],
42
- analysis: ['analyze_directory', 'get_file_info'],
43
- },
44
- security: {
45
- readOnly: true,
46
- pathValidation: true,
47
- symlinkProtection: true,
48
- },
49
- }, null, 2),
50
- },
51
- ],
52
- }));
53
- }
54
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,qDAAqD;IACrD,MAAM,CAAC,gBAAgB,CACrB,qBAAqB,EACrB,8BAA8B,EAC9B;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,0DAA0D;YAC1D,yDAAyD;QAC3D,QAAQ,EAAE,kBAAkB;KAC7B,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACR,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,kBAAkB,EAAE,qBAAqB,EAAE;oBAC3C,KAAK,EAAE,qBAAqB,EAAE,CAAC,MAAM;iBACtC,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC,CACH,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,gBAAgB,CACrB,aAAa,EACb,sBAAsB,EACtB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,mEAAmE;QACrE,QAAQ,EAAE,kBAAkB;KAC7B,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACR,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,GAAG,CAAC,IAAI;gBACb,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,IAAI,EAAE,wBAAwB;oBAC9B,IAAI,EAAE,WAAW;oBACjB,cAAc,EAAE;wBACd,SAAS,EAAE;4BACT,0BAA0B;4BAC1B,gBAAgB;4BAChB,gBAAgB;yBACjB;wBACD,MAAM,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;wBAC1C,IAAI,EAAE,CAAC,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;wBAC7D,QAAQ,EAAE,CAAC,mBAAmB,EAAE,eAAe,CAAC;qBACjD;oBACD,QAAQ,EAAE;wBACR,QAAQ,EAAE,IAAI;wBACd,cAAc,EAAE,IAAI;wBACpB,iBAAiB,EAAE,IAAI;qBACxB;iBACF,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,12 +0,0 @@
1
- export declare function validateLineRange(params: {
2
- lineStart?: number;
3
- lineEnd?: number;
4
- head?: number;
5
- tail?: number;
6
- path: string;
7
- }): void;
8
- export declare function validateHeadTail(params: {
9
- head?: number;
10
- tail?: number;
11
- }): void;
12
- //# sourceMappingURL=validators.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/schemas/validators.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CA4CP;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAWP"}
@@ -1,35 +0,0 @@
1
- import { ErrorCode, McpError } from '../lib/errors.js';
2
- // Validates line range parameters
3
- export function validateLineRange(params) {
4
- const { lineStart, lineEnd, head, tail, path } = params;
5
- // Check for partial lineRange specification
6
- const hasLineStart = lineStart !== undefined;
7
- const hasLineEnd = lineEnd !== undefined;
8
- if (hasLineStart !== hasLineEnd) {
9
- const missing = hasLineStart ? 'lineEnd' : 'lineStart';
10
- const provided = hasLineStart ? 'lineStart' : 'lineEnd';
11
- throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: ${provided} requires ${missing} to also be specified`, path, { lineStart, lineEnd });
12
- }
13
- // Validate lineEnd >= lineStart
14
- if (hasLineStart && hasLineEnd && lineEnd < lineStart) {
15
- throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: lineEnd (${lineEnd}) must be >= lineStart (${lineStart})`, path, { lineStart, lineEnd });
16
- }
17
- // Check mutual exclusivity with head/tail
18
- const hasLineRange = hasLineStart && hasLineEnd;
19
- const optionsCount = [
20
- hasLineRange,
21
- head !== undefined,
22
- tail !== undefined,
23
- ].filter(Boolean).length;
24
- if (optionsCount > 1) {
25
- throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify multiple of lineRange (lineStart + lineEnd), head, or tail simultaneously', path, { lineStart, lineEnd, head, tail });
26
- }
27
- }
28
- // Validates head and tail are mutually exclusive
29
- export function validateHeadTail(params) {
30
- const { head, tail } = params;
31
- if (head !== undefined && tail !== undefined) {
32
- throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify both head and tail simultaneously', undefined, { head, tail });
33
- }
34
- }
35
- //# sourceMappingURL=validators.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/schemas/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,kCAAkC;AAClC,MAAM,UAAU,iBAAiB,CAAC,MAMjC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAExD,4CAA4C;IAC5C,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC;IAEzC,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;QACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACxD,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,sBAAsB,QAAQ,aAAa,OAAO,uBAAuB,EACzE,IAAI,EACJ,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,YAAY,IAAI,UAAU,IAAI,OAAO,GAAG,SAAS,EAAE,CAAC;QACtD,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,+BAA+B,OAAO,2BAA2B,SAAS,GAAG,EAC7E,IAAI,EACJ,EAAE,SAAS,EAAE,OAAO,EAAE,CACvB,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,MAAM,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC;IAChD,MAAM,YAAY,GAAG;QACnB,YAAY;QACZ,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,SAAS;KACnB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAEzB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,0FAA0F,EAC1F,IAAI,EACJ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CACnC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,gBAAgB,CAAC,MAGhC;IACC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE9B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,kDAAkD,EAClD,SAAS,EACT,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export { createErrorResponse, getErrorMessage } from './response-helpers.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,2 +0,0 @@
1
- export { createErrorResponse, getErrorMessage } from './response-helpers.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type ErrorCode } from '../lib/errors.js';
2
- export declare function getErrorMessage(error: unknown): string;
3
- interface ErrorResponse {
4
- [x: string]: unknown;
5
- content: {
6
- type: 'text';
7
- text: string;
8
- }[];
9
- structuredContent: {
10
- ok: false;
11
- error: {
12
- code: string;
13
- message: string;
14
- path?: string;
15
- suggestion?: string;
16
- };
17
- };
18
- isError: true;
19
- }
20
- export declare function createErrorResponse(error: unknown, defaultCode: ErrorCode, path?: string): ErrorResponse;
21
- export {};
22
- //# sourceMappingURL=response-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"response-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/response-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAE1B,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,UAAU,aAAa;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,iBAAiB,EAAE;QACjB,EAAE,EAAE,KAAK,CAAC;QACV,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IACF,OAAO,EAAE,IAAI,CAAC;CACf;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,SAAS,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAoBf"}
@@ -1,24 +0,0 @@
1
- import { createDetailedError, formatDetailedError, } from '../lib/errors.js';
2
- export function getErrorMessage(error) {
3
- return error instanceof Error ? error.message : String(error);
4
- }
5
- export function createErrorResponse(error, defaultCode, path) {
6
- const detailed = createDetailedError(error, path);
7
- // Use more specific code if classified, otherwise use default
8
- const finalCode = detailed.code === 'E_UNKNOWN' ? defaultCode : detailed.code;
9
- detailed.code = finalCode;
10
- return {
11
- content: [{ type: 'text', text: formatDetailedError(detailed) }],
12
- structuredContent: {
13
- ok: false,
14
- error: {
15
- code: detailed.code,
16
- message: detailed.message,
17
- path: detailed.path,
18
- suggestion: detailed.suggestion,
19
- },
20
- },
21
- isError: true,
22
- };
23
- }
24
- //# sourceMappingURL=response-helpers.js.map