@j0hanz/filesystem-mcp 1.19.0 → 2.0.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 (301) hide show
  1. package/README.md +333 -838
  2. package/dist/cli-help.d.ts +3 -0
  3. package/dist/cli-help.d.ts.map +1 -0
  4. package/dist/cli-help.js +169 -0
  5. package/dist/cli-help.js.map +1 -0
  6. package/dist/cli.d.ts +28 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +168 -123
  9. package/dist/cli.js.map +1 -0
  10. package/dist/core/concurrency.d.ts +70 -0
  11. package/dist/core/concurrency.d.ts.map +1 -0
  12. package/dist/core/concurrency.js +173 -0
  13. package/dist/core/concurrency.js.map +1 -0
  14. package/dist/core/config.d.ts +19 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +11 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/cursor.d.ts +23 -0
  19. package/dist/core/cursor.d.ts.map +1 -0
  20. package/dist/core/cursor.js +62 -0
  21. package/dist/core/cursor.js.map +1 -0
  22. package/dist/core/errors.d.ts +96 -0
  23. package/dist/core/errors.d.ts.map +1 -0
  24. package/dist/core/errors.js +356 -0
  25. package/dist/core/errors.js.map +1 -0
  26. package/dist/core/file-uri.d.ts +24 -0
  27. package/dist/core/file-uri.d.ts.map +1 -0
  28. package/dist/core/file-uri.js +52 -0
  29. package/dist/core/file-uri.js.map +1 -0
  30. package/dist/core/fmt.d.ts +38 -0
  31. package/dist/core/fmt.d.ts.map +1 -0
  32. package/dist/core/fmt.js +109 -0
  33. package/dist/core/fmt.js.map +1 -0
  34. package/dist/core/fs.d.ts +108 -0
  35. package/dist/core/fs.d.ts.map +1 -0
  36. package/dist/core/fs.js +243 -0
  37. package/dist/core/fs.js.map +1 -0
  38. package/dist/core/glob.d.ts +41 -0
  39. package/dist/core/glob.d.ts.map +1 -0
  40. package/dist/core/glob.js +399 -0
  41. package/dist/core/glob.js.map +1 -0
  42. package/dist/core/input-required.d.ts +147 -0
  43. package/dist/core/input-required.d.ts.map +1 -0
  44. package/dist/core/input-required.js +261 -0
  45. package/dist/core/input-required.js.map +1 -0
  46. package/dist/core/mime.d.ts +15 -0
  47. package/dist/core/mime.d.ts.map +1 -0
  48. package/dist/core/mime.js +188 -0
  49. package/dist/core/mime.js.map +1 -0
  50. package/dist/core/observability.d.ts +10 -0
  51. package/dist/core/observability.d.ts.map +1 -0
  52. package/dist/core/observability.js +76 -0
  53. package/dist/core/observability.js.map +1 -0
  54. package/dist/core/page-store.d.ts +41 -0
  55. package/dist/core/page-store.d.ts.map +1 -0
  56. package/dist/core/page-store.js +74 -0
  57. package/dist/core/page-store.js.map +1 -0
  58. package/dist/core/path-completer.d.ts +10 -0
  59. package/dist/core/path-completer.d.ts.map +1 -0
  60. package/dist/core/path-completer.js +227 -0
  61. package/dist/core/path-completer.js.map +1 -0
  62. package/dist/core/path-discovery.d.ts +8 -0
  63. package/dist/core/path-discovery.d.ts.map +1 -0
  64. package/dist/core/path-discovery.js +105 -0
  65. package/dist/core/path-discovery.js.map +1 -0
  66. package/dist/core/path-utils.d.ts +9 -0
  67. package/dist/core/path-utils.d.ts.map +1 -0
  68. package/dist/core/path-utils.js +121 -0
  69. package/dist/core/path-utils.js.map +1 -0
  70. package/dist/core/path.d.ts +148 -0
  71. package/dist/core/path.d.ts.map +1 -0
  72. package/dist/core/path.js +674 -0
  73. package/dist/core/path.js.map +1 -0
  74. package/dist/core/primitives.d.ts +23 -0
  75. package/dist/core/primitives.d.ts.map +1 -0
  76. package/dist/core/primitives.js +54 -0
  77. package/dist/core/primitives.js.map +1 -0
  78. package/dist/core/read.d.ts +74 -0
  79. package/dist/core/read.d.ts.map +1 -0
  80. package/dist/core/read.js +562 -0
  81. package/dist/core/read.js.map +1 -0
  82. package/dist/core/schema.d.ts +139 -0
  83. package/dist/core/schema.d.ts.map +1 -0
  84. package/dist/core/schema.js +345 -0
  85. package/dist/core/schema.js.map +1 -0
  86. package/dist/core/search.d.ts +100 -0
  87. package/dist/core/search.d.ts.map +1 -0
  88. package/dist/core/search.js +248 -0
  89. package/dist/core/search.js.map +1 -0
  90. package/dist/core/sensitive.d.ts +6 -0
  91. package/dist/core/sensitive.d.ts.map +1 -0
  92. package/dist/core/sensitive.js +142 -0
  93. package/dist/core/sensitive.js.map +1 -0
  94. package/dist/core/store.d.ts +57 -0
  95. package/dist/core/store.d.ts.map +1 -0
  96. package/dist/core/store.js +162 -0
  97. package/dist/core/store.js.map +1 -0
  98. package/dist/core/util.d.ts +26 -0
  99. package/dist/core/util.d.ts.map +1 -0
  100. package/dist/core/util.js +66 -0
  101. package/dist/core/util.js.map +1 -0
  102. package/dist/core/watcher-registry.d.ts +68 -0
  103. package/dist/core/watcher-registry.d.ts.map +1 -0
  104. package/dist/core/watcher-registry.js +312 -0
  105. package/dist/core/watcher-registry.js.map +1 -0
  106. package/dist/http-policy.d.ts +121 -0
  107. package/dist/http-policy.d.ts.map +1 -0
  108. package/dist/http-policy.js +340 -0
  109. package/dist/http-policy.js.map +1 -0
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +77 -41
  113. package/dist/index.js.map +1 -0
  114. package/dist/instructions.d.ts +12 -0
  115. package/dist/instructions.d.ts.map +1 -0
  116. package/dist/instructions.js +71 -0
  117. package/dist/instructions.js.map +1 -0
  118. package/dist/prompts.d.ts +8 -6
  119. package/dist/prompts.d.ts.map +1 -0
  120. package/dist/prompts.js +74 -168
  121. package/dist/prompts.js.map +1 -0
  122. package/dist/resources.d.ts +73 -9
  123. package/dist/resources.d.ts.map +1 -0
  124. package/dist/resources.js +392 -163
  125. package/dist/resources.js.map +1 -0
  126. package/dist/server.d.ts +62 -1
  127. package/dist/server.d.ts.map +1 -0
  128. package/dist/server.js +139 -1
  129. package/dist/server.js.map +1 -0
  130. package/dist/tools/batch.d.ts +89 -0
  131. package/dist/tools/batch.d.ts.map +1 -0
  132. package/dist/tools/batch.js +157 -0
  133. package/dist/tools/batch.js.map +1 -0
  134. package/dist/tools/create.d.ts +2 -0
  135. package/dist/tools/create.d.ts.map +1 -0
  136. package/dist/tools/create.js +142 -0
  137. package/dist/tools/create.js.map +1 -0
  138. package/dist/tools/define.d.ts +110 -0
  139. package/dist/tools/define.d.ts.map +1 -0
  140. package/dist/tools/define.js +394 -0
  141. package/dist/tools/define.js.map +1 -0
  142. package/dist/tools/delete-file.d.ts +2 -4
  143. package/dist/tools/delete-file.d.ts.map +1 -0
  144. package/dist/tools/delete-file.js +330 -87
  145. package/dist/tools/delete-file.js.map +1 -0
  146. package/dist/tools/diff.d.ts +2 -0
  147. package/dist/tools/diff.d.ts.map +1 -0
  148. package/dist/tools/diff.js +94 -0
  149. package/dist/tools/diff.js.map +1 -0
  150. package/dist/tools/edit.d.ts +2 -0
  151. package/dist/tools/edit.d.ts.map +1 -0
  152. package/dist/tools/edit.js +442 -0
  153. package/dist/tools/edit.js.map +1 -0
  154. package/dist/tools/index.d.ts +26 -0
  155. package/dist/tools/index.d.ts.map +1 -0
  156. package/dist/tools/index.js +52 -0
  157. package/dist/tools/index.js.map +1 -0
  158. package/dist/tools/list.d.ts +2 -0
  159. package/dist/tools/list.d.ts.map +1 -0
  160. package/dist/tools/list.js +291 -0
  161. package/dist/tools/list.js.map +1 -0
  162. package/dist/tools/move.d.ts +2 -0
  163. package/dist/tools/move.d.ts.map +1 -0
  164. package/dist/tools/move.js +321 -0
  165. package/dist/tools/move.js.map +1 -0
  166. package/dist/tools/patch.d.ts +2 -0
  167. package/dist/tools/patch.d.ts.map +1 -0
  168. package/dist/tools/patch.js +155 -0
  169. package/dist/tools/patch.js.map +1 -0
  170. package/dist/tools/progress.d.ts +52 -0
  171. package/dist/tools/progress.d.ts.map +1 -0
  172. package/dist/tools/progress.js +172 -0
  173. package/dist/tools/progress.js.map +1 -0
  174. package/dist/tools/read.d.ts +2 -4
  175. package/dist/tools/read.d.ts.map +1 -0
  176. package/dist/tools/read.js +398 -152
  177. package/dist/tools/read.js.map +1 -0
  178. package/dist/tools/replace-in-files.d.ts +2 -4
  179. package/dist/tools/replace-in-files.d.ts.map +1 -0
  180. package/dist/tools/replace-in-files.js +435 -264
  181. package/dist/tools/replace-in-files.js.map +1 -0
  182. package/dist/tools/roots.d.ts +2 -4
  183. package/dist/tools/roots.d.ts.map +1 -0
  184. package/dist/tools/roots.js +29 -52
  185. package/dist/tools/roots.js.map +1 -0
  186. package/dist/tools/search-content.d.ts +2 -4
  187. package/dist/tools/search-content.d.ts.map +1 -0
  188. package/dist/tools/search-content.js +262 -228
  189. package/dist/tools/search-content.js.map +1 -0
  190. package/dist/tools/search-files.d.ts +2 -4
  191. package/dist/tools/search-files.d.ts.map +1 -0
  192. package/dist/tools/search-files.js +162 -161
  193. package/dist/tools/search-files.js.map +1 -0
  194. package/dist/tools/stat.d.ts +2 -4
  195. package/dist/tools/stat.d.ts.map +1 -0
  196. package/dist/tools/stat.js +202 -62
  197. package/dist/tools/stat.js.map +1 -0
  198. package/dist/transport/http.d.ts +5 -0
  199. package/dist/transport/http.d.ts.map +1 -0
  200. package/dist/transport/http.js +276 -0
  201. package/dist/transport/http.js.map +1 -0
  202. package/dist/transport/shared.d.ts +45 -0
  203. package/dist/transport/shared.d.ts.map +1 -0
  204. package/dist/transport/shared.js +65 -0
  205. package/dist/transport/shared.js.map +1 -0
  206. package/dist/transport/stdio.d.ts +32 -0
  207. package/dist/transport/stdio.d.ts.map +1 -0
  208. package/dist/transport/stdio.js +279 -0
  209. package/dist/transport/stdio.js.map +1 -0
  210. package/dist/transport.d.ts +5 -0
  211. package/dist/transport.d.ts.map +1 -0
  212. package/dist/transport.js +4 -0
  213. package/dist/transport.js.map +1 -0
  214. package/package.json +37 -46
  215. package/dist/assets/logo.svg +0 -35
  216. package/dist/completions.d.ts +0 -2
  217. package/dist/completions.js +0 -572
  218. package/dist/config.d.ts +0 -119
  219. package/dist/config.js +0 -31
  220. package/dist/lib/abort.d.ts +0 -7
  221. package/dist/lib/abort.js +0 -81
  222. package/dist/lib/constants.d.ts +0 -42
  223. package/dist/lib/constants.js +0 -313
  224. package/dist/lib/errors.d.ts +0 -28
  225. package/dist/lib/errors.js +0 -301
  226. package/dist/lib/file-operations/core.d.ts +0 -53
  227. package/dist/lib/file-operations/core.js +0 -144
  228. package/dist/lib/file-operations/metadata.d.ts +0 -77
  229. package/dist/lib/file-operations/metadata.js +0 -878
  230. package/dist/lib/file-operations/search.d.ts +0 -46
  231. package/dist/lib/file-operations/search.js +0 -1194
  232. package/dist/lib/file-operations/traversal.d.ts +0 -40
  233. package/dist/lib/file-operations/traversal.js +0 -310
  234. package/dist/lib/fs-helpers.d.ts +0 -46
  235. package/dist/lib/fs-helpers.js +0 -606
  236. package/dist/lib/globs.d.ts +0 -2
  237. package/dist/lib/globs.js +0 -19
  238. package/dist/lib/logger.d.ts +0 -27
  239. package/dist/lib/logger.js +0 -91
  240. package/dist/lib/observability.d.ts +0 -33
  241. package/dist/lib/observability.js +0 -373
  242. package/dist/lib/paths.d.ts +0 -35
  243. package/dist/lib/paths.js +0 -634
  244. package/dist/lib/resource-store.d.ts +0 -28
  245. package/dist/lib/resource-store.js +0 -195
  246. package/dist/lib/utils.d.ts +0 -7
  247. package/dist/lib/utils.js +0 -37
  248. package/dist/lib/zod-codecs.d.ts +0 -2
  249. package/dist/lib/zod-codecs.js +0 -18
  250. package/dist/pkg-info.d.ts +0 -7
  251. package/dist/pkg-info.js +0 -9
  252. package/dist/resources/generated-instructions.d.ts +0 -1
  253. package/dist/resources/generated-instructions.js +0 -105
  254. package/dist/resources/tool-catalog.d.ts +0 -2
  255. package/dist/resources/tool-catalog.js +0 -78
  256. package/dist/resources/tool-info.d.ts +0 -9
  257. package/dist/resources/tool-info.js +0 -206
  258. package/dist/resources/workflows.d.ts +0 -1
  259. package/dist/resources/workflows.js +0 -72
  260. package/dist/schemas.d.ts +0 -505
  261. package/dist/schemas.js +0 -676
  262. package/dist/server/bootstrap.d.ts +0 -6
  263. package/dist/server/bootstrap.js +0 -563
  264. package/dist/server/event-store.d.ts +0 -18
  265. package/dist/server/event-store.js +0 -71
  266. package/dist/server/roots-manager.d.ts +0 -28
  267. package/dist/server/roots-manager.js +0 -227
  268. package/dist/server/task-store.d.ts +0 -10
  269. package/dist/server/task-store.js +0 -91
  270. package/dist/tools/apply-patch.d.ts +0 -4
  271. package/dist/tools/apply-patch.js +0 -235
  272. package/dist/tools/calculate-hash.d.ts +0 -4
  273. package/dist/tools/calculate-hash.js +0 -187
  274. package/dist/tools/contract.d.ts +0 -50
  275. package/dist/tools/contract.js +0 -1
  276. package/dist/tools/create-directory.d.ts +0 -4
  277. package/dist/tools/create-directory.js +0 -68
  278. package/dist/tools/diff-files.d.ts +0 -4
  279. package/dist/tools/diff-files.js +0 -136
  280. package/dist/tools/edit-file.d.ts +0 -4
  281. package/dist/tools/edit-file.js +0 -256
  282. package/dist/tools/icons.d.ts +0 -15
  283. package/dist/tools/icons.js +0 -24
  284. package/dist/tools/list-directory.d.ts +0 -4
  285. package/dist/tools/list-directory.js +0 -218
  286. package/dist/tools/move-file.d.ts +0 -4
  287. package/dist/tools/move-file.js +0 -178
  288. package/dist/tools/read-multiple.d.ts +0 -4
  289. package/dist/tools/read-multiple.js +0 -207
  290. package/dist/tools/shared.d.ts +0 -172
  291. package/dist/tools/shared.js +0 -599
  292. package/dist/tools/stat-many.d.ts +0 -4
  293. package/dist/tools/stat-many.js +0 -104
  294. package/dist/tools/task-support.d.ts +0 -29
  295. package/dist/tools/task-support.js +0 -472
  296. package/dist/tools/tree.d.ts +0 -4
  297. package/dist/tools/tree.js +0 -102
  298. package/dist/tools/write-file.d.ts +0 -4
  299. package/dist/tools/write-file.js +0 -60
  300. package/dist/tools.d.ts +0 -5
  301. package/dist/tools.js +0 -54
