@j0hanz/filesystem-context-mcp 1.2.6 → 1.2.8

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 (270) hide show
  1. package/dist/__tests__/lib/errors-classify.test.d.ts +2 -0
  2. package/dist/__tests__/lib/errors-classify.test.d.ts.map +1 -0
  3. package/dist/__tests__/lib/errors-classify.test.js +53 -0
  4. package/dist/__tests__/lib/errors-classify.test.js.map +1 -0
  5. package/dist/__tests__/lib/errors-detailed.test.d.ts +2 -0
  6. package/dist/__tests__/lib/errors-detailed.test.d.ts.map +1 -0
  7. package/dist/__tests__/lib/errors-detailed.test.js +38 -0
  8. package/dist/__tests__/lib/errors-detailed.test.js.map +1 -0
  9. package/dist/__tests__/lib/errors-is-node-error.test.d.ts +2 -0
  10. package/dist/__tests__/lib/errors-is-node-error.test.d.ts.map +1 -0
  11. package/dist/__tests__/lib/errors-is-node-error.test.js +21 -0
  12. package/dist/__tests__/lib/errors-is-node-error.test.js.map +1 -0
  13. package/dist/__tests__/lib/errors-mcp-error.test.d.ts +2 -0
  14. package/dist/__tests__/lib/errors-mcp-error.test.d.ts.map +1 -0
  15. package/dist/__tests__/lib/errors-mcp-error.test.js +29 -0
  16. package/dist/__tests__/lib/errors-mcp-error.test.js.map +1 -0
  17. package/dist/__tests__/lib/errors-node-map.test.d.ts +2 -0
  18. package/dist/__tests__/lib/errors-node-map.test.d.ts.map +1 -0
  19. package/dist/__tests__/lib/errors-node-map.test.js +16 -0
  20. package/dist/__tests__/lib/errors-node-map.test.js.map +1 -0
  21. package/dist/__tests__/lib/errors-suggestion.test.d.ts +2 -0
  22. package/dist/__tests__/lib/errors-suggestion.test.d.ts.map +1 -0
  23. package/dist/__tests__/lib/errors-suggestion.test.js +11 -0
  24. package/dist/__tests__/lib/errors-suggestion.test.js.map +1 -0
  25. package/dist/__tests__/lib/file-operations/analyze-directory-edge-cases.test.d.ts +2 -0
  26. package/dist/__tests__/lib/file-operations/analyze-directory-edge-cases.test.d.ts.map +1 -0
  27. package/dist/__tests__/lib/file-operations/analyze-directory-edge-cases.test.js +15 -0
  28. package/dist/__tests__/lib/file-operations/analyze-directory-edge-cases.test.js.map +1 -0
  29. package/dist/__tests__/lib/file-operations/analyze-directory.test.d.ts +2 -0
  30. package/dist/__tests__/lib/file-operations/analyze-directory.test.d.ts.map +1 -0
  31. package/dist/__tests__/lib/file-operations/analyze-directory.test.js +28 -0
  32. package/dist/__tests__/lib/file-operations/analyze-directory.test.js.map +1 -0
  33. package/dist/__tests__/lib/file-operations/directory-tree-edge-cases.test.d.ts +2 -0
  34. package/dist/__tests__/lib/file-operations/directory-tree-edge-cases.test.d.ts.map +1 -0
  35. package/dist/__tests__/lib/file-operations/directory-tree-edge-cases.test.js +29 -0
  36. package/dist/__tests__/lib/file-operations/directory-tree-edge-cases.test.js.map +1 -0
  37. package/dist/__tests__/lib/file-operations/directory-tree.test.d.ts +2 -0
  38. package/dist/__tests__/lib/file-operations/directory-tree.test.d.ts.map +1 -0
  39. package/dist/__tests__/lib/file-operations/directory-tree.test.js +75 -0
  40. package/dist/__tests__/lib/file-operations/directory-tree.test.js.map +1 -0
  41. package/dist/__tests__/lib/file-operations/get-file-info.test.d.ts +2 -0
  42. package/dist/__tests__/lib/file-operations/get-file-info.test.d.ts.map +1 -0
  43. package/dist/__tests__/lib/file-operations/get-file-info.test.js +17 -0
  44. package/dist/__tests__/lib/file-operations/get-file-info.test.js.map +1 -0
  45. package/dist/__tests__/lib/file-operations/list-directory-edge-cases.test.d.ts +2 -0
  46. package/dist/__tests__/lib/file-operations/list-directory-edge-cases.test.d.ts.map +1 -0
  47. package/dist/__tests__/lib/file-operations/list-directory-edge-cases.test.js +21 -0
  48. package/dist/__tests__/lib/file-operations/list-directory-edge-cases.test.js.map +1 -0
  49. package/dist/__tests__/lib/file-operations/list-directory.test.d.ts +2 -0
  50. package/dist/__tests__/lib/file-operations/list-directory.test.d.ts.map +1 -0
  51. package/dist/__tests__/lib/file-operations/list-directory.test.js +31 -0
  52. package/dist/__tests__/lib/file-operations/list-directory.test.js.map +1 -0
  53. package/dist/__tests__/lib/file-operations/read-media-file.test.d.ts +2 -0
  54. package/dist/__tests__/lib/file-operations/read-media-file.test.d.ts.map +1 -0
  55. package/dist/__tests__/lib/file-operations/read-media-file.test.js +21 -0
  56. package/dist/__tests__/lib/file-operations/read-media-file.test.js.map +1 -0
  57. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.d.ts +2 -0
  58. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.d.ts.map +1 -0
  59. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.js +19 -0
  60. package/dist/__tests__/lib/file-operations/read-multiple-files-edge-cases.test.js.map +1 -0
  61. package/dist/__tests__/lib/file-operations/read-multiple-files.test.d.ts +2 -0
  62. package/dist/__tests__/lib/file-operations/read-multiple-files.test.d.ts.map +1 -0
  63. package/dist/__tests__/lib/file-operations/read-multiple-files.test.js +39 -0
  64. package/dist/__tests__/lib/file-operations/read-multiple-files.test.js.map +1 -0
  65. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.d.ts +2 -0
  66. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.d.ts.map +1 -0
  67. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js +57 -0
  68. package/dist/__tests__/lib/file-operations/search-content-edge-cases.test.js.map +1 -0
  69. package/dist/__tests__/lib/file-operations/search-content.test.d.ts +2 -0
  70. package/dist/__tests__/lib/file-operations/search-content.test.d.ts.map +1 -0
  71. package/dist/__tests__/lib/file-operations/search-content.test.js +73 -0
  72. package/dist/__tests__/lib/file-operations/search-content.test.js.map +1 -0
  73. package/dist/__tests__/lib/file-operations/search-files-edge-cases.test.d.ts +2 -0
  74. package/dist/__tests__/lib/file-operations/search-files-edge-cases.test.d.ts.map +1 -0
  75. package/dist/__tests__/lib/file-operations/search-files-edge-cases.test.js +13 -0
  76. package/dist/__tests__/lib/file-operations/search-files-edge-cases.test.js.map +1 -0
  77. package/dist/__tests__/lib/file-operations/search-files.test.d.ts +2 -0
  78. package/dist/__tests__/lib/file-operations/search-files.test.d.ts.map +1 -0
  79. package/dist/__tests__/lib/file-operations/search-files.test.js +31 -0
  80. package/dist/__tests__/lib/file-operations/search-files.test.js.map +1 -0
  81. package/dist/__tests__/lib/fixtures/file-ops-fixture.d.ts +7 -0
  82. package/dist/__tests__/lib/fixtures/file-ops-fixture.d.ts.map +1 -0
  83. package/dist/__tests__/lib/fixtures/file-ops-fixture.js +87 -0
  84. package/dist/__tests__/lib/fixtures/file-ops-fixture.js.map +1 -0
  85. package/dist/__tests__/lib/fixtures/file-ops-hooks.d.ts +2 -0
  86. package/dist/__tests__/lib/fixtures/file-ops-hooks.d.ts.map +1 -0
  87. package/dist/__tests__/lib/fixtures/file-ops-hooks.js +13 -0
  88. package/dist/__tests__/lib/fixtures/file-ops-hooks.js.map +1 -0
  89. package/dist/__tests__/lib/fs-helpers/file-type.test.d.ts +2 -0
  90. package/dist/__tests__/lib/fs-helpers/file-type.test.d.ts.map +1 -0
  91. package/dist/__tests__/lib/fs-helpers/file-type.test.js +15 -0
  92. package/dist/__tests__/lib/fs-helpers/file-type.test.js.map +1 -0
  93. package/dist/__tests__/lib/fs-helpers/head-file-edge-cases.test.d.ts +2 -0
  94. package/dist/__tests__/lib/fs-helpers/head-file-edge-cases.test.d.ts.map +1 -0
  95. package/dist/__tests__/lib/fs-helpers/head-file-edge-cases.test.js +19 -0
  96. package/dist/__tests__/lib/fs-helpers/head-file-edge-cases.test.js.map +1 -0
  97. package/dist/__tests__/lib/fs-helpers/head-file.test.d.ts +2 -0
  98. package/dist/__tests__/lib/fs-helpers/head-file.test.d.ts.map +1 -0
  99. package/dist/__tests__/lib/fs-helpers/head-file.test.js +12 -0
  100. package/dist/__tests__/lib/fs-helpers/head-file.test.js.map +1 -0
  101. package/dist/__tests__/lib/fs-helpers/is-hidden.test.d.ts +2 -0
  102. package/dist/__tests__/lib/fs-helpers/is-hidden.test.d.ts.map +1 -0
  103. package/dist/__tests__/lib/fs-helpers/is-hidden.test.js +7 -0
  104. package/dist/__tests__/lib/fs-helpers/is-hidden.test.js.map +1 -0
  105. package/dist/__tests__/lib/fs-helpers/is-probably-binary.test.d.ts +2 -0
  106. package/dist/__tests__/lib/fs-helpers/is-probably-binary.test.d.ts.map +1 -0
  107. package/dist/__tests__/lib/fs-helpers/is-probably-binary.test.js +33 -0
  108. package/dist/__tests__/lib/fs-helpers/is-probably-binary.test.js.map +1 -0
  109. package/dist/__tests__/lib/fs-helpers/read-file-edge-cases.test.d.ts +2 -0
  110. package/dist/__tests__/lib/fs-helpers/read-file-edge-cases.test.d.ts.map +1 -0
  111. package/dist/__tests__/lib/fs-helpers/read-file-edge-cases.test.js +41 -0
  112. package/dist/__tests__/lib/fs-helpers/read-file-edge-cases.test.js.map +1 -0
  113. package/dist/__tests__/lib/fs-helpers/read-file.test.d.ts +2 -0
  114. package/dist/__tests__/lib/fs-helpers/read-file.test.d.ts.map +1 -0
  115. package/dist/__tests__/lib/fs-helpers/read-file.test.js +21 -0
  116. package/dist/__tests__/lib/fs-helpers/read-file.test.js.map +1 -0
  117. package/dist/__tests__/lib/fs-helpers/tail-file-edge-cases.test.d.ts +2 -0
  118. package/dist/__tests__/lib/fs-helpers/tail-file-edge-cases.test.d.ts.map +1 -0
  119. package/dist/__tests__/lib/fs-helpers/tail-file-edge-cases.test.js +26 -0
  120. package/dist/__tests__/lib/fs-helpers/tail-file-edge-cases.test.js.map +1 -0
  121. package/dist/__tests__/lib/fs-helpers/tail-file.test.d.ts +2 -0
  122. package/dist/__tests__/lib/fs-helpers/tail-file.test.d.ts.map +1 -0
  123. package/dist/__tests__/lib/fs-helpers/tail-file.test.js +11 -0
  124. package/dist/__tests__/lib/fs-helpers/tail-file.test.js.map +1 -0
  125. package/dist/__tests__/lib/path-validation.test.js +93 -104
  126. package/dist/__tests__/lib/path-validation.test.js.map +1 -1
  127. package/dist/__tests__/schemas/validators.test.js +111 -115
  128. package/dist/__tests__/schemas/validators.test.js.map +1 -1
  129. package/dist/__tests__/security/filesystem-boundary.test.js +41 -36
  130. package/dist/__tests__/security/filesystem-boundary.test.js.map +1 -1
  131. package/dist/lib/errors.d.ts +0 -18
  132. package/dist/lib/errors.d.ts.map +1 -1
  133. package/dist/lib/errors.js +33 -34
  134. package/dist/lib/errors.js.map +1 -1
  135. package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -1
  136. package/dist/lib/file-operations/analyze-directory.js +74 -43
  137. package/dist/lib/file-operations/analyze-directory.js.map +1 -1
  138. package/dist/lib/file-operations/directory-helpers.d.ts +2 -19
  139. package/dist/lib/file-operations/directory-helpers.d.ts.map +1 -1
  140. package/dist/lib/file-operations/directory-helpers.js +26 -90
  141. package/dist/lib/file-operations/directory-helpers.js.map +1 -1
  142. package/dist/lib/file-operations/directory-tree-helpers.d.ts +38 -0
  143. package/dist/lib/file-operations/directory-tree-helpers.d.ts.map +1 -0
  144. package/dist/lib/file-operations/directory-tree-helpers.js +167 -0
  145. package/dist/lib/file-operations/directory-tree-helpers.js.map +1 -0
  146. package/dist/lib/file-operations/directory-tree.d.ts.map +1 -1
  147. package/dist/lib/file-operations/directory-tree.js +44 -154
  148. package/dist/lib/file-operations/directory-tree.js.map +1 -1
  149. package/dist/lib/file-operations/list-directory-helpers.d.ts +2 -1
  150. package/dist/lib/file-operations/list-directory-helpers.d.ts.map +1 -1
  151. package/dist/lib/file-operations/list-directory-helpers.js +16 -4
  152. package/dist/lib/file-operations/list-directory-helpers.js.map +1 -1
  153. package/dist/lib/file-operations/list-directory.d.ts +4 -2
  154. package/dist/lib/file-operations/list-directory.d.ts.map +1 -1
  155. package/dist/lib/file-operations/list-directory.js +39 -17
  156. package/dist/lib/file-operations/list-directory.js.map +1 -1
  157. package/dist/lib/file-operations/pattern-validator.d.ts +0 -10
  158. package/dist/lib/file-operations/pattern-validator.d.ts.map +1 -1
  159. package/dist/lib/file-operations/pattern-validator.js +44 -43
  160. package/dist/lib/file-operations/pattern-validator.js.map +1 -1
  161. package/dist/lib/file-operations/read-multiple-files.d.ts +3 -2
  162. package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -1
  163. package/dist/lib/file-operations/read-multiple-files.js +46 -29
  164. package/dist/lib/file-operations/read-multiple-files.js.map +1 -1
  165. package/dist/lib/file-operations/search/context-manager.d.ts +2 -0
  166. package/dist/lib/file-operations/search/context-manager.d.ts.map +1 -1
  167. package/dist/lib/file-operations/search/context-manager.js +11 -6
  168. package/dist/lib/file-operations/search/context-manager.js.map +1 -1
  169. package/dist/lib/file-operations/search/engine-options.d.ts +19 -0
  170. package/dist/lib/file-operations/search/engine-options.d.ts.map +1 -0
  171. package/dist/lib/file-operations/search/engine-options.js +32 -0
  172. package/dist/lib/file-operations/search/engine-options.js.map +1 -0
  173. package/dist/lib/file-operations/search/engine-stream.d.ts +6 -0
  174. package/dist/lib/file-operations/search/engine-stream.d.ts.map +1 -0
  175. package/dist/lib/file-operations/search/engine-stream.js +130 -0
  176. package/dist/lib/file-operations/search/engine-stream.js.map +1 -0
  177. package/dist/lib/file-operations/search/engine.d.ts +1 -17
  178. package/dist/lib/file-operations/search/engine.d.ts.map +1 -1
  179. package/dist/lib/file-operations/search/engine.js +7 -117
  180. package/dist/lib/file-operations/search/engine.js.map +1 -1
  181. package/dist/lib/file-operations/search/file-processor.d.ts.map +1 -1
  182. package/dist/lib/file-operations/search/file-processor.js +33 -25
  183. package/dist/lib/file-operations/search/file-processor.js.map +1 -1
  184. package/dist/lib/file-operations/search/match-strategy.d.ts.map +1 -1
  185. package/dist/lib/file-operations/search/match-strategy.js +49 -54
  186. package/dist/lib/file-operations/search/match-strategy.js.map +1 -1
  187. package/dist/lib/file-operations/search-files-helpers.d.ts +42 -0
  188. package/dist/lib/file-operations/search-files-helpers.d.ts.map +1 -0
  189. package/dist/lib/file-operations/search-files-helpers.js +180 -0
  190. package/dist/lib/file-operations/search-files-helpers.js.map +1 -0
  191. package/dist/lib/file-operations/search-files.d.ts +2 -9
  192. package/dist/lib/file-operations/search-files.d.ts.map +1 -1
  193. package/dist/lib/file-operations/search-files.js +8 -129
  194. package/dist/lib/file-operations/search-files.js.map +1 -1
  195. package/dist/lib/file-operations/sorting.d.ts +3 -2
  196. package/dist/lib/file-operations/sorting.d.ts.map +1 -1
  197. package/dist/lib/fs-helpers/binary-detect.d.ts.map +1 -1
  198. package/dist/lib/fs-helpers/binary-detect.js +16 -10
  199. package/dist/lib/fs-helpers/binary-detect.js.map +1 -1
  200. package/dist/lib/fs-helpers/fs-utils.d.ts.map +1 -1
  201. package/dist/lib/fs-helpers/fs-utils.js +16 -10
  202. package/dist/lib/fs-helpers/fs-utils.js.map +1 -1
  203. package/dist/lib/fs-helpers/readers/line-range.d.ts +4 -2
  204. package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -1
  205. package/dist/lib/fs-helpers/readers/line-range.js +21 -15
  206. package/dist/lib/fs-helpers/readers/line-range.js.map +1 -1
  207. package/dist/lib/fs-helpers/readers/read-file.d.ts +6 -3
  208. package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -1
  209. package/dist/lib/fs-helpers/readers/read-file.js +58 -19
  210. package/dist/lib/fs-helpers/readers/read-file.js.map +1 -1
  211. package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -1
  212. package/dist/lib/fs-helpers/readers/tail-file.js +27 -10
  213. package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -1
  214. package/dist/lib/fs-helpers/readers/utf8.d.ts.map +1 -1
  215. package/dist/lib/fs-helpers/readers/utf8.js +20 -10
  216. package/dist/lib/fs-helpers/readers/utf8.js.map +1 -1
  217. package/dist/lib/path-validation/allowed-directories.d.ts +1 -2
  218. package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -1
  219. package/dist/lib/path-validation/allowed-directories.js +25 -15
  220. package/dist/lib/path-validation/allowed-directories.js.map +1 -1
  221. package/dist/lib/path-validation/errors.d.ts +0 -1
  222. package/dist/lib/path-validation/errors.d.ts.map +1 -1
  223. package/dist/lib/path-validation/errors.js +27 -13
  224. package/dist/lib/path-validation/errors.js.map +1 -1
  225. package/dist/lib/path-validation/validators.d.ts.map +1 -1
  226. package/dist/lib/path-validation/validators.js +9 -3
  227. package/dist/lib/path-validation/validators.js.map +1 -1
  228. package/dist/lib/path-validation.d.ts +1 -1
  229. package/dist/lib/path-validation.d.ts.map +1 -1
  230. package/dist/lib/path-validation.js +1 -1
  231. package/dist/lib/path-validation.js.map +1 -1
  232. package/dist/schemas/outputs.d.ts +12 -12
  233. package/dist/server.d.ts.map +1 -1
  234. package/dist/server.js +79 -35
  235. package/dist/server.js.map +1 -1
  236. package/dist/tools/analyze-directory.d.ts.map +1 -1
  237. package/dist/tools/analyze-directory.js +1 -30
  238. package/dist/tools/analyze-directory.js.map +1 -1
  239. package/dist/tools/directory-tree.d.ts.map +1 -1
  240. package/dist/tools/directory-tree.js +11 -32
  241. package/dist/tools/directory-tree.js.map +1 -1
  242. package/dist/tools/get-file-info.d.ts.map +1 -1
  243. package/dist/tools/get-file-info.js +1 -12
  244. package/dist/tools/get-file-info.js.map +1 -1
  245. package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
  246. package/dist/tools/list-allowed-dirs.js +9 -1
  247. package/dist/tools/list-allowed-dirs.js.map +1 -1
  248. package/dist/tools/list-directory.d.ts.map +1 -1
  249. package/dist/tools/list-directory.js +27 -50
  250. package/dist/tools/list-directory.js.map +1 -1
  251. package/dist/tools/read-file.d.ts.map +1 -1
  252. package/dist/tools/read-file.js +28 -20
  253. package/dist/tools/read-file.js.map +1 -1
  254. package/dist/tools/read-multiple-files.d.ts.map +1 -1
  255. package/dist/tools/read-multiple-files.js +15 -14
  256. package/dist/tools/read-multiple-files.js.map +1 -1
  257. package/dist/tools/search-content.d.ts.map +1 -1
  258. package/dist/tools/search-content.js +20 -17
  259. package/dist/tools/search-content.js.map +1 -1
  260. package/dist/tools/search-files.d.ts.map +1 -1
  261. package/dist/tools/search-files.js +1 -27
  262. package/dist/tools/search-files.js.map +1 -1
  263. package/dist/tools/shared/formatting.d.ts +13 -0
  264. package/dist/tools/shared/formatting.d.ts.map +1 -0
  265. package/dist/tools/shared/formatting.js +31 -0
  266. package/dist/tools/shared/formatting.js.map +1 -0
  267. package/dist/tools/shared/search-formatting.d.ts.map +1 -1
  268. package/dist/tools/shared/search-formatting.js +32 -33
  269. package/dist/tools/shared/search-formatting.js.map +1 -1
  270. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { expect, it } from 'vitest';
