@n8n/fs-proxy 0.1.0-rc1

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 (106) hide show
  1. package/LICENSE.md +88 -0
  2. package/README.md +267 -0
  3. package/dist/build.tsbuildinfo +1 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +189 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config-templates.d.ts +10 -0
  8. package/dist/config-templates.js +39 -0
  9. package/dist/config-templates.js.map +1 -0
  10. package/dist/config.d.ts +67 -0
  11. package/dist/config.js +285 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/confirm-resource-cli.d.ts +4 -0
  14. package/dist/confirm-resource-cli.js +28 -0
  15. package/dist/confirm-resource-cli.js.map +1 -0
  16. package/dist/daemon.d.ts +11 -0
  17. package/dist/daemon.js +249 -0
  18. package/dist/daemon.js.map +1 -0
  19. package/dist/gateway-client.d.ts +38 -0
  20. package/dist/gateway-client.js +401 -0
  21. package/dist/gateway-client.js.map +1 -0
  22. package/dist/logger.d.ts +26 -0
  23. package/dist/logger.js +350 -0
  24. package/dist/logger.js.map +1 -0
  25. package/dist/settings-store.d.ts +29 -0
  26. package/dist/settings-store.js +224 -0
  27. package/dist/settings-store.js.map +1 -0
  28. package/dist/startup-config-cli.d.ts +5 -0
  29. package/dist/startup-config-cli.js +185 -0
  30. package/dist/startup-config-cli.js.map +1 -0
  31. package/dist/tools/browser/index.d.ts +14 -0
  32. package/dist/tools/browser/index.js +72 -0
  33. package/dist/tools/browser/index.js.map +1 -0
  34. package/dist/tools/filesystem/constants.d.ts +1 -0
  35. package/dist/tools/filesystem/constants.js +5 -0
  36. package/dist/tools/filesystem/constants.js.map +1 -0
  37. package/dist/tools/filesystem/copy-file.d.ts +14 -0
  38. package/dist/tools/filesystem/copy-file.js +65 -0
  39. package/dist/tools/filesystem/copy-file.js.map +1 -0
  40. package/dist/tools/filesystem/create-directory.d.ts +11 -0
  41. package/dist/tools/filesystem/create-directory.js +60 -0
  42. package/dist/tools/filesystem/create-directory.js.map +1 -0
  43. package/dist/tools/filesystem/delete.d.ts +11 -0
  44. package/dist/tools/filesystem/delete.js +64 -0
  45. package/dist/tools/filesystem/delete.js.map +1 -0
  46. package/dist/tools/filesystem/edit-file.d.ts +17 -0
  47. package/dist/tools/filesystem/edit-file.js +71 -0
  48. package/dist/tools/filesystem/edit-file.js.map +1 -0
  49. package/dist/tools/filesystem/fs-utils.d.ts +15 -0
  50. package/dist/tools/filesystem/fs-utils.js +178 -0
  51. package/dist/tools/filesystem/fs-utils.js.map +1 -0
  52. package/dist/tools/filesystem/get-file-tree.d.ts +14 -0
  53. package/dist/tools/filesystem/get-file-tree.js +38 -0
  54. package/dist/tools/filesystem/get-file-tree.js.map +1 -0
  55. package/dist/tools/filesystem/index.d.ts +3 -0
  56. package/dist/tools/filesystem/index.js +28 -0
  57. package/dist/tools/filesystem/index.js.map +1 -0
  58. package/dist/tools/filesystem/list-files.d.ts +17 -0
  59. package/dist/tools/filesystem/list-files.js +76 -0
  60. package/dist/tools/filesystem/list-files.js.map +1 -0
  61. package/dist/tools/filesystem/move.d.ts +14 -0
  62. package/dist/tools/filesystem/move.js +65 -0
  63. package/dist/tools/filesystem/move.js.map +1 -0
  64. package/dist/tools/filesystem/read-file.d.ts +17 -0
  65. package/dist/tools/filesystem/read-file.js +86 -0
  66. package/dist/tools/filesystem/read-file.js.map +1 -0
  67. package/dist/tools/filesystem/search-files.d.ts +23 -0
  68. package/dist/tools/filesystem/search-files.js +128 -0
  69. package/dist/tools/filesystem/search-files.js.map +1 -0
  70. package/dist/tools/filesystem/write-file.d.ts +14 -0
  71. package/dist/tools/filesystem/write-file.js +68 -0
  72. package/dist/tools/filesystem/write-file.js.map +1 -0
  73. package/dist/tools/monitor-utils.d.ts +2 -0
  74. package/dist/tools/monitor-utils.js +11 -0
  75. package/dist/tools/monitor-utils.js.map +1 -0
  76. package/dist/tools/mouse-keyboard/index.d.ts +2 -0
  77. package/dist/tools/mouse-keyboard/index.js +70 -0
  78. package/dist/tools/mouse-keyboard/index.js.map +1 -0
  79. package/dist/tools/mouse-keyboard/mouse-keyboard.d.ts +130 -0
  80. package/dist/tools/mouse-keyboard/mouse-keyboard.js +249 -0
  81. package/dist/tools/mouse-keyboard/mouse-keyboard.js.map +1 -0
  82. package/dist/tools/screenshot/index.d.ts +2 -0
  83. package/dist/tools/screenshot/index.js +26 -0
  84. package/dist/tools/screenshot/index.js.map +1 -0
  85. package/dist/tools/screenshot/screenshot.d.ts +22 -0
  86. package/dist/tools/screenshot/screenshot.js +91 -0
  87. package/dist/tools/screenshot/screenshot.js.map +1 -0
  88. package/dist/tools/shell/build-shell-resource.d.ts +1 -0
  89. package/dist/tools/shell/build-shell-resource.js +70 -0
  90. package/dist/tools/shell/build-shell-resource.js.map +1 -0
  91. package/dist/tools/shell/index.d.ts +2 -0
  92. package/dist/tools/shell/index.js +11 -0
  93. package/dist/tools/shell/index.js.map +1 -0
  94. package/dist/tools/shell/shell-execute.d.ts +17 -0
  95. package/dist/tools/shell/shell-execute.js +88 -0
  96. package/dist/tools/shell/shell-execute.js.map +1 -0
  97. package/dist/tools/test-utils.d.ts +3 -0
  98. package/dist/tools/test-utils.js +16 -0
  99. package/dist/tools/test-utils.js.map +1 -0
  100. package/dist/tools/types.d.ts +43 -0
  101. package/dist/tools/types.js +3 -0
  102. package/dist/tools/types.js.map +1 -0
  103. package/dist/tools/utils.d.ts +3 -0
  104. package/dist/tools/utils.js +19 -0
  105. package/dist/tools/utils.js.map +1 -0
  106. package/package.json +55 -0
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runStartupConfigCli = runStartupConfigCli;
37
+ exports.resolveTemplateName = resolveTemplateName;
38
+ exports.applyTemplate = applyTemplate;
39
+ const prompts_1 = require("@inquirer/prompts");
40
+ const fs = __importStar(require("node:fs/promises"));
41
+ const nodePath = __importStar(require("node:path"));
42
+ const config_1 = require("./config");
43
+ const config_templates_1 = require("./config-templates");
44
+ const GROUP_LABELS = {
45
+ filesystemRead: 'Filesystem Read',
46
+ filesystemWrite: 'Filesystem Write',
47
+ shell: 'Shell Execution',
48
+ computer: 'Computer Control',
49
+ browser: 'Browser Automation',
50
+ };
51
+ function printPermissionsTable(permissions) {
52
+ console.log();
53
+ console.log(' Current permissions:');
54
+ for (const group of Object.keys(config_1.TOOL_GROUP_DEFINITIONS)) {
55
+ const label = GROUP_LABELS[group].padEnd(20);
56
+ const mode = permissions[group];
57
+ console.log(` ${label} ${mode}`);
58
+ }
59
+ console.log();
60
+ }
61
+ async function loadPersistedPermissions() {
62
+ try {
63
+ const raw = await fs.readFile((0, config_1.getSettingsFilePath)(), 'utf-8');
64
+ const parsed = JSON.parse(raw);
65
+ const perms = parsed.permissions;
66
+ if (typeof perms !== 'object' || perms === null)
67
+ return null;
68
+ if (Object.keys(perms).length === 0)
69
+ return null;
70
+ return perms;
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
76
+ async function saveStartupConfig(permissions, filesystemDir) {
77
+ const filePath = (0, config_1.getSettingsFilePath)();
78
+ let existing = { resourcePermissions: {} };
79
+ try {
80
+ const raw = await fs.readFile(filePath, 'utf-8');
81
+ existing = JSON.parse(raw);
82
+ }
83
+ catch {
84
+ }
85
+ await fs.mkdir(nodePath.dirname(filePath), { recursive: true });
86
+ await fs.writeFile(filePath, JSON.stringify({ ...existing, permissions, filesystemDir }, null, 2), 'utf-8');
87
+ }
88
+ async function selectTemplate() {
89
+ return await (0, prompts_1.select)({
90
+ message: 'No configuration found. Choose a starting template',
91
+ choices: config_templates_1.CONFIG_TEMPLATES.map((template) => ({
92
+ name: template.label,
93
+ description: template.description,
94
+ value: template,
95
+ })),
96
+ });
97
+ }
98
+ async function editPermissions(current) {
99
+ const result = { ...current };
100
+ console.log('Edit permissions');
101
+ for (const group of Object.keys(config_1.TOOL_GROUP_DEFINITIONS)) {
102
+ result[group] = await (0, prompts_1.select)({
103
+ message: ` ${GROUP_LABELS[group]}`,
104
+ default: result[group],
105
+ choices: config_1.PERMISSION_MODES.map((mode) => ({ name: mode, value: mode })),
106
+ });
107
+ }
108
+ return result;
109
+ }
110
+ async function promptFilesystemDir(currentDir) {
111
+ const rawDir = await (0, prompts_1.input)({
112
+ message: 'Filesystem root directory',
113
+ default: currentDir,
114
+ validate: async (dir) => {
115
+ const resolved = nodePath.resolve(dir);
116
+ try {
117
+ const stat = await fs.stat(resolved);
118
+ if (!stat.isDirectory()) {
119
+ return `'${resolved}' is not a directory.`;
120
+ }
121
+ return true;
122
+ }
123
+ catch {
124
+ return `Directory '${resolved}' does not exist.`;
125
+ }
126
+ },
127
+ });
128
+ return nodePath.resolve(rawDir);
129
+ }
130
+ function isAllDeny(permissions) {
131
+ return Object.keys(config_1.TOOL_GROUP_DEFINITIONS).every((g) => permissions[g] === 'deny');
132
+ }
133
+ async function runStartupConfigCli(config) {
134
+ const existing = await loadPersistedPermissions();
135
+ let permissions;
136
+ if (existing === null) {
137
+ const tpl = await selectTemplate();
138
+ permissions = { ...tpl.permissions, ...config.permissions };
139
+ if (tpl.name === 'custom') {
140
+ permissions = await editPermissions(permissions);
141
+ }
142
+ else {
143
+ printPermissionsTable(permissions);
144
+ if (!(await (0, prompts_1.confirm)({ message: 'Confirm?', default: true }))) {
145
+ permissions = await editPermissions(permissions);
146
+ }
147
+ }
148
+ }
149
+ else {
150
+ const merged = Object.fromEntries(Object.keys(config_1.TOOL_GROUP_DEFINITIONS).map((g) => [
151
+ g,
152
+ config.permissions[g] ?? existing[g] ?? config_1.TOOL_GROUP_DEFINITIONS[g].default,
153
+ ]));
154
+ printPermissionsTable(merged);
155
+ if (!(await (0, prompts_1.confirm)({ message: 'Confirm?', default: true }))) {
156
+ permissions = await editPermissions(merged);
157
+ }
158
+ else {
159
+ permissions = merged;
160
+ }
161
+ }
162
+ while (isAllDeny(permissions)) {
163
+ console.log('\n At least one capability must be Ask or Allow. Please edit the permissions.\n');
164
+ permissions = await editPermissions(permissions);
165
+ }
166
+ const filesystemActive = permissions.filesystemRead !== 'deny' || permissions.filesystemWrite !== 'deny';
167
+ const filesystemDir = filesystemActive
168
+ ? await promptFilesystemDir(config.filesystem.dir)
169
+ : config.filesystem.dir;
170
+ await saveStartupConfig(permissions, filesystemDir);
171
+ return { ...config, permissions, filesystem: { ...config.filesystem, dir: filesystemDir } };
172
+ }
173
+ function resolveTemplateName(raw) {
174
+ if (raw === 'yolo' || raw === 'custom' || raw === 'default')
175
+ return raw;
176
+ return 'default';
177
+ }
178
+ function applyTemplate(config, templateName) {
179
+ const tpl = (0, config_templates_1.getTemplate)(templateName);
180
+ return {
181
+ ...config,
182
+ permissions: { ...tpl.permissions, ...config.permissions },
183
+ };
184
+ }
185
+ //# sourceMappingURL=startup-config-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-config-cli.js","sourceRoot":"","sources":["../src/startup-config-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type LogLevel } from '../../logger';
2
+ import type { ToolDefinition, ToolModule } from '../types';
3
+ export interface BrowserModuleConfig {
4
+ defaultBrowser?: string;
5
+ logLevel?: LogLevel;
6
+ }
7
+ export declare class BrowserModule implements ToolModule {
8
+ private connection;
9
+ definitions: ToolDefinition[];
10
+ private constructor();
11
+ static create(config?: BrowserModuleConfig): Promise<BrowserModule | null>;
12
+ isSupported(): boolean;
13
+ shutdown(): Promise<void>;
14
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BrowserModule = void 0;
37
+ const logger_1 = require("../../logger");
38
+ function toBrowserConfig(config) {
39
+ const browserConfig = {};
40
+ if (config.defaultBrowser) {
41
+ browserConfig.defaultBrowser = config.defaultBrowser;
42
+ }
43
+ return browserConfig;
44
+ }
45
+ class BrowserModule {
46
+ constructor(definitions, connection) {
47
+ this.definitions = definitions;
48
+ this.connection = connection;
49
+ }
50
+ static async create(config = {}) {
51
+ try {
52
+ const { createBrowserTools, configureLogger } = await Promise.resolve().then(() => __importStar(require('@n8n/mcp-browser')));
53
+ if (config.logLevel) {
54
+ configureLogger({ level: config.logLevel });
55
+ }
56
+ const { tools, connection } = createBrowserTools(toBrowserConfig(config));
57
+ return new BrowserModule(tools, connection);
58
+ }
59
+ catch {
60
+ logger_1.logger.info('Browser module not supported', { reason: '@n8n/mcp-browser not available' });
61
+ return null;
62
+ }
63
+ }
64
+ isSupported() {
65
+ return true;
66
+ }
67
+ async shutdown() {
68
+ await this.connection.shutdown();
69
+ }
70
+ }
71
+ exports.BrowserModule = BrowserModule;
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/browser/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAqD;AAQrD,SAAS,eAAe,CAAC,MAA2B;IACnD,MAAM,aAAa,GAA2B,EAAE,CAAC;IACjD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,cAAiD,CAAC;IACzF,CAAC;IACD,OAAO,aAAa,CAAC;AACtB,CAAC;AAQD,MAAa,aAAa;IAKzB,YAAoB,WAA6B,EAAE,UAAyC;QAC3F,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAMD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAA8B,EAAE;QACnD,IAAI,CAAC;YACJ,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,GAAG,wDAAa,kBAAkB,GAAC,CAAC;YACjF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1E,OAAO,IAAI,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACR,eAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC;IACb,CAAC;IAGD,KAAK,CAAC,QAAQ;QACb,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;CACD;AApCD,sCAoCC"}
@@ -0,0 +1 @@
1
+ export declare const MAX_FILE_SIZE: number;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_FILE_SIZE = void 0;
4
+ exports.MAX_FILE_SIZE = 512 * 1024;
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/tools/filesystem/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const inputSchema: z.ZodObject<{
4
+ sourcePath: z.ZodString;
5
+ destinationPath: z.ZodString;
6
+ }, "strip", z.ZodTypeAny, {
7
+ sourcePath: string;
8
+ destinationPath: string;
9
+ }, {
10
+ sourcePath: string;
11
+ destinationPath: string;
12
+ }>;
13
+ export declare const copyFileTool: ToolDefinition<typeof inputSchema>;
14
+ export {};
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.copyFileTool = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const path = __importStar(require("node:path"));
39
+ const zod_1 = require("zod");
40
+ const utils_1 = require("../utils");
41
+ const fs_utils_1 = require("./fs-utils");
42
+ const inputSchema = zod_1.z.object({
43
+ sourcePath: zod_1.z.string().describe('Source file path relative to root'),
44
+ destinationPath: zod_1.z.string().describe('Destination file path relative to root'),
45
+ });
46
+ exports.copyFileTool = {
47
+ name: 'copy_file',
48
+ description: 'Copy a file to a new path. Overwrites the destination if it already exists. Parent directories at the destination are created automatically.',
49
+ inputSchema,
50
+ annotations: {},
51
+ async getAffectedResources({ sourcePath, destinationPath }, { dir }) {
52
+ return [
53
+ await (0, fs_utils_1.buildFilesystemResource)(dir, sourcePath, 'filesystemRead', `Copy source: ${sourcePath}`),
54
+ await (0, fs_utils_1.buildFilesystemResource)(dir, destinationPath, 'filesystemWrite', `Copy destination: ${destinationPath}`),
55
+ ];
56
+ },
57
+ async execute({ sourcePath, destinationPath }, { dir }) {
58
+ const resolvedSrc = await (0, fs_utils_1.resolveSafePath)(dir, sourcePath);
59
+ const resolvedDest = await (0, fs_utils_1.resolveSafePath)(dir, destinationPath);
60
+ await fs.mkdir(path.dirname(resolvedDest), { recursive: true });
61
+ await fs.copyFile(resolvedSrc, resolvedDest);
62
+ return (0, utils_1.formatCallToolResult)({ sourcePath, destinationPath });
63
+ },
64
+ };
65
+ //# sourceMappingURL=copy-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-file.js","sourceRoot":"","sources":["../../../src/tools/filesystem/copy-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuC;AACvC,gDAAkC;AAClC,6BAAwB;AAGxB,oCAAgD;AAChD,yCAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACpE,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC9E,CAAC,CAAC;AAEU,QAAA,YAAY,GAAuC;IAC/D,IAAI,EAAE,WAAW;IACjB,WAAW,EACV,8IAA8I;IAC/I,WAAW;IACX,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE;QAClE,OAAO;YACN,MAAM,IAAA,kCAAuB,EAC5B,GAAG,EACH,UAAU,EACV,gBAAgB,EAChB,gBAAgB,UAAU,EAAE,CAC5B;YACD,MAAM,IAAA,kCAAuB,EAC5B,GAAG,EACH,eAAe,EACf,iBAAiB,EACjB,qBAAqB,eAAe,EAAE,CACtC;SACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE;QACrD,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAEjE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE7C,OAAO,IAAA,4BAAoB,EAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9D,CAAC;CACD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const inputSchema: z.ZodObject<{
4
+ dirPath: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ dirPath: string;
7
+ }, {
8
+ dirPath: string;
9
+ }>;
10
+ export declare const createDirectoryTool: ToolDefinition<typeof inputSchema>;
11
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createDirectoryTool = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const zod_1 = require("zod");
39
+ const utils_1 = require("../utils");
40
+ const fs_utils_1 = require("./fs-utils");
41
+ const inputSchema = zod_1.z.object({
42
+ dirPath: zod_1.z.string().describe('Directory path relative to root'),
43
+ });
44
+ exports.createDirectoryTool = {
45
+ name: 'create_directory',
46
+ description: 'Create a new directory. Idempotent: does nothing if the directory already exists. Parent directories are created automatically.',
47
+ inputSchema,
48
+ annotations: {},
49
+ async getAffectedResources({ dirPath }, { dir }) {
50
+ return [
51
+ await (0, fs_utils_1.buildFilesystemResource)(dir, dirPath, 'filesystemWrite', `Create directory: ${dirPath}`),
52
+ ];
53
+ },
54
+ async execute({ dirPath }, { dir }) {
55
+ const resolvedPath = await (0, fs_utils_1.resolveSafePath)(dir, dirPath);
56
+ await fs.mkdir(resolvedPath, { recursive: true });
57
+ return (0, utils_1.formatCallToolResult)({ path: dirPath });
58
+ },
59
+ };
60
+ //# sourceMappingURL=create-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-directory.js","sourceRoot":"","sources":["../../../src/tools/filesystem/create-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuC;AACvC,6BAAwB;AAGxB,oCAAgD;AAChD,yCAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC/D,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAuC;IACtE,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACV,iIAAiI;IAClI,WAAW;IACX,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;QAC9C,OAAO;YACN,MAAM,IAAA,kCAAuB,EAC5B,GAAG,EACH,OAAO,EACP,iBAAiB,EACjB,qBAAqB,OAAO,EAAE,CAC9B;SACD,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;QACjC,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEzD,MAAM,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElD,OAAO,IAAA,4BAAoB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;CACD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const inputSchema: z.ZodObject<{
4
+ path: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ path: string;
7
+ }, {
8
+ path: string;
9
+ }>;
10
+ export declare const deleteTool: ToolDefinition<typeof inputSchema>;
11
+ export {};
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.deleteTool = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const zod_1 = require("zod");
39
+ const utils_1 = require("../utils");
40
+ const fs_utils_1 = require("./fs-utils");
41
+ const inputSchema = zod_1.z.object({
42
+ path: zod_1.z.string().describe('Path relative to root (file or directory)'),
43
+ });
44
+ exports.deleteTool = {
45
+ name: 'delete',
46
+ description: 'Delete a file or directory. Deleting a directory removes it and all of its contents recursively.',
47
+ inputSchema,
48
+ annotations: { destructiveHint: true },
49
+ async getAffectedResources({ path: relPath }, { dir }) {
50
+ return [await (0, fs_utils_1.buildFilesystemResource)(dir, relPath, 'filesystemWrite', `Delete: ${relPath}`)];
51
+ },
52
+ async execute({ path: relPath }, { dir }) {
53
+ const resolvedPath = await (0, fs_utils_1.resolveSafePath)(dir, relPath);
54
+ const stat = await fs.stat(resolvedPath);
55
+ if (stat.isDirectory()) {
56
+ await fs.rm(resolvedPath, { recursive: true, force: false });
57
+ }
58
+ else {
59
+ await fs.unlink(resolvedPath);
60
+ }
61
+ return (0, utils_1.formatCallToolResult)({ path: relPath });
62
+ },
63
+ };
64
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/tools/filesystem/delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuC;AACvC,6BAAwB;AAGxB,oCAAgD;AAChD,yCAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;CACtE,CAAC,CAAC;AAEU,QAAA,UAAU,GAAuC;IAC7D,IAAI,EAAE,QAAQ;IACd,WAAW,EACV,kGAAkG;IACnG,WAAW;IACX,WAAW,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;IACtC,KAAK,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;QACpD,OAAO,CAAC,MAAM,IAAA,kCAAuB,EAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEzD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAA,4BAAoB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;CACD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ import type { ToolDefinition } from '../types';
3
+ declare const inputSchema: z.ZodObject<{
4
+ filePath: z.ZodString;
5
+ oldString: z.ZodString;
6
+ newString: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ filePath: string;
9
+ oldString: string;
10
+ newString: string;
11
+ }, {
12
+ filePath: string;
13
+ oldString: string;
14
+ newString: string;
15
+ }>;
16
+ export declare const editFileTool: ToolDefinition<typeof inputSchema>;
17
+ export {};
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.editFileTool = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const zod_1 = require("zod");
39
+ const utils_1 = require("../utils");
40
+ const constants_1 = require("./constants");
41
+ const fs_utils_1 = require("./fs-utils");
42
+ const inputSchema = zod_1.z.object({
43
+ filePath: zod_1.z.string().describe('File path relative to root'),
44
+ oldString: zod_1.z.string().min(1).describe('Exact string to find and replace (first occurrence)'),
45
+ newString: zod_1.z.string().describe('Replacement string'),
46
+ });
47
+ exports.editFileTool = {
48
+ name: 'edit_file',
49
+ description: 'Apply a targeted search-and-replace to a file. Replaces the first occurrence of oldString with newString. Fails if oldString is not found.',
50
+ inputSchema,
51
+ annotations: {},
52
+ async getAffectedResources({ filePath }, { dir }) {
53
+ return [
54
+ await (0, fs_utils_1.buildFilesystemResource)(dir, filePath, 'filesystemWrite', `Edit file: ${filePath}`),
55
+ ];
56
+ },
57
+ async execute({ filePath, oldString, newString }, { dir }) {
58
+ const resolvedPath = await (0, fs_utils_1.resolveSafePath)(dir, filePath);
59
+ const stat = await fs.stat(resolvedPath);
60
+ if (stat.size > constants_1.MAX_FILE_SIZE) {
61
+ throw new Error(`File too large: ${stat.size} bytes (max ${constants_1.MAX_FILE_SIZE} bytes). Use write_file to replace the entire content.`);
62
+ }
63
+ const content = await fs.readFile(resolvedPath, 'utf-8');
64
+ if (!content.includes(oldString)) {
65
+ throw new Error(`oldString not found in file: ${filePath}`);
66
+ }
67
+ await fs.writeFile(resolvedPath, content.replace(oldString, newString), 'utf-8');
68
+ return (0, utils_1.formatCallToolResult)({ path: filePath });
69
+ },
70
+ };
71
+ //# sourceMappingURL=edit-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../../src/tools/filesystem/edit-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuC;AACvC,6BAAwB;AAGxB,oCAAgD;AAChD,2CAA4C;AAC5C,yCAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC5B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC3D,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IAC5F,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CACpD,CAAC,CAAC;AAEU,QAAA,YAAY,GAAuC;IAC/D,IAAI,EAAE,WAAW;IACjB,WAAW,EACV,4IAA4I;IAC7I,WAAW;IACX,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE;QAC/C,OAAO;YACN,MAAM,IAAA,kCAAuB,EAAC,GAAG,EAAE,QAAQ,EAAE,iBAAiB,EAAE,cAAc,QAAQ,EAAE,CAAC;SACzF,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE;QACxD,MAAM,YAAY,GAAG,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE1D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,IAAI,GAAG,yBAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACd,mBAAmB,IAAI,CAAC,IAAI,eAAe,yBAAa,wDAAwD,CAChH,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAEjF,OAAO,IAAA,4BAAoB,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;CACD,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { AffectedResource } from '../types';
2
+ export declare const EXCLUDED_DIRS: Set<string>;
3
+ export interface TreeEntry {
4
+ path: string;
5
+ type: 'file' | 'directory';
6
+ sizeBytes?: number;
7
+ }
8
+ export interface ScanResult {
9
+ rootPath: string;
10
+ tree: TreeEntry[];
11
+ truncated: boolean;
12
+ }
13
+ export declare function scanDirectory(dirPath: string, maxDepth?: number): Promise<ScanResult>;
14
+ export declare function resolveSafePath(basePath: string, relativePath: string): Promise<string>;
15
+ export declare function buildFilesystemResource(dir: string, inputPath: string, toolGroup: 'filesystemRead' | 'filesystemWrite', description: string): Promise<AffectedResource>;