@j0hanz/filesystem-context-mcp 1.1.0 → 1.2.1
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.
- package/README.md +106 -29
- package/dist/__tests__/lib/errors.test.js +3 -23
- package/dist/__tests__/lib/errors.test.js.map +1 -1
- package/dist/__tests__/lib/file-operations.test.js +34 -0
- package/dist/__tests__/lib/file-operations.test.js.map +1 -1
- package/dist/__tests__/lib/path-validation.test.js +8 -0
- package/dist/__tests__/lib/path-validation.test.js.map +1 -1
- package/dist/__tests__/schemas/validators.test.js +101 -122
- package/dist/__tests__/schemas/validators.test.js.map +1 -1
- package/dist/__tests__/security/filesystem-boundary.test.js +1 -1
- package/dist/__tests__/security/filesystem-boundary.test.js.map +1 -1
- package/dist/config/types.d.ts +1 -85
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -2
- package/dist/config/types.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/instructions.md +1 -2
- package/dist/lib/constants.d.ts +3 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +73 -259
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/errors.d.ts +25 -3
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +4 -94
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/file-operations/analyze-directory.d.ts +8 -0
- package/dist/lib/file-operations/analyze-directory.d.ts.map +1 -0
- package/dist/lib/file-operations/analyze-directory.js +117 -0
- package/dist/lib/file-operations/analyze-directory.js.map +1 -0
- package/dist/lib/file-operations/directory-helpers.d.ts +35 -0
- package/dist/lib/file-operations/directory-helpers.d.ts.map +1 -0
- package/dist/lib/file-operations/directory-helpers.js +136 -0
- package/dist/lib/file-operations/directory-helpers.js.map +1 -0
- package/dist/lib/file-operations/directory-items.d.ts +20 -0
- package/dist/lib/file-operations/directory-items.d.ts.map +1 -0
- package/dist/lib/file-operations/directory-items.js +85 -0
- package/dist/lib/file-operations/directory-items.js.map +1 -0
- package/dist/lib/file-operations/directory-iteration.d.ts +17 -0
- package/dist/lib/file-operations/directory-iteration.d.ts.map +1 -0
- package/dist/lib/file-operations/directory-iteration.js +55 -0
- package/dist/lib/file-operations/directory-iteration.js.map +1 -0
- package/dist/lib/file-operations/directory-tree.d.ts +9 -0
- package/dist/lib/file-operations/directory-tree.d.ts.map +1 -0
- package/dist/lib/file-operations/directory-tree.js +175 -0
- package/dist/lib/file-operations/directory-tree.js.map +1 -0
- package/dist/lib/file-operations/file-info.d.ts +3 -0
- package/dist/lib/file-operations/file-info.d.ts.map +1 -0
- package/dist/lib/file-operations/file-info.js +56 -0
- package/dist/lib/file-operations/file-info.js.map +1 -0
- package/dist/lib/file-operations/list-directory.d.ts +10 -0
- package/dist/lib/file-operations/list-directory.d.ts.map +1 -0
- package/dist/lib/file-operations/list-directory.js +189 -0
- package/dist/lib/file-operations/list-directory.js.map +1 -0
- package/dist/lib/file-operations/pattern-complexity.d.ts +16 -0
- package/dist/lib/file-operations/pattern-complexity.d.ts.map +1 -0
- package/dist/lib/file-operations/pattern-complexity.js +86 -0
- package/dist/lib/file-operations/pattern-complexity.js.map +1 -0
- package/dist/lib/file-operations/pattern-validator.d.ts +15 -0
- package/dist/lib/file-operations/pattern-validator.d.ts.map +1 -0
- package/dist/lib/file-operations/pattern-validator.js +69 -0
- package/dist/lib/file-operations/pattern-validator.js.map +1 -0
- package/dist/lib/file-operations/read-media-file.d.ts +5 -0
- package/dist/lib/file-operations/read-media-file.d.ts.map +1 -0
- package/dist/lib/file-operations/read-media-file.js +31 -0
- package/dist/lib/file-operations/read-media-file.js.map +1 -0
- package/dist/lib/file-operations/read-multiple-files.d.ts +16 -0
- package/dist/lib/file-operations/read-multiple-files.d.ts.map +1 -0
- package/dist/lib/file-operations/read-multiple-files.js +100 -0
- package/dist/lib/file-operations/read-multiple-files.js.map +1 -0
- package/dist/lib/file-operations/search-content.d.ts +18 -0
- package/dist/lib/file-operations/search-content.d.ts.map +1 -0
- package/dist/lib/file-operations/search-content.js +436 -0
- package/dist/lib/file-operations/search-content.js.map +1 -0
- package/dist/lib/file-operations/search-files.d.ts +11 -0
- package/dist/lib/file-operations/search-files.d.ts.map +1 -0
- package/dist/lib/file-operations/search-files.js +143 -0
- package/dist/lib/file-operations/search-files.js.map +1 -0
- package/dist/lib/file-operations/sorting.d.ts +12 -0
- package/dist/lib/file-operations/sorting.d.ts.map +1 -0
- package/dist/lib/file-operations/sorting.js +24 -0
- package/dist/lib/file-operations/sorting.js.map +1 -0
- package/dist/lib/file-operations.d.ts +9 -57
- package/dist/lib/file-operations.d.ts.map +1 -1
- package/dist/lib/file-operations.js +9 -773
- package/dist/lib/file-operations.js.map +1 -1
- package/dist/lib/fs-helpers/binary-detect.d.ts +3 -0
- package/dist/lib/fs-helpers/binary-detect.d.ts.map +1 -0
- package/dist/lib/fs-helpers/binary-detect.js +54 -0
- package/dist/lib/fs-helpers/binary-detect.js.map +1 -0
- package/dist/lib/fs-helpers/concurrency.d.ts +11 -0
- package/dist/lib/fs-helpers/concurrency.d.ts.map +1 -0
- package/dist/lib/fs-helpers/concurrency.js +95 -0
- package/dist/lib/fs-helpers/concurrency.js.map +1 -0
- package/dist/lib/fs-helpers/fs-utils.d.ts +5 -0
- package/dist/lib/fs-helpers/fs-utils.d.ts.map +1 -0
- package/dist/lib/fs-helpers/fs-utils.js +13 -0
- package/dist/lib/fs-helpers/fs-utils.js.map +1 -0
- package/dist/lib/fs-helpers/readers/head-file.d.ts +2 -0
- package/dist/lib/fs-helpers/readers/head-file.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/head-file.js +73 -0
- package/dist/lib/fs-helpers/readers/head-file.js.map +1 -0
- package/dist/lib/fs-helpers/readers/line-range.d.ts +7 -0
- package/dist/lib/fs-helpers/readers/line-range.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/line-range.js +46 -0
- package/dist/lib/fs-helpers/readers/line-range.js.map +1 -0
- package/dist/lib/fs-helpers/readers/read-file.d.ts +16 -0
- package/dist/lib/fs-helpers/readers/read-file.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/read-file.js +87 -0
- package/dist/lib/fs-helpers/readers/read-file.js.map +1 -0
- package/dist/lib/fs-helpers/readers/stream-lines.d.ts +7 -0
- package/dist/lib/fs-helpers/readers/stream-lines.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/stream-lines.js +61 -0
- package/dist/lib/fs-helpers/readers/stream-lines.js.map +1 -0
- package/dist/lib/fs-helpers/readers/tail-file.d.ts +2 -0
- package/dist/lib/fs-helpers/readers/tail-file.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/tail-file.js +98 -0
- package/dist/lib/fs-helpers/readers/tail-file.js.map +1 -0
- package/dist/lib/fs-helpers/readers/utf8.d.ts +3 -0
- package/dist/lib/fs-helpers/readers/utf8.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers/utf8.js +22 -0
- package/dist/lib/fs-helpers/readers/utf8.js.map +1 -0
- package/dist/lib/fs-helpers/readers.d.ts +4 -0
- package/dist/lib/fs-helpers/readers.d.ts.map +1 -0
- package/dist/lib/fs-helpers/readers.js +4 -0
- package/dist/lib/fs-helpers/readers.js.map +1 -0
- package/dist/lib/fs-helpers.d.ts +4 -25
- package/dist/lib/fs-helpers.d.ts.map +1 -1
- package/dist/lib/fs-helpers.js +4 -327
- package/dist/lib/fs-helpers.js.map +1 -1
- package/dist/lib/path-validation/allowed-directories.d.ts +9 -0
- package/dist/lib/path-validation/allowed-directories.d.ts.map +1 -0
- package/dist/lib/path-validation/allowed-directories.js +94 -0
- package/dist/lib/path-validation/allowed-directories.js.map +1 -0
- package/dist/lib/path-validation/errors.d.ts +5 -0
- package/dist/lib/path-validation/errors.d.ts.map +1 -0
- package/dist/lib/path-validation/errors.js +33 -0
- package/dist/lib/path-validation/errors.js.map +1 -0
- package/dist/lib/path-validation/roots.d.ts +3 -0
- package/dist/lib/path-validation/roots.d.ts.map +1 -0
- package/dist/lib/path-validation/roots.js +49 -0
- package/dist/lib/path-validation/roots.js.map +1 -0
- package/dist/lib/path-validation/validators.d.ts +9 -0
- package/dist/lib/path-validation/validators.d.ts.map +1 -0
- package/dist/lib/path-validation/validators.js +70 -0
- package/dist/lib/path-validation/validators.js.map +1 -0
- package/dist/lib/path-validation.d.ts +3 -7
- package/dist/lib/path-validation.d.ts.map +1 -1
- package/dist/lib/path-validation.js +3 -141
- package/dist/lib/path-validation.js.map +1 -1
- package/dist/lib/performance/monitor.d.ts +25 -0
- package/dist/lib/performance/monitor.d.ts.map +1 -0
- package/dist/lib/performance/monitor.js +84 -0
- package/dist/lib/performance/monitor.js.map +1 -0
- package/dist/schemas/input-helpers.d.ts +27 -0
- package/dist/schemas/input-helpers.d.ts.map +1 -0
- package/dist/schemas/input-helpers.js +176 -0
- package/dist/schemas/input-helpers.js.map +1 -0
- package/dist/schemas/inputs.d.ts +14 -7
- package/dist/schemas/inputs.d.ts.map +1 -1
- package/dist/schemas/inputs.js +56 -228
- package/dist/schemas/inputs.js.map +1 -1
- package/dist/schemas/output-helpers.d.ts +24 -0
- package/dist/schemas/output-helpers.d.ts.map +1 -0
- package/dist/schemas/output-helpers.js +13 -0
- package/dist/schemas/output-helpers.js.map +1 -0
- package/dist/schemas/outputs.d.ts +476 -42
- package/dist/schemas/outputs.d.ts.map +1 -1
- package/dist/schemas/outputs.js +26 -41
- package/dist/schemas/outputs.js.map +1 -1
- package/dist/server.d.ts +9 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +29 -45
- package/dist/server.js.map +1 -1
- package/dist/tools/analyze-directory.d.ts.map +1 -1
- package/dist/tools/analyze-directory.js +115 -53
- package/dist/tools/analyze-directory.js.map +1 -1
- package/dist/tools/directory-tree.d.ts.map +1 -1
- package/dist/tools/directory-tree.js +86 -49
- package/dist/tools/directory-tree.js.map +1 -1
- package/dist/tools/get-file-info.d.ts.map +1 -1
- package/dist/tools/get-file-info.js +71 -37
- package/dist/tools/get-file-info.js.map +1 -1
- package/dist/tools/list-allowed-dirs.d.ts.map +1 -1
- package/dist/tools/list-allowed-dirs.js +48 -35
- package/dist/tools/list-allowed-dirs.js.map +1 -1
- package/dist/tools/list-directory.d.ts.map +1 -1
- package/dist/tools/list-directory.js +129 -58
- package/dist/tools/list-directory.js.map +1 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +70 -56
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/read-media-file.d.ts.map +1 -1
- package/dist/tools/read-media-file.js +39 -41
- package/dist/tools/read-media-file.js.map +1 -1
- package/dist/tools/read-multiple-files.d.ts.map +1 -1
- package/dist/tools/read-multiple-files.js +58 -50
- package/dist/tools/read-multiple-files.js.map +1 -1
- package/dist/tools/search-content.d.ts.map +1 -1
- package/dist/tools/search-content.js +148 -89
- package/dist/tools/search-content.js.map +1 -1
- package/dist/tools/search-files.d.ts.map +1 -1
- package/dist/tools/search-files.js +123 -50
- package/dist/tools/search-files.js.map +1 -1
- package/dist/tools/tool-response.d.ts +9 -0
- package/dist/tools/tool-response.d.ts.map +1 -0
- package/dist/tools/tool-response.js +7 -0
- package/dist/tools/tool-response.js.map +1 -0
- package/package.json +2 -1
- package/dist/__tests__/errors.test.d.ts +0 -2
- package/dist/__tests__/errors.test.d.ts.map +0 -1
- package/dist/__tests__/errors.test.js +0 -88
- package/dist/__tests__/errors.test.js.map +0 -1
- package/dist/__tests__/file-operations.test.d.ts +0 -2
- package/dist/__tests__/file-operations.test.d.ts.map +0 -1
- package/dist/__tests__/file-operations.test.js +0 -230
- package/dist/__tests__/file-operations.test.js.map +0 -1
- package/dist/__tests__/lib/formatters.test.d.ts +0 -2
- package/dist/__tests__/lib/formatters.test.d.ts.map +0 -1
- package/dist/__tests__/lib/formatters.test.js +0 -248
- package/dist/__tests__/lib/formatters.test.js.map +0 -1
- package/dist/__tests__/lib/image-parsing.test.d.ts +0 -2
- package/dist/__tests__/lib/image-parsing.test.d.ts.map +0 -1
- package/dist/__tests__/lib/image-parsing.test.js +0 -262
- package/dist/__tests__/lib/image-parsing.test.js.map +0 -1
- package/dist/__tests__/path-validation.test.d.ts +0 -2
- package/dist/__tests__/path-validation.test.d.ts.map +0 -1
- package/dist/__tests__/path-validation.test.js +0 -92
- package/dist/__tests__/path-validation.test.js.map +0 -1
- package/dist/lib/directory-helpers.d.ts +0 -4
- package/dist/lib/directory-helpers.d.ts.map +0 -1
- package/dist/lib/directory-helpers.js +0 -36
- package/dist/lib/directory-helpers.js.map +0 -1
- package/dist/lib/formatters.d.ts +0 -10
- package/dist/lib/formatters.d.ts.map +0 -1
- package/dist/lib/formatters.js +0 -202
- package/dist/lib/formatters.js.map +0 -1
- package/dist/lib/image-parsing.d.ts +0 -4
- package/dist/lib/image-parsing.d.ts.map +0 -1
- package/dist/lib/image-parsing.js +0 -124
- package/dist/lib/image-parsing.js.map +0 -1
- package/dist/lib/mcp-logger.d.ts +0 -11
- package/dist/lib/mcp-logger.d.ts.map +0 -1
- package/dist/lib/mcp-logger.js +0 -49
- package/dist/lib/mcp-logger.js.map +0 -1
- package/dist/lib/roots-utils.d.ts +0 -7
- package/dist/lib/roots-utils.d.ts.map +0 -1
- package/dist/lib/roots-utils.js +0 -39
- package/dist/lib/roots-utils.js.map +0 -1
- package/dist/lib/search-helpers.d.ts +0 -16
- package/dist/lib/search-helpers.d.ts.map +0 -1
- package/dist/lib/search-helpers.js +0 -169
- package/dist/lib/search-helpers.js.map +0 -1
- package/dist/lib/sorting.d.ts +0 -12
- package/dist/lib/sorting.d.ts.map +0 -1
- package/dist/lib/sorting.js +0 -41
- package/dist/lib/sorting.js.map +0 -1
- package/dist/lib/types.d.ts +0 -6
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -2
- package/dist/lib/types.js.map +0 -1
- package/dist/prompts/analyze-codebase.d.ts +0 -3
- package/dist/prompts/analyze-codebase.d.ts.map +0 -1
- package/dist/prompts/analyze-codebase.js +0 -144
- package/dist/prompts/analyze-codebase.js.map +0 -1
- package/dist/prompts/filesystem-query.d.ts +0 -3
- package/dist/prompts/filesystem-query.d.ts.map +0 -1
- package/dist/prompts/filesystem-query.js +0 -168
- package/dist/prompts/filesystem-query.js.map +0 -1
- package/dist/prompts/find-duplicates.d.ts +0 -3
- package/dist/prompts/find-duplicates.d.ts.map +0 -1
- package/dist/prompts/find-duplicates.js +0 -77
- package/dist/prompts/find-duplicates.js.map +0 -1
- package/dist/prompts/index.d.ts +0 -3
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js +0 -13
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/project-overview.d.ts +0 -3
- package/dist/prompts/project-overview.d.ts.map +0 -1
- package/dist/prompts/project-overview.js +0 -122
- package/dist/prompts/project-overview.js.map +0 -1
- package/dist/prompts/search-and-replace.d.ts +0 -3
- package/dist/prompts/search-and-replace.d.ts.map +0 -1
- package/dist/prompts/search-and-replace.js +0 -130
- package/dist/prompts/search-and-replace.js.map +0 -1
- package/dist/prompts/shared.d.ts +0 -11
- package/dist/prompts/shared.d.ts.map +0 -1
- package/dist/prompts/shared.js +0 -32
- package/dist/prompts/shared.js.map +0 -1
- package/dist/resources/index.d.ts +0 -3
- package/dist/resources/index.d.ts.map +0 -1
- package/dist/resources/index.js +0 -54
- package/dist/resources/index.js.map +0 -1
- package/dist/schemas/validators.d.ts +0 -12
- package/dist/schemas/validators.d.ts.map +0 -1
- package/dist/schemas/validators.js +0 -35
- package/dist/schemas/validators.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -2
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/response-helpers.d.ts +0 -22
- package/dist/utils/response-helpers.d.ts.map +0 -1
- package/dist/utils/response-helpers.js +0 -24
- package/dist/utils/response-helpers.js.map +0 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ErrorCode, McpError } from '../errors.js';
|
|
2
|
+
const BACKSLASH_PATTERN = /\\/g;
|
|
3
|
+
const UNSAFE_PATTERN = /\.\.|^[/\\]/;
|
|
4
|
+
const MAX_PATTERN_LENGTH = 1000;
|
|
5
|
+
const MAX_BRACE_EXPANSION = 100;
|
|
6
|
+
/**
|
|
7
|
+
* Validates glob patterns for safety and common mistakes
|
|
8
|
+
* Prevents backslashes, absolute paths, and overly complex patterns
|
|
9
|
+
*/
|
|
10
|
+
export function validateGlobPattern(pattern) {
|
|
11
|
+
// Check for empty pattern
|
|
12
|
+
if (!pattern || pattern.trim().length === 0) {
|
|
13
|
+
return {
|
|
14
|
+
isValid: false,
|
|
15
|
+
error: 'Pattern cannot be empty',
|
|
16
|
+
suggestion: 'Provide at least one glob pattern like "**/*.ts"',
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Check pattern length
|
|
20
|
+
if (pattern.length > MAX_PATTERN_LENGTH) {
|
|
21
|
+
return {
|
|
22
|
+
isValid: false,
|
|
23
|
+
error: `Pattern too long (${pattern.length}/${MAX_PATTERN_LENGTH} chars)`,
|
|
24
|
+
suggestion: `Simplify the pattern or split into multiple searches`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Check for backslashes (common Windows mistake)
|
|
28
|
+
if (BACKSLASH_PATTERN.test(pattern)) {
|
|
29
|
+
return {
|
|
30
|
+
isValid: false,
|
|
31
|
+
error: 'Glob patterns must use forward slashes, not backslashes',
|
|
32
|
+
suggestion: `Replace \\ with /. Example: src/lib/**/*.ts instead of src\\lib\\**\\*.ts`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
// Check for absolute paths and .. segments
|
|
36
|
+
if (UNSAFE_PATTERN.test(pattern)) {
|
|
37
|
+
return {
|
|
38
|
+
isValid: false,
|
|
39
|
+
error: 'Pattern must be relative (no absolute paths, no .. segments, no leading slash)',
|
|
40
|
+
suggestion: 'Remove leading / or convert absolute path to relative from base directory',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Check for excessive brace expansion
|
|
44
|
+
const braceMatches = pattern.match(/\{[^}]*\}/g) ?? [];
|
|
45
|
+
for (const match of braceMatches) {
|
|
46
|
+
const items = match.slice(1, -1).split(',');
|
|
47
|
+
if (items.length > MAX_BRACE_EXPANSION) {
|
|
48
|
+
return {
|
|
49
|
+
isValid: false,
|
|
50
|
+
error: `Brace expansion too large (${items.length}/${MAX_BRACE_EXPANSION} items)`,
|
|
51
|
+
suggestion: 'Use character classes [abc] instead of brace expansion {a,b,c} when possible',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { isValid: true };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Throws McpError if pattern is invalid
|
|
59
|
+
*/
|
|
60
|
+
export function validateGlobPatternOrThrow(pattern, basePath) {
|
|
61
|
+
const result = validateGlobPattern(pattern);
|
|
62
|
+
if (!result.isValid) {
|
|
63
|
+
throw new McpError(ErrorCode.E_INVALID_PATTERN, result.error ?? 'Invalid glob pattern', basePath, {
|
|
64
|
+
pattern,
|
|
65
|
+
suggestion: result.suggestion,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=pattern-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-validator.js","sourceRoot":"","sources":["../../../src/lib/file-operations/pattern-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAChC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAQhC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,0BAA0B;IAC1B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,yBAAyB;YAChC,UAAU,EAAE,kDAAkD;SAC/D,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,qBAAqB,OAAO,CAAC,MAAM,IAAI,kBAAkB,SAAS;YACzE,UAAU,EAAE,sDAAsD;SACnE,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,yDAAyD;YAChE,UAAU,EAAE,2EAA2E;SACxF,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EACH,gFAAgF;YAClF,UAAU,EACR,2EAA2E;SAC9E,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACvD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;YACvC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,8BAA8B,KAAK,CAAC,MAAM,IAAI,mBAAmB,SAAS;gBACjF,UAAU,EACR,8EAA8E;aACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,QAAgB;IAEhB,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,iBAAiB,EAC3B,MAAM,CAAC,KAAK,IAAI,sBAAsB,EACtC,QAAQ,EACR;YACE,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-media-file.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/read-media-file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAwB7D,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,EAAE,OAA6B,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC3D,OAAO,CAAC,eAAe,CAAC,CAiB1B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { getMimeType, MAX_MEDIA_FILE_SIZE } from '../constants.js';
|
|
4
|
+
import { ErrorCode, McpError } from '../errors.js';
|
|
5
|
+
import { validateExistingPath } from '../path-validation.js';
|
|
6
|
+
function assertFile(stats, filePath) {
|
|
7
|
+
if (stats.isFile())
|
|
8
|
+
return;
|
|
9
|
+
throw new McpError(ErrorCode.E_NOT_FILE, `Not a file: ${filePath}`, filePath);
|
|
10
|
+
}
|
|
11
|
+
function assertSizeWithinLimit(size, maxSize, filePath) {
|
|
12
|
+
if (size <= maxSize)
|
|
13
|
+
return;
|
|
14
|
+
throw new McpError(ErrorCode.E_TOO_LARGE, `File too large: ${size} bytes (max: ${maxSize} bytes)`, filePath, { size, maxSize });
|
|
15
|
+
}
|
|
16
|
+
export async function readMediaFile(filePath, { maxSize = MAX_MEDIA_FILE_SIZE } = {}) {
|
|
17
|
+
const validPath = await validateExistingPath(filePath);
|
|
18
|
+
const stats = await fs.stat(validPath);
|
|
19
|
+
assertFile(stats, filePath);
|
|
20
|
+
assertSizeWithinLimit(stats.size, maxSize, filePath);
|
|
21
|
+
const ext = path.extname(validPath).toLowerCase();
|
|
22
|
+
const mimeType = getMimeType(ext);
|
|
23
|
+
const buffer = await fs.readFile(validPath);
|
|
24
|
+
return {
|
|
25
|
+
path: validPath,
|
|
26
|
+
mimeType,
|
|
27
|
+
size: stats.size,
|
|
28
|
+
data: buffer.toString('base64'),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=read-media-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-media-file.js","sourceRoot":"","sources":["../../../src/lib/file-operations/read-media-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,SAAS,UAAU,CAAC,KAAY,EAAE,QAAgB;IAChD,IAAI,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO;IAC3B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,eAAe,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,OAAe,EACf,QAAgB;IAEhB,IAAI,IAAI,IAAI,OAAO;QAAE,OAAO;IAC5B,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,WAAW,EACrB,mBAAmB,IAAI,gBAAgB,OAAO,SAAS,EACvD,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,EAAE,OAAO,GAAG,mBAAmB,KAA2B,EAAE;IAE5D,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEvC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5B,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAErD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,QAAQ;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface ReadMultipleResult {
|
|
2
|
+
path: string;
|
|
3
|
+
content?: string;
|
|
4
|
+
truncated?: boolean;
|
|
5
|
+
totalLines?: number;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function readMultipleFiles(filePaths: string[], options?: {
|
|
9
|
+
encoding?: BufferEncoding;
|
|
10
|
+
maxSize?: number;
|
|
11
|
+
maxTotalSize?: number;
|
|
12
|
+
head?: number;
|
|
13
|
+
tail?: number;
|
|
14
|
+
}): Promise<ReadMultipleResult[]>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=read-multiple-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-multiple-files.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/read-multiple-files.ts"],"names":[],"mappings":"AAOA,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsGD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE;IACP,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACV,GACL,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAuD/B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import { MAX_TEXT_FILE_SIZE, PARALLEL_CONCURRENCY } from '../constants.js';
|
|
3
|
+
import { ErrorCode, McpError } from '../errors.js';
|
|
4
|
+
import { processInParallel, readFile } from '../fs-helpers.js';
|
|
5
|
+
import { validateExistingPath } from '../path-validation.js';
|
|
6
|
+
function assertHeadTailOptions(head, tail) {
|
|
7
|
+
if (head === undefined || tail === undefined)
|
|
8
|
+
return;
|
|
9
|
+
throw new McpError(ErrorCode.E_INVALID_INPUT, 'Cannot specify both head and tail simultaneously', undefined);
|
|
10
|
+
}
|
|
11
|
+
function createOutputSkeleton(filePaths) {
|
|
12
|
+
return filePaths.map((filePath) => ({ path: filePath }));
|
|
13
|
+
}
|
|
14
|
+
async function collectFileBudget(filePaths, isPartialRead, maxTotalSize) {
|
|
15
|
+
const skippedBudget = new Set();
|
|
16
|
+
// If performing partial read (head/tail), skip size checks
|
|
17
|
+
if (isPartialRead) {
|
|
18
|
+
return { skippedBudget };
|
|
19
|
+
}
|
|
20
|
+
// Gather file sizes
|
|
21
|
+
const { results } = await processInParallel(filePaths.map((filePath, index) => ({ filePath, index })), async ({ filePath, index }) => {
|
|
22
|
+
const validPath = await validateExistingPath(filePath);
|
|
23
|
+
const stats = await fs.stat(validPath);
|
|
24
|
+
return { filePath, index, size: stats.size };
|
|
25
|
+
}, PARALLEL_CONCURRENCY);
|
|
26
|
+
// Determine which files to skip based on budget
|
|
27
|
+
let totalSize = 0;
|
|
28
|
+
const orderedResults = [...results].sort((a, b) => a.index - b.index);
|
|
29
|
+
for (const result of orderedResults) {
|
|
30
|
+
if (totalSize + result.size > maxTotalSize) {
|
|
31
|
+
skippedBudget.add(result.filePath);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
totalSize += result.size;
|
|
35
|
+
}
|
|
36
|
+
return { skippedBudget };
|
|
37
|
+
}
|
|
38
|
+
function buildProcessTargets(filePaths, skippedBudget) {
|
|
39
|
+
return filePaths
|
|
40
|
+
.map((filePath, index) => ({ filePath, index }))
|
|
41
|
+
.filter(({ filePath }) => !skippedBudget.has(filePath));
|
|
42
|
+
}
|
|
43
|
+
function applyParallelResults(output, results, errors, filePaths) {
|
|
44
|
+
for (const result of results) {
|
|
45
|
+
output[result.index] = result.value;
|
|
46
|
+
}
|
|
47
|
+
for (const failure of errors) {
|
|
48
|
+
const filePath = filePaths[failure.index] ?? '(unknown)';
|
|
49
|
+
output[failure.index] = {
|
|
50
|
+
path: filePath,
|
|
51
|
+
error: failure.error.message,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function applySkippedBudgetErrors(output, skippedBudget, filePaths, maxTotalSize) {
|
|
56
|
+
for (const filePath of skippedBudget) {
|
|
57
|
+
const index = filePaths.indexOf(filePath);
|
|
58
|
+
if (index === -1)
|
|
59
|
+
continue;
|
|
60
|
+
output[index] = {
|
|
61
|
+
path: filePath,
|
|
62
|
+
error: `Skipped: combined estimated read would exceed maxTotalSize (${maxTotalSize} bytes)`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export async function readMultipleFiles(filePaths, options = {}) {
|
|
67
|
+
if (filePaths.length === 0)
|
|
68
|
+
return [];
|
|
69
|
+
const { encoding = 'utf-8', maxSize = MAX_TEXT_FILE_SIZE, maxTotalSize = 100 * 1024 * 1024, head, tail, } = options;
|
|
70
|
+
assertHeadTailOptions(head, tail);
|
|
71
|
+
const output = createOutputSkeleton(filePaths);
|
|
72
|
+
const isPartialRead = head !== undefined || tail !== undefined;
|
|
73
|
+
const { skippedBudget } = await collectFileBudget(filePaths, isPartialRead, maxTotalSize);
|
|
74
|
+
const filesToProcess = buildProcessTargets(filePaths, skippedBudget);
|
|
75
|
+
const { results, errors } = await processInParallel(filesToProcess, async ({ filePath, index }) => {
|
|
76
|
+
const result = await readFile(filePath, {
|
|
77
|
+
encoding,
|
|
78
|
+
maxSize,
|
|
79
|
+
head,
|
|
80
|
+
tail,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
index,
|
|
84
|
+
value: {
|
|
85
|
+
path: result.path,
|
|
86
|
+
content: result.content,
|
|
87
|
+
truncated: result.truncated,
|
|
88
|
+
totalLines: result.totalLines,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}, PARALLEL_CONCURRENCY);
|
|
92
|
+
const mappedErrors = errors.map((failure) => ({
|
|
93
|
+
index: filesToProcess[failure.index]?.index ?? failure.index,
|
|
94
|
+
error: failure.error,
|
|
95
|
+
}));
|
|
96
|
+
applyParallelResults(output, results, mappedErrors, filePaths);
|
|
97
|
+
applySkippedBudgetErrors(output, skippedBudget, filePaths, maxTotalSize);
|
|
98
|
+
return output;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=read-multiple-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-multiple-files.js","sourceRoot":"","sources":["../../../src/lib/file-operations/read-multiple-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SearchContentResult } from '../../config/types.js';
|
|
2
|
+
export declare function searchContent(basePath: string, searchPattern: string, options?: {
|
|
3
|
+
filePattern?: string;
|
|
4
|
+
excludePatterns?: string[];
|
|
5
|
+
caseSensitive?: boolean;
|
|
6
|
+
maxResults?: number;
|
|
7
|
+
maxFileSize?: number;
|
|
8
|
+
maxFilesScanned?: number;
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
skipBinary?: boolean;
|
|
11
|
+
contextLines?: number;
|
|
12
|
+
wholeWord?: boolean;
|
|
13
|
+
isLiteral?: boolean;
|
|
14
|
+
includeHidden?: boolean;
|
|
15
|
+
baseNameMatch?: boolean;
|
|
16
|
+
caseSensitiveFileMatch?: boolean;
|
|
17
|
+
}): Promise<SearchContentResult>;
|
|
18
|
+
//# sourceMappingURL=search-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-content.d.ts","sourceRoot":"","sources":["../../../src/lib/file-operations/search-content.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA0nB/E,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC7B,GACL,OAAO,CAAC,mBAAmB,CAAC,CAiF9B"}
|