package/dist/config.js DELETED
@@ -1,31 +0,0 @@
1
- export const ErrorCode = {
2
- ACCESS_DENIED: 'ACCESS_DENIED',
3
- NOT_FOUND: 'NOT_FOUND',
4
- NOT_FILE: 'NOT_FILE',
5
- NOT_DIRECTORY: 'NOT_DIRECTORY',
6
- TOO_LARGE: 'TOO_LARGE',
7
- TIMEOUT: 'TIMEOUT',
8
- CANCELLED: 'CANCELLED',
9
- INVALID_PATTERN: 'INVALID_PATTERN',
10
- INVALID_INPUT: 'INVALID_INPUT',
11
- PERMISSION_DENIED: 'PERMISSION_DENIED',
12
- SYMLINK_NOT_ALLOWED: 'SYMLINK_NOT_ALLOWED',
13
- UNKNOWN: 'UNKNOWN',
14
- };
15
- const BYTE_UNIT_LABELS = ['B', 'KB', 'MB', 'GB', 'TB'];
16
- export function formatBytes(bytes) {
17
- if (bytes === 0)
18
- return '0 B';
19
- const unitIndex = Math.floor(Math.log(bytes) / Math.log(1024));
20
- const unit = BYTE_UNIT_LABELS[unitIndex] ?? 'B';
21
- const value = bytes / 1024 ** unitIndex;
22
- return `${parseFloat(value.toFixed(2))} ${unit}`;
23
- }
24
- export function joinLines(lines) {
25
- return lines.join('\n');
26
- }
27
- export function formatOperationSummary(summary) {
28
- if (!summary.truncated)
29
- return '';
30
- return `\n[truncated: ${summary.truncatedReason ?? 'limit reached'}]`;
31
- }
@@ -1,7 +0,0 @@
1
- export declare function assertNotAborted(signal?: AbortSignal, message?: string): void;
2
- export declare function withAbort<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T>;
3
- export declare function createTimedAbortSignal(baseSignal: AbortSignal | undefined, timeoutMs?: number): {
4
- signal: AbortSignal;
5
- cleanup: () => void;
6
- };
7
- export declare function withTimedAbortSignal<T>(baseSignal: AbortSignal | undefined, timeoutMs: number | undefined, run: (signal: AbortSignal) => Promise<T>): Promise<T>;
package/dist/lib/abort.js DELETED
@@ -1,81 +0,0 @@
1
- import { normalizeUnknownError } from './errors.js';
2
- function createAbortError(message = 'Operation aborted') {
3
- return new DOMException(message, 'AbortError');
4
- }
5
- const SHARED_NOOP_SIGNAL = new AbortController().signal;
6
- function normalizeAbortReason(reason, message) {
7
- if (reason instanceof Error)
8
- return reason;
9
- return createAbortError(message);
10
- }
11
- function isFiniteNumber(value) {
12
- return typeof value === 'number' && Number.isFinite(value);
13
- }
14
- export function assertNotAborted(signal, message) {
15
- if (!signal)
16
- return;
17
- try {
18
- signal.throwIfAborted();
19
- }
20
- catch (reason) {
21
- throw normalizeAbortReason(reason, message);
22
- }
23
- }
24
- function getAbortError(signal, message) {
25
- try {
26
- signal.throwIfAborted();
27
- }
28
- catch (reason) {
29
- return normalizeAbortReason(reason, message);
30
- }
31
- return createAbortError(message);
32
- }
33
- export function withAbort(promise, signal) {
34
- if (!signal)
35
- return promise;
36
- signal.throwIfAborted();
37
- return new Promise((resolve, reject) => {
38
- const onAbort = () => {
39
- reject(getAbortError(signal));
40
- };
41
- if (signal.aborted) {
42
- onAbort();
43
- return;
44
- }
45
- signal.addEventListener('abort', onAbort, { once: true });
46
- promise.then((value) => {
47
- signal.removeEventListener('abort', onAbort);
48
- resolve(value);
49
- }, (error) => {
50
- signal.removeEventListener('abort', onAbort);
51
- reject(normalizeUnknownError(error));
52
- });
53
- });
54
- }
55
- export function createTimedAbortSignal(baseSignal, timeoutMs) {
56
- const timeoutSignal = isFiniteNumber(timeoutMs)
57
- ? AbortSignal.timeout(timeoutMs)
58
- : undefined;
59
- if (baseSignal && timeoutSignal) {
60
- return {
61
- signal: AbortSignal.any([baseSignal, timeoutSignal]),
62
- cleanup: () => { },
63
- };
64
- }
65
- if (baseSignal) {
66
- return { signal: baseSignal, cleanup: () => { } };
67
- }
68
- if (timeoutSignal) {
69
- return { signal: timeoutSignal, cleanup: () => { } };
70
- }
71
- return { signal: SHARED_NOOP_SIGNAL, cleanup: () => { } };
72
- }
73
- export async function withTimedAbortSignal(baseSignal, timeoutMs, run) {
74
- const { signal, cleanup } = createTimedAbortSignal(baseSignal, timeoutMs);
75
- try {
76
- return await run(signal);
77
- }
78
- finally {
79
- cleanup();
80
- }
81
- }
@@ -1,42 +0,0 @@
1
- export declare function parseTrueEnvFlag(value: string | undefined): boolean;
2
- export declare function parseEnvInt(envVar: string, defaultValue: number, min: number, max: number): number;
3
- export declare const DEFAULT_LOG_LEVEL: "error" | "debug" | "info" | "notice" | "warning" | "critical" | "alert" | "emergency";
4
- export declare const DEFAULT_TASK_TTL_MS: number;
5
- export declare const MAX_TASK_TTL_MS: number;
6
- export declare const MAX_CONCURRENT_TASKS: number;
7
- export declare const TASK_CANCEL_POLL_MS = 2000;
8
- export declare function getInitHandshakeTimeoutMs(): number;
9
- export declare const INIT_TIMEOUT_CLOSE: boolean;
10
- export declare const TASK_POLL_INTERVAL_MS = 500;
11
- /** How long cancelled-task results are retained before lazy eviction. */
12
- export declare const CANCELLED_RESULT_TTL_MS: number;
13
- export declare const PARALLEL_CONCURRENCY: number;
14
- export declare const MAX_SEARCHABLE_FILE_SIZE: number;
15
- export declare const MAX_TEXT_FILE_SIZE: number;
16
- export declare const DEFAULT_READ_MANY_MAX_TOTAL_SIZE: number;
17
- export declare const DEFAULT_SEARCH_TIMEOUT_MS: number;
18
- /**
19
- * Number of search worker threads to use.
20
- * Default: CPU cores (capped at 8 for optimal I/O performance).
21
- * Configurable via FS_CONTEXT_SEARCH_WORKERS env var.
22
- */
23
- export declare const SEARCH_WORKERS: number;
24
- export declare const DEFAULT_MAX_DEPTH = 10;
25
- export declare const DEFAULT_LIST_MAX_ENTRIES = 20000;
26
- export declare const DEFAULT_SEARCH_MAX_FILES = 20000;
27
- export declare const MAX_TREE_DEPTH = 50;
28
- export declare const DEFAULT_TREE_DEPTH = 5;
29
- export declare const MAX_TREE_ENTRIES = 20000;
30
- export declare const DEFAULT_TREE_ENTRIES = 1000;
31
- export declare const MAX_LIST_ENTRIES = 20000;
32
- export declare const MAX_SEARCH_RESULTS = 10000;
33
- export declare const DEFAULT_SEARCH_RESULTS = 100;
34
- export declare const MAX_SEARCH_DEPTH = 100;
35
- export declare const DEFAULT_SEARCH_CONTENT_RESULTS = 500;
36
- export declare const MAX_LINE_CONTENT_LENGTH = 200;
37
- export declare const BINARY_CHECK_BUFFER_SIZE = 512;
38
- export declare const SENSITIVE_FILE_DENYLIST: string[];
39
- export declare const SENSITIVE_FILE_ALLOWLIST: string[];
40
- export declare const KNOWN_BINARY_EXTENSIONS: Set<string>;
41
- export declare const DEFAULT_EXCLUDE_PATTERNS: string[];
42
- export declare function getMimeType(ext: string): string;
@@ -1,313 +0,0 @@
1
- import { availableParallelism } from 'node:os';
2
- import { Logger } from './logger.js';
3
- const TRUE_ENV_VALUES = new Set(['1', 'true', 'yes', 'y', 'on']);
4
- const FALSE_ENV_VALUES = new Set(['0', 'false', 'no', 'n', 'off']);
5
- export function parseTrueEnvFlag(value) {
6
- if (value === undefined)
7
- return false;
8
- return TRUE_ENV_VALUES.has(value.trim().toLowerCase());
9
- }
10
- const KIB = 1024;
11
- const MIB = 1024 * KIB;
12
- function logInvalidEnvValue(envVar, value, expected, defaultValue) {
13
- Logger.warn(`Invalid ${envVar} value: ${value} (must be ${expected}). Using default: ${String(defaultValue)}`);
14
- }
15
- // Helper for parsing environment variables (only used for configurable values)
16
- export function parseEnvInt(envVar, defaultValue, min, max) {
17
- const value = process.env[envVar];
18
- if (!value)
19
- return defaultValue;
20
- const parsed = parseInt(value, 10);
21
- if (Number.isNaN(parsed) || parsed < min || parsed > max) {
22
- logInvalidEnvValue(envVar, value, `${String(min)}-${String(max)}`, defaultValue);
23
- return defaultValue;
24
- }
25
- return parsed;
26
- }
27
- function parseEnvBool(envVar, defaultValue) {
28
- const value = process.env[envVar];
29
- if (value === undefined)
30
- return defaultValue;
31
- const normalized = value.trim().toLowerCase();
32
- if (TRUE_ENV_VALUES.has(normalized))
33
- return true;
34
- if (FALSE_ENV_VALUES.has(normalized))
35
- return false;
36
- logInvalidEnvValue(envVar, value, 'true/false', defaultValue);
37
- return defaultValue;
38
- }
39
- function parseEnvList(envVar) {
40
- const value = process.env[envVar];
41
- if (!value)
42
- return [];
43
- const entries = [];
44
- for (const token of value.split(/[,\n]/u)) {
45
- const trimmed = token.trim();
46
- if (trimmed.length > 0) {
47
- entries.push(trimmed);
48
- }
49
- }
50
- return entries;
51
- }
52
- const VALID_LOG_LEVELS = [
53
- 'debug',
54
- 'info',
55
- 'notice',
56
- 'warning',
57
- 'error',
58
- 'critical',
59
- 'alert',
60
- 'emergency',
61
- ];
62
- function parseEnvLogLevel(envVar, defaultValue) {
63
- const value = process.env[envVar];
64
- if (!value)
65
- return defaultValue;
66
- const normalized = value.trim().toLowerCase();
67
- if (VALID_LOG_LEVELS.includes(normalized)) {
68
- return normalized;
69
- }
70
- Logger.warn(`Invalid ${envVar} value: ${value} (must be ${VALID_LOG_LEVELS.join('|')}). Using default: ${defaultValue}`);
71
- return defaultValue;
72
- }
73
- export const DEFAULT_LOG_LEVEL = parseEnvLogLevel('FILESYSTEM_MCP_LOG_LEVEL', 'info');
74
- // Default TTL for MCP tasks when the client does not specify one (5 minutes).
75
- export const DEFAULT_TASK_TTL_MS = 5 * 60 * 1000;
76
- export const MAX_TASK_TTL_MS = parseEnvInt('FILESYSTEM_MCP_MAX_TASK_TTL_MS', 60 * 60 * 1000, 1_000, 24 * 60 * 60 * 1000);
77
- export const MAX_CONCURRENT_TASKS = parseEnvInt('FILESYSTEM_MCP_MAX_CONCURRENT_TASKS', 100, 1, 10_000);
78
- export const TASK_CANCEL_POLL_MS = 2_000;
79
- export function getInitHandshakeTimeoutMs() {
80
- return parseEnvInt('FS_INIT_HANDSHAKE_TIMEOUT_MS', 30_000, 1_000, 300_000);
81
- }
82
- export const INIT_TIMEOUT_CLOSE = parseTrueEnvFlag(process.env['FS_INIT_TIMEOUT_CLOSE']);
83
- export const TASK_POLL_INTERVAL_MS = 500;
84
- /** How long cancelled-task results are retained before lazy eviction. */
85
- export const CANCELLED_RESULT_TTL_MS = 2 * 60 * 1_000; // 2 minutes
86
- // Auto-tuned parallelism based on CPU cores (no env override)
87
- const BYTES_PER_PARALLEL_TASK = 64 * MIB;
88
- const BYTES_PER_SEARCH_WORKER = 128 * MIB;
89
- function getAvailableMemory() {
90
- if (typeof process.availableMemory !== 'function')
91
- return undefined;
92
- const available = process.availableMemory();
93
- if (!Number.isFinite(available) || available <= 0)
94
- return undefined;
95
- return available;
96
- }
97
- function applyMemoryBound(cpuBound, bytesPerUnit, minValue) {
98
- const availableMemory = getAvailableMemory();
99
- if (availableMemory === undefined)
100
- return cpuBound;
101
- const memoryBound = Math.floor(availableMemory / bytesPerUnit);
102
- return Math.min(cpuBound, Math.max(memoryBound, minValue));
103
- }
104
- function getOptimalParallelism() {
105
- const cpuBound = Math.min(Math.max(availableParallelism(), 4), 32);
106
- return applyMemoryBound(cpuBound, BYTES_PER_PARALLEL_TASK, 2);
107
- }
108
- function getDefaultSearchWorkers() {
109
- const cpuBound = Math.min(availableParallelism(), 8);
110
- return applyMemoryBound(cpuBound, BYTES_PER_SEARCH_WORKER, 1);
111
- }
112
- // Hardcoded optimal values (no env override needed)
113
- export const PARALLEL_CONCURRENCY = getOptimalParallelism();
114
- // Configurable via environment variables
115
- export const MAX_SEARCHABLE_FILE_SIZE = parseEnvInt('MAX_SEARCH_SIZE', MIB, 100 * KIB, 10 * MIB);
116
- export const MAX_TEXT_FILE_SIZE = parseEnvInt('MAX_FILE_SIZE', 10 * MIB, MIB, 100 * MIB);
117
- export const DEFAULT_READ_MANY_MAX_TOTAL_SIZE = parseEnvInt('MAX_READ_MANY_TOTAL_SIZE', 512 * KIB, 10 * KIB, 100 * MIB);
118
- export const DEFAULT_SEARCH_TIMEOUT_MS = parseEnvInt('DEFAULT_SEARCH_TIMEOUT', 5000, 100, 60000);
119
- const ALLOW_SENSITIVE_FILES = parseEnvBool('FS_CONTEXT_ALLOW_SENSITIVE', false);
120
- const ENV_DENYLIST = parseEnvList('FS_CONTEXT_DENYLIST');
121
- const ENV_ALLOWLIST = parseEnvList('FS_CONTEXT_ALLOWLIST');
122
- /**
123
- * Number of search worker threads to use.
124
- * Default: CPU cores (capped at 8 for optimal I/O performance).
125
- * Configurable via FS_CONTEXT_SEARCH_WORKERS env var.
126
- */
127
- export const SEARCH_WORKERS = parseEnvInt('FS_CONTEXT_SEARCH_WORKERS', getDefaultSearchWorkers(), 1, 16);
128
- // Hardcoded defaults
129
- export const DEFAULT_MAX_DEPTH = 10;
130
- export const DEFAULT_LIST_MAX_ENTRIES = 20000;
131
- export const DEFAULT_SEARCH_MAX_FILES = 20000;
132
- // Schema limits and defaults
133
- export const MAX_TREE_DEPTH = 50;
134
- export const DEFAULT_TREE_DEPTH = 5;
135
- export const MAX_TREE_ENTRIES = 20000;
136
- export const DEFAULT_TREE_ENTRIES = 1000;
137
- export const MAX_LIST_ENTRIES = 20000;
138
- export const MAX_SEARCH_RESULTS = 10000;
139
- export const DEFAULT_SEARCH_RESULTS = 100;
140
- export const MAX_SEARCH_DEPTH = 100;
141
- export const DEFAULT_SEARCH_CONTENT_RESULTS = 500;
142
- // Non-configurable constants
143
- export const MAX_LINE_CONTENT_LENGTH = 200;
144
- export const BINARY_CHECK_BUFFER_SIZE = 512;
145
- const DEFAULT_SENSITIVE_PATTERNS = [
146
- '.env',
147
- '.env.*',
148
- '.npmrc',
149
- '.pypirc',
150
- '.aws/credentials',
151
- '.aws/config',
152
- '.mcpregistry_*_token',
153
- '*.pem',
154
- '*.key',
155
- '*.p12',
156
- '*.pfx',
157
- '*.crt',
158
- '*.cer',
159
- '*id_rsa*',
160
- '*id_dsa*',
161
- ];
162
- export const SENSITIVE_FILE_DENYLIST = [
163
- ...(ALLOW_SENSITIVE_FILES ? [] : DEFAULT_SENSITIVE_PATTERNS),
164
- ...ENV_DENYLIST,
165
- ];
166
- export const SENSITIVE_FILE_ALLOWLIST = [...ENV_ALLOWLIST];
167
- export const KNOWN_BINARY_EXTENSIONS = new Set([
168
- '.png',
169
- '.jpg',
170
- '.jpeg',
171
- '.gif',
172
- '.webp',
173
- '.bmp',
174
- '.ico',
175
- '.mp3',
176
- '.wav',
177
- '.flac',
178
- '.mp4',
179
- '.mov',
180
- '.avi',
181
- '.mkv',
182
- '.webm',
183
- '.zip',
184
- '.tar',
185
- '.gz',
186
- '.7z',
187
- '.rar',
188
- '.exe',
189
- '.dll',
190
- '.so',
191
- '.dylib',
192
- '.ttf',
193
- '.otf',
194
- '.woff',
195
- '.woff2',
196
- '.pdf',
197
- '.doc',
198
- '.docx',
199
- '.xls',
200
- '.xlsx',
201
- '.ppt',
202
- '.pptx',
203
- '.sqlite',
204
- '.db',
205
- '.wasm',
206
- '.bin',
207
- '.dat',
208
- ]);
209
- export const DEFAULT_EXCLUDE_PATTERNS = [
210
- '**/node_modules',
211
- '**/node_modules/**',
212
- '**/dist',
213
- '**/dist/**',
214
- '**/build',
215
- '**/build/**',
216
- '**/coverage',
217
- '**/coverage/**',
218
- '**/.git',
219
- '**/.git/**',
220
- '**/.vscode',
221
- '**/.vscode/**',
222
- '**/.idea',
223
- '**/.idea/**',
224
- '**/.DS_Store',
225
- '**/.next',
226
- '**/.next/**',
227
- '**/.nuxt',
228
- '**/.nuxt/**',
229
- '**/.output',
230
- '**/.output/**',
231
- '**/.svelte-kit',
232
- '**/.svelte-kit/**',
233
- '**/.cache',
234
- '**/.cache/**',
235
- '**/.yarn',
236
- '**/.yarn/**',
237
- '**/jspm_packages',
238
- '**/jspm_packages/**',
239
- '**/bower_components',
240
- '**/bower_components/**',
241
- '**/out',
242
- '**/out/**',
243
- '**/tmp',
244
- '**/tmp/**',
245
- '**/.temp',
246
- '**/.temp/**',
247
- '**/npm-debug.log',
248
- '**/yarn-debug.log',
249
- '**/yarn-error.log',
250
- '**/Thumbs.db',
251
- ];
252
- const MIME_TYPES = new Map([
253
- ['.png', 'image/png'],
254
- ['.jpg', 'image/jpeg'],
255
- ['.jpeg', 'image/jpeg'],
256
- ['.gif', 'image/gif'],
257
- ['.webp', 'image/webp'],
258
- ['.svg', 'image/svg+xml'],
259
- ['.ico', 'image/x-icon'],
260
- ['.bmp', 'image/bmp'],
261
- ['.tiff', 'image/tiff'],
262
- ['.tif', 'image/tiff'],
263
- ['.avif', 'image/avif'],
264
- ['.heic', 'image/heic'],
265
- ['.heif', 'image/heif'],
266
- ['.mp3', 'audio/mpeg'],
267
- ['.wav', 'audio/wav'],
268
- ['.ogg', 'audio/ogg'],
269
- ['.flac', 'audio/flac'],
270
- ['.aac', 'audio/aac'],
271
- ['.m4a', 'audio/mp4'],
272
- ['.wma', 'audio/x-ms-wma'],
273
- ['.opus', 'audio/opus'],
274
- ['.mp4', 'video/mp4'],
275
- ['.webm', 'video/webm'],
276
- ['.avi', 'video/x-msvideo'],
277
- ['.mov', 'video/quicktime'],
278
- ['.wmv', 'video/x-ms-wmv'],
279
- ['.mkv', 'video/x-matroska'],
280
- ['.flv', 'video/x-flv'],
281
- ['.pdf', 'application/pdf'],
282
- ['.txt', 'text/plain'],
283
- ['.log', 'text/plain'],
284
- ['.md', 'text/markdown'],
285
- ['.markdown', 'text/markdown'],
286
- ['.json', 'application/json'],
287
- ['.jsonc', 'application/json'],
288
- ['.xml', 'application/xml'],
289
- ['.yaml', 'text/yaml'],
290
- ['.yml', 'text/yaml'],
291
- ['.html', 'text/html'],
292
- ['.htm', 'text/html'],
293
- ['.css', 'text/css'],
294
- ['.js', 'text/javascript'],
295
- ['.mjs', 'text/javascript'],
296
- ['.cjs', 'text/javascript'],
297
- ['.ts', 'text/typescript'],
298
- ['.tsx', 'text/typescript'],
299
- ['.zip', 'application/zip'],
300
- ['.tar', 'application/x-tar'],
301
- ['.gz', 'application/gzip'],
302
- ['.7z', 'application/x-7z-compressed'],
303
- ['.rar', 'application/vnd.rar'],
304
- ['.ttf', 'font/ttf'],
305
- ['.otf', 'font/otf'],
306
- ['.woff', 'font/woff'],
307
- ['.woff2', 'font/woff2'],
308
- ['.wasm', 'application/wasm'],
309
- ]);
310
- export function getMimeType(ext) {
311
- const lowerExt = ext.toLowerCase();
312
- return MIME_TYPES.get(lowerExt) ?? 'application/octet-stream';
313
- }
@@ -1,28 +0,0 @@
1
- import { ErrorCode } from '../config.js';
2
- export { ErrorCode };
3
- interface DetailedError {
4
- code: ErrorCode;
5
- message: string;
6
- path?: string;
7
- suggestion?: string;
8
- details?: Record<string, unknown>;
9
- }
10
- export declare function isNodeError(error: unknown): error is NodeJS.ErrnoException;
11
- export declare function formatUnknownErrorMessage(error: unknown): string;
12
- export declare function normalizeUnknownError(error: unknown): Error;
13
- export declare function isAbortError(error: unknown): boolean;
14
- export declare function isTimeoutLikeError(error: unknown): boolean;
15
- export declare class McpError extends Error {
16
- code: ErrorCode;
17
- path?: string | undefined;
18
- details?: Record<string, unknown>;
19
- constructor(code: ErrorCode, message: string, path?: string | undefined, details?: Record<string, unknown>, cause?: unknown);
20
- static notFound(message: string, path?: string, details?: Record<string, unknown>, cause?: unknown): McpError;
21
- static invalidInput(message: string, path?: string, details?: Record<string, unknown>, cause?: unknown): McpError;
22
- static accessDenied(message: string, path?: string, details?: Record<string, unknown>, cause?: unknown): McpError;
23
- static timeout(message: string, path?: string, details?: Record<string, unknown>, cause?: unknown): McpError;
24
- }
25
- export declare function classifyError(error: unknown): ErrorCode;
26
- export declare function createDetailedError(error: unknown, path?: string, additionalDetails?: Record<string, unknown>): DetailedError;
27
- export declare function formatDetailedError(error: DetailedError): string;
28
- export declare function getSuggestion(code: ErrorCode): string | undefined;