2
2
  import { ErrorCode, McpError } from '../../lib/errors.js';
3
3
  function expectMcpError(fn, options) {
4
4
  try {
@@ -12,137 +12,133 @@ function expectMcpError(fn, options) {
12
12
  expect(mcpError.message).toContain(options.messageIncludes);
13
13
  }
14
14
  }
15
- // Inline validation functions (matching the implementation in tools)
16
- function validateLineRange(params) {
17
- const { lineStart, lineEnd, head, tail, path } = params;
15
+ function assertLineRangePair(lineStart, lineEnd, path) {
18
16
  const hasLineStart = lineStart !== undefined;
19
17
  const hasLineEnd = lineEnd !== undefined;
20
- if (hasLineStart !== hasLineEnd) {
21
- const missing = hasLineStart ? 'lineEnd' : 'lineStart';
22
- const provided = hasLineStart ? 'lineStart' : 'lineEnd';
23
- throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: ${provided} requires ${missing} to also be specified`, path);
24
- }
25
- if (hasLineStart && hasLineEnd && lineEnd < lineStart) {
26
- throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: lineEnd (${lineEnd}) must be >= lineStart (${lineStart})`, path);
27
- }
28
- const hasLineRange = hasLineStart && hasLineEnd;
18
+ if (hasLineStart === hasLineEnd)
19
+ return;
20
+ const missing = hasLineStart ? 'lineEnd' : 'lineStart';
21
+ const provided = hasLineStart ? 'lineStart' : 'lineEnd';
22
+ throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: ${provided} requires ${missing} to also be specified`, path);
23
+ }
24
+ function assertLineRangeOrder(lineStart, lineEnd, path) {
25
+ if (lineStart === undefined || lineEnd === undefined)
26
+ return;
27
+ if (lineEnd >= lineStart)
28
+ return;
29
+ throw new McpError(ErrorCode.E_INVALID_INPUT, `Invalid lineRange: lineEnd (${lineEnd}) must be >= lineStart (${lineStart})`, path);
30
+ }
31
+ function assertExclusiveLineOptions(hasLineRange, head, tail, path) {
29
32
  const optionsCount = [
30
33
  hasLineRange,
31
34
  head !== undefined,
32
35
  tail !== undefined,
33
36
  ].filter(Boolean).length;
34
- if (optionsCount > 1) {
35
- throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify multiple of lineRange (lineStart + lineEnd), head, or tail simultaneously', path);
36
- }
37
+ if (optionsCount <= 1)
38
+ return;
39
+ throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify multiple of lineRange (lineStart + lineEnd), head, or tail simultaneously', path);
40
+ }
41
+ function validateLineRange(params) {
42
+ const { lineStart, lineEnd, head, tail, path } = params;
43
+ assertLineRangePair(lineStart, lineEnd, path);
44
+ assertLineRangeOrder(lineStart, lineEnd, path);
45
+ const hasLineRange = lineStart !== undefined && lineEnd !== undefined;
46
+ assertExclusiveLineOptions(hasLineRange, head, tail, path);
37
47
  }
38
48
  function validateHeadTail(head, tail) {
39
49
  if (head !== undefined && tail !== undefined) {
40
50
  throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify both head and tail simultaneously');
41
51
  }
42
52
  }
43
- describe('validateLineRange', () => {
44
- const validCases = [
45
- {
46
- name: 'valid lineRange with both lineStart and lineEnd',
47
- params: { lineStart: 1, lineEnd: 10, path: '/test/file.txt' },
48
- },
49
- {
50
- name: 'no line options',
51
- params: { path: '/test/file.txt' },
52
- },
53
- {
54
- name: 'head option alone',
55
- params: { head: 10, path: '/test/file.txt' },
56
- },
57
- {
58
- name: 'tail option alone',
59
- params: { tail: 10, path: '/test/file.txt' },
60
- },
61
- {
62
- name: 'lineEnd equal to lineStart',
63
- params: { lineStart: 5, lineEnd: 5, path: '/test/file.txt' },
64
- },
65
- ];
66
- for (const testCase of validCases) {
67
- it(`should accept ${testCase.name}`, () => {
68
- expect(() => {
69
- validateLineRange(testCase.params);
70
- }).not.toThrow();
71
- });
72
- }
73
- const invalidCases = [
74
- {
75
- name: 'lineStart without lineEnd',
76
- params: { lineStart: 5, path: '/test/file.txt' },
77
- message: 'lineStart requires lineEnd',
78
- },
79
- {
80
- name: 'lineEnd without lineStart',
81
- params: { lineEnd: 10, path: '/test/file.txt' },
82
- message: 'lineEnd requires lineStart',
83
- },
84
- {
85
- name: 'lineEnd < lineStart',
86
- params: { lineStart: 10, lineEnd: 5, path: '/test/file.txt' },
87
- message: 'lineEnd (5) must be >= lineStart (10)',
88
- },
89
- {
90
- name: 'lineRange with head',
91
- params: {
92
- lineStart: 1,
93
- lineEnd: 10,
94
- head: 5,
95
- path: '/test/file.txt',
96
- },
97
- message: 'Cannot specify multiple',
98
- },
99
- {
100
- name: 'lineRange with tail',
101
- params: {
102
- lineStart: 1,
103
- lineEnd: 10,
104
- tail: 5,
105
- path: '/test/file.txt',
106
- },
107
- message: 'Cannot specify multiple',
108
- },
109
- {
110
- name: 'head with tail',
111
- params: { head: 5, tail: 5, path: '/test/file.txt' },
112
- message: 'Cannot specify multiple',
113
- },
114
- ];
115
- for (const testCase of invalidCases) {
116
- it(`should reject ${testCase.name}`, () => {
117
- expectMcpError(() => {
118
- validateLineRange(testCase.params);
119
- }, {
120
- code: ErrorCode.E_INVALID_INPUT,
121
- messageIncludes: testCase.message,
122
- });
123
- });
124
- }
125
- });
126
- describe('validateHeadTail', () => {
127
- const validCases = [
128
- [10, undefined],
129
- [undefined, 10],
130
- [undefined, undefined],
131
- ];
132
- for (const [head, tail] of validCases) {
133
- it('should accept valid head/tail combination', () => {
134
- expect(() => {
135
- validateHeadTail(head, tail);
136
- }).not.toThrow();
137
- });
138
- }
139
- it('should reject both head and tail', () => {
53
+ const validLineRangeCases = [
54
+ {
55
+ name: 'valid lineRange with both lineStart and lineEnd',
56
+ params: { lineStart: 1, lineEnd: 10, path: '/test/file.txt' },
57
+ },
58
+ {
59
+ name: 'no line options',
60
+ params: { path: '/test/file.txt' },
61
+ },
62
+ {
63
+ name: 'head option alone',
64
+ params: { head: 10, path: '/test/file.txt' },
65
+ },
66
+ {
67
+ name: 'tail option alone',
68
+ params: { tail: 10, path: '/test/file.txt' },
69
+ },
70
+ {
71
+ name: 'lineEnd equal to lineStart',
72
+ params: { lineStart: 5, lineEnd: 5, path: '/test/file.txt' },
73
+ },
74
+ ];
75
+ for (const testCase of validLineRangeCases) {
76
+ it(`validateLineRange accepts ${testCase.name}`, () => {
77
+ expect(() => {
78
+ validateLineRange(testCase.params);
79
+ }).not.toThrow();
80
+ });
81
+ }
82
+ const invalidLineRangeCases = [
83
+ {
84
+ name: 'lineStart without lineEnd',
85
+ params: { lineStart: 5, path: '/test/file.txt' },
86
+ message: 'lineStart requires lineEnd',
87
+ },
88
+ {
89
+ name: 'lineEnd without lineStart',
90
+ params: { lineEnd: 10, path: '/test/file.txt' },
91
+ message: 'lineEnd requires lineStart',
92
+ },
93
+ {
94
+ name: 'lineEnd < lineStart',
95
+ params: { lineStart: 10, lineEnd: 5, path: '/test/file.txt' },
96
+ message: 'lineEnd (5) must be >= lineStart (10)',
97
+ },
98
+ {
99
+ name: 'lineRange with head',
100
+ params: { lineStart: 1, lineEnd: 10, head: 5, path: '/test/file.txt' },
101
+ message: 'Cannot specify multiple',
102
+ },
103
+ {
104
+ name: 'lineRange with tail',
105
+ params: { lineStart: 1, lineEnd: 10, tail: 5, path: '/test/file.txt' },
106
+ message: 'Cannot specify multiple',
107
+ },
108
+ {
109
+ name: 'head with tail',
110
+ params: { head: 5, tail: 5, path: '/test/file.txt' },
111
+ message: 'Cannot specify multiple',
112
+ },
113
+ ];
114
+ for (const testCase of invalidLineRangeCases) {
115
+ it(`validateLineRange rejects ${testCase.name}`, () => {
140
116
  expectMcpError(() => {
141
- validateHeadTail(5, 5);
117
+ validateLineRange(testCase.params);
142
118
  }, {
143
119
  code: ErrorCode.E_INVALID_INPUT,
144
- messageIncludes: 'Cannot specify both head and tail',
120
+ messageIncludes: testCase.message,
145
121
  });
146
122
  });
123
+ }
124
+ const validHeadTailCases = [
125
+ [10, undefined],
126
+ [undefined, 10],
127
+ [undefined, undefined],
128
+ ];
129
+ for (const [head, tail] of validHeadTailCases) {
130
+ it('validateHeadTail accepts valid head/tail combination', () => {
131
+ expect(() => {
132
+ validateHeadTail(head, tail);
133
+ }).not.toThrow();
134
+ });
135
+ }
136
+ it('validateHeadTail rejects both head and tail', () => {
137
+ expectMcpError(() => {
138
+ validateHeadTail(5, 5);
139
+ }, {
140
+ code: ErrorCode.E_INVALID_INPUT,
141
+ messageIncludes: 'Cannot specify both head and tail',
142
+ });
147
143
  });
148
144
  //# sourceMappingURL=validators.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.test.js","sourceRoot":"","sources":["../../../src/__tests__/schemas/validators.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE1D,SAAS,cAAc,CACrB,EAAc,EACd,OAAqD;IAErD,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAiB,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,iBAAiB,CAAC,MAM1B;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxD,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,CACL,CAAC;IACJ,CAAC;IAED,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,CACL,CAAC;IACJ,CAAC;IAED,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;IACzB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,0FAA0F,EAC1F,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,IAAa;IACpD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,kDAAkD,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,UAAU,GAAG;QACjB;YACE,IAAI,EAAE,iDAAiD;YACvD,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAC9D;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;SACnC;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAC7C;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAC7C;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAC7D;KACF,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,EAAE,CAAC,iBAAiB,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,GAAG,EAAE;gBACV,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG;QACnB;YACE,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAChD,OAAO,EAAE,4BAA4B;SACtC;QACD;YACE,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAC/C,OAAO,EAAE,4BAA4B;SACtC;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAC7D,OAAO,EAAE,uCAAuC;SACjD;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,gBAAgB;aACvB;YACD,OAAO,EAAE,yBAAyB;SACnC;QACD;YACE,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE;gBACN,SAAS,EAAE,CAAC;gBACZ,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,gBAAgB;aACvB;YACD,OAAO,EAAE,yBAAyB;SACnC;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACpD,OAAO,EAAE,yBAAyB;SACnC;KACF,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;QACpC,EAAE,CAAC,iBAAiB,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;YACxC,cAAc,CACZ,GAAG,EAAE;gBACH,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC,EACD;gBACE,IAAI,EAAE,SAAS,CAAC,eAAe;gBAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO;aAClC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,UAAU,GAA+C;QAC7D,CAAC,EAAE,EAAE,SAAS,CAAC;QACf,CAAC,SAAS,EAAE,EAAE,CAAC;QACf,CAAC,SAAS,EAAE,SAAS,CAAC;KACvB,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QACtC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,GAAG,EAAE;gBACV,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,cAAc,CACZ,GAAG,EAAE;YACH,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC,EACD;YACE,IAAI,EAAE,SAAS,CAAC,eAAe;YAC/B,eAAe,EAAE,mCAAmC;SACrD,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"validators.test.js","sourceRoot":"","sources":["../../../src/__tests__/schemas/validators.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE1D,SAAS,cAAc,CACrB,EAAc,EACd,OAAqD;IAErD,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;QACL,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAiB,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAC1B,SAA6B,EAC7B,OAA2B,EAC3B,IAAY;IAEZ,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,CAAC;IAC7C,MAAM,UAAU,GAAG,OAAO,KAAK,SAAS,CAAC;IACzC,IAAI,YAAY,KAAK,UAAU;QAAE,OAAO;IAExC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,sBAAsB,QAAQ,aAAa,OAAO,uBAAuB,EACzE,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAA6B,EAC7B,OAA2B,EAC3B,IAAY;IAEZ,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO;IAC7D,IAAI,OAAO,IAAI,SAAS;QAAE,OAAO;IACjC,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,+BAA+B,OAAO,2BAA2B,SAAS,GAAG,EAC7E,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,YAAqB,EACrB,IAAwB,EACxB,IAAwB,EACxB,IAAY;IAEZ,MAAM,YAAY,GAAG;QACnB,YAAY;QACZ,IAAI,KAAK,SAAS;QAClB,IAAI,KAAK,SAAS;KACnB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACzB,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO;IAE9B,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,0FAA0F,EAC1F,IAAI,CACL,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAM1B;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxD,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC;IACtE,0BAA0B,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa,EAAE,IAAa;IACpD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,eAAe,EACzB,kDAAkD,CACnD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,mBAAmB,GAAG;IAC1B;QACE,IAAI,EAAE,iDAAiD;QACvD,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;KAC9D;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;KACnC;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;KAC7C;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;KAC7C;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;KAC7D;CACF,CAAC;AAEF,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;IAC3C,EAAE,CAAC,6BAA6B,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,EAAE;YACV,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B;QACE,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAChD,OAAO,EAAE,4BAA4B;KACtC;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC/C,OAAO,EAAE,4BAA4B;KACtC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QAC7D,OAAO,EAAE,uCAAuC;KACjD;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACtE,OAAO,EAAE,yBAAyB;KACnC;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACtE,OAAO,EAAE,yBAAyB;KACnC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACpD,OAAO,EAAE,yBAAyB;KACnC;CACF,CAAC;AAEF,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE,CAAC;IAC7C,EAAE,CAAC,6BAA6B,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;QACpD,cAAc,CACZ,GAAG,EAAE;YACH,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,EACD;YACE,IAAI,EAAE,SAAS,CAAC,eAAe;YAC/B,eAAe,EAAE,QAAQ,CAAC,OAAO;SAClC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,kBAAkB,GAA+C;IACrE,CAAC,EAAE,EAAE,SAAS,CAAC;IACf,CAAC,SAAS,EAAE,EAAE,CAAC;IACf,CAAC,SAAS,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,kBAAkB,EAAE,CAAC;IAC9C,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,EAAE;YACV,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACrD,cAAc,CACZ,GAAG,EAAE;QACH,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC,EACD;QACE,IAAI,EAAE,SAAS,CAAC,eAAe;QAC/B,eAAe,EAAE,mCAAmC;KACrD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -2,50 +2,55 @@ import * as fs from 'node:fs/promises';
2
2
  import * as path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import fg from 'fast-glob';
5
- import { describe, expect, it } from 'vitest';
5
+ import { expect, it } from 'vitest';
6
6
  function getRepoRoot() {
7
7
  const currentDir = path.dirname(fileURLToPath(import.meta.url));
8
- // src/__tests__/security -> repo root
9
8
  return path.resolve(currentDir, '../../../../');
10
9
  }
11
10
  function hasFsImport(source) {
12
11
  return (/from\s+['"]node:fs\/promises['"]/u.test(source) ||
13
12
  /from\s+['"]node:fs['"]/u.test(source));
14
13
  }
15
- describe('security boundary: filesystem access', () => {
16
- it('keeps direct node:fs imports inside boundary modules', async () => {
17
- const repoRoot = getRepoRoot();
18
- const sourceFiles = await fg(['src/**/*.ts'], {
19
- cwd: repoRoot,
20
- ignore: ['src/__tests__/**'],
21
- onlyFiles: true,
22
- dot: false,
23
- });
24
- // These files are allowed to import node:fs*/ because they either:
25
- // - implement the security boundary itself
26
- // - centralize filesystem operations
27
- // - bootstrap the server before allowed directories exist
28
- const allowedFsImportFiles = new Set([
29
- 'src/server.ts',
30
- 'src/lib/path-validation.ts',
31
- 'src/lib/file-operations.ts',
32
- 'src/lib/fs-helpers.ts',
33
- 'src/lib/file-operations/search-content.ts',
34
- ]);
35
- const offenders = [];
36
- for (const relPath of sourceFiles) {
37
- const absPath = path.join(repoRoot, relPath);
38
- const content = await fs.readFile(absPath, 'utf-8');
39
- if (!hasFsImport(content)) {
40
- continue;
41
- }
42
- if (!allowedFsImportFiles.has(relPath.replace(/\\/gu, '/'))) {
43
- offenders.push(relPath);
44
- }
45
- }
46
- expect(offenders, `Unexpected node:fs imports detected outside boundary modules. ` +
47
- `To keep "validate-before-access" auditable, route filesystem access through ` +
48
- `src/lib/file-operations.ts and src/lib/fs-helpers.ts (and validate paths in src/lib/path-validation.ts).`).toEqual([]);
14
+ function normalizeRelPath(relPath) {
15
+ return relPath.replace(/\\/gu, '/');
16
+ }
17
+ function getAllowedFsImportFiles() {
18
+ return new Set([
19
+ 'src/server.ts',
20
+ 'src/lib/path-validation.ts',
21
+ 'src/lib/file-operations.ts',
22
+ 'src/lib/fs-helpers.ts',
23
+ 'src/lib/file-operations/search-content.ts',
24
+ ]);
25
+ }
26
+ async function listSourceFiles(repoRoot) {
27
+ return await fg(['src/**/*.ts'], {
28
+ cwd: repoRoot,
29
+ ignore: ['src/__tests__/**'],
30
+ onlyFiles: true,
31
+ dot: false,
49
32
  });
33
+ }
34
+ async function collectFsImportOffenders(repoRoot, sourceFiles, allowedFsImportFiles) {
35
+ const offenders = [];
36
+ for (const relPath of sourceFiles) {
37
+ const absPath = path.join(repoRoot, relPath);
38
+ const content = await fs.readFile(absPath, 'utf-8');
39
+ if (!hasFsImport(content))
40
+ continue;
41
+ if (!allowedFsImportFiles.has(normalizeRelPath(relPath))) {
42
+ offenders.push(relPath);
43
+ }
44
+ }
45
+ return offenders;
46
+ }
47
+ it('keeps direct node:fs imports inside boundary modules', async () => {
48
+ const repoRoot = getRepoRoot();
49
+ const sourceFiles = await listSourceFiles(repoRoot);
50
+ const allowedFsImportFiles = getAllowedFsImportFiles();
51
+ const offenders = await collectFsImportOffenders(repoRoot, sourceFiles, allowedFsImportFiles);
52
+ expect(offenders, `Unexpected node:fs imports detected outside boundary modules. ` +
53
+ `To keep "validate-before-access" auditable, route filesystem access through ` +
54
+ `src/lib/file-operations.ts and src/lib/fs-helpers.ts (and validate paths in src/lib/path-validation.ts).`).toEqual([]);
50
55
  });
51
56
  //# sourceMappingURL=filesystem-boundary.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-boundary.test.js","sourceRoot":"","sources":["../../../src/__tests__/security/filesystem-boundary.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,sCAAsC;IACtC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,CACL,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC;QAChD,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAE/B,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE;YAC5C,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,CAAC,kBAAkB,CAAC;YAC5B,SAAS,EAAE,IAAI;YACf,GAAG,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,mEAAmE;QACnE,2CAA2C;QAC3C,qCAAqC;QACrC,0DAA0D;QAC1D,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAS;YAC3C,eAAe;YACf,4BAA4B;YAC5B,4BAA4B;YAC5B,uBAAuB;YACvB,2CAA2C;SAC5C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAEpD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC5D,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,MAAM,CACJ,SAAS,EACT,gEAAgE;YAC9D,8EAA8E;YAC9E,0GAA0G,CAC7G,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"filesystem-boundary.test.js","sourceRoot":"","sources":["../../../src/__tests__/security/filesystem-boundary.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEpC,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,CACL,mCAAmC,CAAC,IAAI,CAAC,MAAM,CAAC;QAChD,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO,IAAI,GAAG,CAAS;QACrB,eAAe;QACf,4BAA4B;QAC5B,4BAA4B;QAC5B,uBAAuB;QACvB,2CAA2C;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,OAAO,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE;QAC/B,GAAG,EAAE,QAAQ;QACb,MAAM,EAAE,CAAC,kBAAkB,CAAC;QAC5B,SAAS,EAAE,IAAI;QACf,GAAG,EAAE,KAAK;KACX,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAgB,EAChB,WAAqB,EACrB,oBAAiC;IAEjC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,SAAS;QACpC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YACzD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACpE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAC9C,QAAQ,EACR,WAAW,EACX,oBAAoB,CACrB,CAAC;IAEF,MAAM,CACJ,SAAS,EACT,gEAAgE;QAC9D,8EAA8E;QAC9E,0GAA0G,CAC7G,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC"}
@@ -8,23 +8,6 @@ interface DetailedError {
8
8
  suggestion?: string;
9
9
  details?: Record<string, unknown>;
10
10
  }
11
- interface ErrorResponse {
12
- [key: string]: unknown;
13
- content: {
14
- type: 'text';
15
- text: string;
16
- }[];
17
- structuredContent: {
18
- ok: false;
19
- error: {
20
- code: string;
21
- message: string;
22
- path?: string;
23
- suggestion?: string;
24
- };
25
- };
26
- isError: true;
27
- }
28
11
  export declare function isNodeError(error: unknown): error is NodeJS.ErrnoException;
29
12
  export declare const NODE_ERROR_CODE_MAP: Readonly<Record<string, ErrorCode>>;
30
13
  export declare class McpError extends Error {
@@ -38,6 +21,5 @@ export declare function classifyError(error: unknown): ErrorCode;
38
21
  export declare function createDetailedError(error: unknown, path?: string, additionalDetails?: Record<string, unknown>): DetailedError;
39
22
  export declare function formatDetailedError(error: DetailedError): string;
40
23
  export declare function getSuggestion(code: ErrorCode): string;
41
- export declare function createErrorResponse(error: unknown, defaultCode: ErrorCode, path?: string): ErrorResponse;
42
24
  export declare function toRpcError(error: unknown, defaultCode: ErrorCode, path?: string): RpcMcpError;
43
25
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,IAAI,WAAW,EACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,UAAU,aAAa;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,UAAU,aAAa;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,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,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAM1E;AAED,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAe1D,CAAC;AAEX,qBAAa,QAAS,SAAQ,KAAK;IAExB,IAAI,EAAE,SAAS;IAEf,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACxC,KAAK,CAAC,EAAE,OAAO;IAOjB,MAAM,CAAC,SAAS,CACd,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ;CAOZ;AAuCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAiBvD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,MAAM,EACb,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,aAAa,CAsBf;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAYhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAErD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,SAAS,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,aAAa,CAmBf;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,SAAS,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CAmBb"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,IAAI,WAAW,EACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,UAAU,aAAa;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,cAAc,CAM1E;AAED,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAe1D,CAAC;AAEX,qBAAa,QAAS,SAAQ,KAAK;IAExB,IAAI,EAAE,SAAS;IAEf,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,SAAS,EACtB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA,EACxC,KAAK,CAAC,EAAE,OAAO;IAOjB,MAAM,CAAC,SAAS,CACd,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,OAAO,EACtB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,QAAQ;CAOZ;AAyDD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAMvD;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,IAAI,CAAC,EAAE,MAAM,EACb,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,aAAa,CAYf;AAqBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAYhE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,SAAS,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CAmBb"}
@@ -66,41 +66,58 @@ const INVALID_PARAMS_CODES = new Set([
66
66
  ErrorCode.E_PERMISSION_DENIED,
67
67
  ErrorCode.E_SYMLINK_NOT_ALLOWED,
68
68
  ]);
69
- export function classifyError(error) {
69
+ function getDirectErrorCode(error) {
70
70
  if (error instanceof McpError) {
71
71
  return error.code;
72
72
  }
73
73
  if (isNodeError(error) && error.code) {
74
- const mapped = NODE_ERROR_CODE_MAP[error.code];
75
- if (mapped)
76
- return mapped;
74
+ return NODE_ERROR_CODE_MAP[error.code];
77
75
  }
76
+ return undefined;
77
+ }
78
+ function classifyMessageError(error) {
78
79
  const message = error instanceof Error ? error.message : String(error);
79
- const lowerMessage = message.toLowerCase();
80
- if (lowerMessage.includes('enoent')) {
80
+ if (message.toLowerCase().includes('enoent')) {
81
81
  return ErrorCode.E_NOT_FOUND;
82
82
  }
83
- return ErrorCode.E_UNKNOWN;
83
+ return undefined;
84
+ }
85
+ export function classifyError(error) {
86
+ const direct = getDirectErrorCode(error);
87
+ if (direct)
88
+ return direct;
89
+ const messageCode = classifyMessageError(error);
90
+ return messageCode ?? ErrorCode.E_UNKNOWN;
84
91
  }
85
92
  export function createDetailedError(error, path, additionalDetails) {
86
93
  const message = error instanceof Error ? error.message : String(error);
87
94
  const code = classifyError(error);
88
95
  const suggestion = ERROR_SUGGESTIONS[code];
89
- const effectivePath = path ?? (error instanceof McpError ? error.path : undefined);
90
- const mcpDetails = error instanceof McpError ? error.details : undefined;
91
- const mergedDetails = {
92
- ...mcpDetails,
93
- ...additionalDetails,
94
- };
95
- const hasDetails = Object.keys(mergedDetails).length > 0;
96
96
  return {
97
97
  code,
98
98
  message,
99
- path: effectivePath,
99
+ path: resolveErrorPath(error, path),
100
100
  suggestion,
101
- details: hasDetails ? mergedDetails : undefined,
101
+ details: mergeErrorDetails(error, additionalDetails),
102
102
  };
103
103
  }
104
+ function resolveErrorPath(error, path) {
105
+ if (path)
106
+ return path;
107
+ if (error instanceof McpError)
108
+ return error.path;
109
+ return undefined;
110
+ }
111
+ function mergeErrorDetails(error, additionalDetails) {
112
+ const mcpDetails = error instanceof McpError ? error.details : undefined;
113
+ const mergedDetails = {
114
+ ...mcpDetails,
115
+ ...additionalDetails,
116
+ };
117
+ if (Object.keys(mergedDetails).length === 0)
118
+ return undefined;
119
+ return mergedDetails;
120
+ }
104
121
  export function formatDetailedError(error) {
105
122
  const lines = [`Error [${error.code}]: ${error.message}`];
106
123
  if (error.path) {
@@ -114,24 +131,6 @@ export function formatDetailedError(error) {
114
131
  export function getSuggestion(code) {
115
132
  return ERROR_SUGGESTIONS[code];
116
133
  }
117
- export function createErrorResponse(error, defaultCode, path) {
118
- const detailed = createDetailedError(error, path);
119
- const finalCode = detailed.code === ErrorCode.E_UNKNOWN ? defaultCode : detailed.code;
120
- detailed.code = finalCode;
121
- return {
122
- content: [{ type: 'text', text: formatDetailedError(detailed) }],
123
- structuredContent: {
124
- ok: false,
125
- error: {
126
- code: detailed.code,
127
- message: detailed.message,
128
- path: detailed.path,
129
- suggestion: detailed.suggestion,
130
- },
131
- },
132
- isError: true,
133
- };
134
- }
135
134
  export function toRpcError(error, defaultCode, path) {
136
135
  const detailed = createDetailedError(error, path);
137
136
  const finalCode = detailed.code === ErrorCode.E_UNKNOWN ? defaultCode : detailed.code;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-directory.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/analyze-directory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAyL/B,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,OAAO,CAAC,sBAAsB,CAAC,CAmCjC"}
1
+ {"version":3,"file":"analyze-directory.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/analyze-directory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AA8O/B,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,OAAO,CAAC,sBAAsB,CAAC,CA4BjC"}