@cloudbase/agent-tools 0.0.2

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 (194) hide show
  1. package/CHANGELOG.md +416 -0
  2. package/dist/agent_tool.d.ts +7 -0
  3. package/dist/agent_tool.d.ts.map +1 -0
  4. package/dist/agent_tool.js +16 -0
  5. package/dist/agent_tool.js.map +1 -0
  6. package/dist/bash/bash-tool.d.ts +61 -0
  7. package/dist/bash/bash-tool.d.ts.map +1 -0
  8. package/dist/bash/bash-tool.js +191 -0
  9. package/dist/bash/bash-tool.js.map +1 -0
  10. package/dist/bash/index.d.ts +7 -0
  11. package/dist/bash/index.d.ts.map +1 -0
  12. package/dist/bash/index.js +17 -0
  13. package/dist/bash/index.js.map +1 -0
  14. package/dist/bash/operator/base-operator.d.ts +44 -0
  15. package/dist/bash/operator/base-operator.d.ts.map +1 -0
  16. package/dist/bash/operator/base-operator.js +14 -0
  17. package/dist/bash/operator/base-operator.js.map +1 -0
  18. package/dist/bash/operator/local-operator.d.ts +15 -0
  19. package/dist/bash/operator/local-operator.d.ts.map +1 -0
  20. package/dist/bash/operator/local-operator.js +145 -0
  21. package/dist/bash/operator/local-operator.js.map +1 -0
  22. package/dist/bash/operator/sandbox-operator.d.ts +22 -0
  23. package/dist/bash/operator/sandbox-operator.d.ts.map +1 -0
  24. package/dist/bash/operator/sandbox-operator.js +112 -0
  25. package/dist/bash/operator/sandbox-operator.js.map +1 -0
  26. package/dist/bash/utils.d.ts +106 -0
  27. package/dist/bash/utils.d.ts.map +1 -0
  28. package/dist/bash/utils.js +197 -0
  29. package/dist/bash/utils.js.map +1 -0
  30. package/dist/browser/browser-instance-manager.d.ts +79 -0
  31. package/dist/browser/browser-instance-manager.d.ts.map +1 -0
  32. package/dist/browser/browser-instance-manager.js +242 -0
  33. package/dist/browser/browser-instance-manager.js.map +1 -0
  34. package/dist/browser/browser-tool-executor.d.ts +57 -0
  35. package/dist/browser/browser-tool-executor.d.ts.map +1 -0
  36. package/dist/browser/browser-tool-executor.js +205 -0
  37. package/dist/browser/browser-tool-executor.js.map +1 -0
  38. package/dist/browser/browser_client_unified.d.ts +52 -0
  39. package/dist/browser/browser_client_unified.d.ts.map +1 -0
  40. package/dist/browser/browser_client_unified.js +381 -0
  41. package/dist/browser/browser_client_unified.js.map +1 -0
  42. package/dist/browser/browser_tool_unified.d.ts +93 -0
  43. package/dist/browser/browser_tool_unified.d.ts.map +1 -0
  44. package/dist/browser/browser_tool_unified.js +181 -0
  45. package/dist/browser/browser_tool_unified.js.map +1 -0
  46. package/dist/browser/index.d.ts +7 -0
  47. package/dist/browser/index.d.ts.map +1 -0
  48. package/dist/browser/index.js +19 -0
  49. package/dist/browser/index.js.map +1 -0
  50. package/dist/browser/sandbox-connector.d.ts +93 -0
  51. package/dist/browser/sandbox-connector.d.ts.map +1 -0
  52. package/dist/browser/sandbox-connector.js +272 -0
  53. package/dist/browser/sandbox-connector.js.map +1 -0
  54. package/dist/browser/types.d.ts +53 -0
  55. package/dist/browser/types.d.ts.map +1 -0
  56. package/dist/browser/types.js +3 -0
  57. package/dist/browser/types.js.map +1 -0
  58. package/dist/code_executers/base_code_executor.d.ts +17 -0
  59. package/dist/code_executers/base_code_executor.d.ts.map +1 -0
  60. package/dist/code_executers/base_code_executor.js +20 -0
  61. package/dist/code_executers/base_code_executor.js.map +1 -0
  62. package/dist/code_executers/built_in_code_executor.d.ts +25 -0
  63. package/dist/code_executers/built_in_code_executor.d.ts.map +1 -0
  64. package/dist/code_executers/built_in_code_executor.js +106 -0
  65. package/dist/code_executers/built_in_code_executor.js.map +1 -0
  66. package/dist/code_executers/unsafe_local_code_executor.d.ts +118 -0
  67. package/dist/code_executers/unsafe_local_code_executor.d.ts.map +1 -0
  68. package/dist/code_executers/unsafe_local_code_executor.js +605 -0
  69. package/dist/code_executers/unsafe_local_code_executor.js.map +1 -0
  70. package/dist/fs/edit-tool.d.ts +26 -0
  71. package/dist/fs/edit-tool.d.ts.map +1 -0
  72. package/dist/fs/edit-tool.js +202 -0
  73. package/dist/fs/edit-tool.js.map +1 -0
  74. package/dist/fs/glob-tool.d.ts +31 -0
  75. package/dist/fs/glob-tool.d.ts.map +1 -0
  76. package/dist/fs/glob-tool.js +287 -0
  77. package/dist/fs/glob-tool.js.map +1 -0
  78. package/dist/fs/grep-tool.d.ts +32 -0
  79. package/dist/fs/grep-tool.d.ts.map +1 -0
  80. package/dist/fs/grep-tool.js +353 -0
  81. package/dist/fs/grep-tool.js.map +1 -0
  82. package/dist/fs/index.d.ts +11 -0
  83. package/dist/fs/index.d.ts.map +1 -0
  84. package/dist/fs/index.js +38 -0
  85. package/dist/fs/index.js.map +1 -0
  86. package/dist/fs/ls-tool.d.ts +26 -0
  87. package/dist/fs/ls-tool.d.ts.map +1 -0
  88. package/dist/fs/ls-tool.js +235 -0
  89. package/dist/fs/ls-tool.js.map +1 -0
  90. package/dist/fs/multiedit-tool.d.ts +34 -0
  91. package/dist/fs/multiedit-tool.d.ts.map +1 -0
  92. package/dist/fs/multiedit-tool.js +158 -0
  93. package/dist/fs/multiedit-tool.js.map +1 -0
  94. package/dist/fs/operator/base-operator.d.ts +28 -0
  95. package/dist/fs/operator/base-operator.d.ts.map +1 -0
  96. package/dist/fs/operator/base-operator.js +21 -0
  97. package/dist/fs/operator/base-operator.js.map +1 -0
  98. package/dist/fs/operator/in-memory-operator.d.ts +39 -0
  99. package/dist/fs/operator/in-memory-operator.d.ts.map +1 -0
  100. package/dist/fs/operator/in-memory-operator.js +115 -0
  101. package/dist/fs/operator/in-memory-operator.js.map +1 -0
  102. package/dist/fs/operator/index.d.ts +6 -0
  103. package/dist/fs/operator/index.d.ts.map +1 -0
  104. package/dist/fs/operator/index.js +28 -0
  105. package/dist/fs/operator/index.js.map +1 -0
  106. package/dist/fs/operator/local-operator.d.ts +25 -0
  107. package/dist/fs/operator/local-operator.d.ts.map +1 -0
  108. package/dist/fs/operator/local-operator.js +62 -0
  109. package/dist/fs/operator/local-operator.js.map +1 -0
  110. package/dist/fs/operator/sanbox-operator.d.ts +31 -0
  111. package/dist/fs/operator/sanbox-operator.d.ts.map +1 -0
  112. package/dist/fs/operator/sanbox-operator.js +172 -0
  113. package/dist/fs/operator/sanbox-operator.js.map +1 -0
  114. package/dist/fs/operator/transaction/index.d.ts +6 -0
  115. package/dist/fs/operator/transaction/index.d.ts.map +1 -0
  116. package/dist/fs/operator/transaction/index.js +28 -0
  117. package/dist/fs/operator/transaction/index.js.map +1 -0
  118. package/dist/fs/operator/transaction/snapshot-strategies.d.ts +54 -0
  119. package/dist/fs/operator/transaction/snapshot-strategies.d.ts.map +1 -0
  120. package/dist/fs/operator/transaction/snapshot-strategies.js +278 -0
  121. package/dist/fs/operator/transaction/snapshot-strategies.js.map +1 -0
  122. package/dist/fs/operator/transaction/transaction-operator.d.ts +53 -0
  123. package/dist/fs/operator/transaction/transaction-operator.d.ts.map +1 -0
  124. package/dist/fs/operator/transaction/transaction-operator.js +195 -0
  125. package/dist/fs/operator/transaction/transaction-operator.js.map +1 -0
  126. package/dist/fs/operator/transaction/transaction-utils.d.ts +80 -0
  127. package/dist/fs/operator/transaction/transaction-utils.d.ts.map +1 -0
  128. package/dist/fs/operator/transaction/transaction-utils.js +156 -0
  129. package/dist/fs/operator/transaction/transaction-utils.js.map +1 -0
  130. package/dist/fs/read-tool.d.ts +32 -0
  131. package/dist/fs/read-tool.d.ts.map +1 -0
  132. package/dist/fs/read-tool.js +271 -0
  133. package/dist/fs/read-tool.js.map +1 -0
  134. package/dist/fs/str-replace-editor.d.ts +23 -0
  135. package/dist/fs/str-replace-editor.d.ts.map +1 -0
  136. package/dist/fs/str-replace-editor.js +74 -0
  137. package/dist/fs/str-replace-editor.js.map +1 -0
  138. package/dist/fs/toolkit.d.ts +61 -0
  139. package/dist/fs/toolkit.d.ts.map +1 -0
  140. package/dist/fs/toolkit.js +113 -0
  141. package/dist/fs/toolkit.js.map +1 -0
  142. package/dist/fs/utils.d.ts +32 -0
  143. package/dist/fs/utils.d.ts.map +1 -0
  144. package/dist/fs/utils.js +133 -0
  145. package/dist/fs/utils.js.map +1 -0
  146. package/dist/fs/write-tool.d.ts +26 -0
  147. package/dist/fs/write-tool.d.ts.map +1 -0
  148. package/dist/fs/write-tool.js +110 -0
  149. package/dist/fs/write-tool.js.map +1 -0
  150. package/dist/index.d.ts +10 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/mcp/agkit-mcp-server.d.ts +291 -0
  155. package/dist/mcp/agkit-mcp-server.d.ts.map +1 -0
  156. package/dist/mcp/agkit-mcp-server.js +821 -0
  157. package/dist/mcp/agkit-mcp-server.js.map +1 -0
  158. package/dist/mcp/client-tool.d.ts +65 -0
  159. package/dist/mcp/client-tool.d.ts.map +1 -0
  160. package/dist/mcp/client-tool.js +220 -0
  161. package/dist/mcp/client-tool.js.map +1 -0
  162. package/dist/mcp/index.d.ts +14 -0
  163. package/dist/mcp/index.d.ts.map +1 -0
  164. package/dist/mcp/index.js +26 -0
  165. package/dist/mcp/index.js.map +1 -0
  166. package/dist/mcp/mcp-client-manager.d.ts +153 -0
  167. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  168. package/dist/mcp/mcp-client-manager.js +606 -0
  169. package/dist/mcp/mcp-client-manager.js.map +1 -0
  170. package/dist/mcp/mcp-toolkit.d.ts +112 -0
  171. package/dist/mcp/mcp-toolkit.d.ts.map +1 -0
  172. package/dist/mcp/mcp-toolkit.js +188 -0
  173. package/dist/mcp/mcp-toolkit.js.map +1 -0
  174. package/dist/mcp/types.d.ts +157 -0
  175. package/dist/mcp/types.d.ts.map +1 -0
  176. package/dist/mcp/types.js +34 -0
  177. package/dist/mcp/types.js.map +1 -0
  178. package/dist/mcp/utils.d.ts +17 -0
  179. package/dist/mcp/utils.d.ts.map +1 -0
  180. package/dist/mcp/utils.js +48 -0
  181. package/dist/mcp/utils.js.map +1 -0
  182. package/dist/types/index.d.ts +31 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +3 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/zod.d.ts +18 -0
  187. package/dist/types/zod.d.ts.map +1 -0
  188. package/dist/types/zod.js +3 -0
  189. package/dist/types/zod.js.map +1 -0
  190. package/dist/utils.d.ts +141 -0
  191. package/dist/utils.d.ts.map +1 -0
  192. package/dist/utils.js +379 -0
  193. package/dist/utils.js.map +1 -0
  194. package/package.json +46 -0
@@ -0,0 +1,235 @@
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.createLsTool = createLsTool;
37
+ const v4_1 = require("zod/v4");
38
+ const path = __importStar(require("path"));
39
+ const utils_1 = require("./utils");
40
+ const utils_2 = require("../utils");
41
+ const lsParametersSchema = v4_1.z.object({
42
+ path: v4_1.z
43
+ .string()
44
+ .optional()
45
+ .describe("The absolute path to the directory to list (must be absolute, not relative)"),
46
+ ignore: v4_1.z
47
+ .array(v4_1.z.string())
48
+ .optional()
49
+ .describe('List of glob patterns to ignore (e.g., ["*.log", "temp*"])'),
50
+ // show_hidden: z
51
+ // .boolean()
52
+ // .optional()
53
+ // .describe('Whether to show hidden files and directories (starting with .)'),
54
+ // detailed: z
55
+ // .boolean()
56
+ // .optional()
57
+ // .describe('Whether to show detailed file information (size, modified time)'),
58
+ });
59
+ // Path validation is now handled by validateWorkspacePath in tool-utils
60
+ /**
61
+ * Check if a filename should be ignored based on patterns
62
+ */
63
+ function shouldIgnore(filename, patterns) {
64
+ if (!patterns || patterns.length === 0) {
65
+ return false;
66
+ }
67
+ for (const pattern of patterns) {
68
+ // Convert glob pattern to RegExp (simplified version)
69
+ const regexPattern = pattern
70
+ .replace(/[.+^${}()|[\]\\]/g, "\\$&") // Escape special regex chars
71
+ .replace(/\*/g, ".*") // * becomes .*
72
+ .replace(/\?/g, "."); // ? becomes .
73
+ const regex = new RegExp(`^${regexPattern}$`);
74
+ if (regex.test(filename)) {
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
80
+ /**
81
+ * Format file size in human-readable format
82
+ */
83
+ function formatFileSize(bytes) {
84
+ if (bytes === 0) {
85
+ return "0 B";
86
+ }
87
+ const units = ["B", "KB", "MB", "GB", "TB"];
88
+ const k = 1024;
89
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
90
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${units[i]}`;
91
+ }
92
+ /**
93
+ * Format modified time in relative format
94
+ */
95
+ function formatModifiedTime(date) {
96
+ const now = new Date();
97
+ const diffMs = now.getTime() - date.getTime();
98
+ const diffMinutes = Math.floor(diffMs / 60000);
99
+ const diffHours = Math.floor(diffMs / 3600000);
100
+ const diffDays = Math.floor(diffMs / 86400000);
101
+ if (diffMinutes < 1) {
102
+ return "just now";
103
+ }
104
+ if (diffMinutes < 60) {
105
+ return `${diffMinutes}m ago`;
106
+ }
107
+ if (diffHours < 24) {
108
+ return `${diffHours}h ago`;
109
+ }
110
+ if (diffDays < 7) {
111
+ return `${diffDays}d ago`;
112
+ }
113
+ return date.toLocaleDateString();
114
+ }
115
+ function createLsTool(context) {
116
+ return (0, utils_2.tool)(async (params) => {
117
+ try {
118
+ const { path: targetPath = ".", show_hidden = false, ignore, detailed = false, } = params;
119
+ // Validate workspace path (handles both absolute and relative paths)
120
+ const pathError = (0, utils_1.validateWorkspacePath)(targetPath, context);
121
+ if (pathError) {
122
+ return pathError;
123
+ }
124
+ // Resolve target directory
125
+ const absolutePath = (0, utils_1.resolveWorkspacePath)(targetPath, context);
126
+ // console.log(`Listing directory: ${targetPath}`);
127
+ // Check if path exists and is a directory
128
+ const dirError = await (0, utils_1.validateDirectoryExists)(context, absolutePath, targetPath);
129
+ if (dirError) {
130
+ return dirError;
131
+ }
132
+ // Read directory contents
133
+ const files = await context.fsOperator.readdir(absolutePath, {
134
+ withFileTypes: true,
135
+ });
136
+ if (files.length === 0) {
137
+ return (0, utils_1.createSuccessResponse)({
138
+ path: targetPath,
139
+ absolute_path: absolutePath,
140
+ entries: [],
141
+ total_count: 0,
142
+ });
143
+ }
144
+ const entries = [];
145
+ let hiddenCount = 0;
146
+ let ignoredCount = 0;
147
+ // Process each file/directory
148
+ for (const file of files) {
149
+ // Skip hidden files unless requested
150
+ if (!show_hidden && file.name.toString().startsWith(".")) {
151
+ hiddenCount++;
152
+ continue;
153
+ }
154
+ // Check ignore patterns
155
+ if (shouldIgnore(file.name.toString(), ignore)) {
156
+ ignoredCount++;
157
+ continue;
158
+ }
159
+ const fullPath = path.join(absolutePath, file.name.toString());
160
+ try {
161
+ const fileStats = await context.fsOperator.stat(fullPath);
162
+ const isDir = fileStats.isDirectory();
163
+ const entry = {
164
+ name: file.name.toString(),
165
+ isDirectory: isDir,
166
+ size: isDir ? 0 : fileStats.size,
167
+ modifiedTime: fileStats.mtime,
168
+ extension: isDir
169
+ ? undefined
170
+ : path.extname(file.name.toString()).slice(1),
171
+ };
172
+ entries.push(entry);
173
+ }
174
+ catch (error) {
175
+ // Log error but continue with other files
176
+ console.log(`Error accessing ${file}: ${error instanceof Error ? error.message : String(error)}`);
177
+ }
178
+ }
179
+ // Sort entries (directories first, then alphabetically)
180
+ entries.sort((a, b) => {
181
+ if (a.isDirectory && !b.isDirectory) {
182
+ return -1;
183
+ }
184
+ if (!a.isDirectory && b.isDirectory) {
185
+ return 1;
186
+ }
187
+ return a.name.localeCompare(b.name);
188
+ });
189
+ // Create formatted output
190
+ let summary = `Listed ${entries.length} item(s) in ${targetPath}`;
191
+ if (hiddenCount > 0) {
192
+ summary += ` (${hiddenCount} hidden)`;
193
+ }
194
+ if (ignoredCount > 0) {
195
+ summary += ` (${ignoredCount} ignored)`;
196
+ }
197
+ // Create detailed listing if requested
198
+ let detailedListing = "";
199
+ if (detailed && entries.length > 0) {
200
+ detailedListing = "\n\nDetailed listing:\n";
201
+ detailedListing += entries
202
+ .map((entry) => {
203
+ const type = entry.isDirectory ? "[DIR]" : "[FILE]";
204
+ const size = entry.isDirectory
205
+ ? ""
206
+ : ` ${formatFileSize(entry.size)}`;
207
+ const modified = ` ${formatModifiedTime(entry.modifiedTime)}`;
208
+ const ext = entry.extension ? ` .${entry.extension}` : "";
209
+ return `${type} ${entry.name}${size}${modified}${ext}`;
210
+ })
211
+ .join("\n");
212
+ }
213
+ return (0, utils_1.createSuccessResponse)({
214
+ path: targetPath,
215
+ absolute_path: absolutePath,
216
+ entries,
217
+ total_count: entries.length,
218
+ hidden_count: hiddenCount,
219
+ ignored_count: ignoredCount,
220
+ directories: entries.filter((e) => e.isDirectory).length,
221
+ files: entries.filter((e) => !e.isDirectory).length,
222
+ summary,
223
+ detailed_listing: detailed ? detailedListing : undefined,
224
+ });
225
+ }
226
+ catch (error) {
227
+ return (0, utils_2.handleToolError)(error, "Ls tool execution", "execution");
228
+ }
229
+ }, {
230
+ name: "LS",
231
+ description: "Lists files and directories in a given path. The path parameter must be an absolute path, not a relative path. You can optionally provide an array of glob patterns to ignore with the ignore parameter. You should generally prefer the Glob and Grep tools, if you know which directories to search.",
232
+ schema: lsParametersSchema,
233
+ });
234
+ }
235
+ //# sourceMappingURL=ls-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ls-tool.js","sourceRoot":"","sources":["../../src/fs/ls-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod/v4";
2
+ import { ExecutionContext } from "./utils";
3
+ export interface SingleEdit {
4
+ old_string: string;
5
+ new_string: string;
6
+ expected_replacements?: number;
7
+ }
8
+ export interface EditResult {
9
+ edit: SingleEdit;
10
+ success: boolean;
11
+ occurrences: number;
12
+ error?: string;
13
+ }
14
+ export interface MultiEditResult {
15
+ file_path: string;
16
+ absolute_path: string;
17
+ edits_total: number;
18
+ edits_successful: number;
19
+ edits_failed: number;
20
+ total_replacements: number;
21
+ lines_total: number;
22
+ bytes_total: number;
23
+ content_changed: boolean;
24
+ edit_results: EditResult[];
25
+ }
26
+ export declare function createMultieditTool(context: ExecutionContext): import("../utils").DynamicTool<z.ZodObject<{
27
+ file_path: z.ZodString;
28
+ edits: z.ZodArray<z.ZodObject<{
29
+ old_string: z.ZodString;
30
+ new_string: z.ZodString;
31
+ expected_replacements: z.ZodOptional<z.ZodNumber>;
32
+ }, z.core.$strip>>;
33
+ }, z.core.$strip>, Record<string, unknown>, any>;
34
+ //# sourceMappingURL=multiedit-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiedit-tool.d.ts","sourceRoot":"","sources":["../../src/fs/multiedit-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAKjB,MAAM,SAAS,CAAC;AAqCjB,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAkDD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB;;;;;;;iDAwH5D"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMultieditTool = createMultieditTool;
4
+ const v4_1 = require("zod/v4");
5
+ const utils_1 = require("./utils");
6
+ const utils_2 = require("../utils");
7
+ const singleEditSchema = v4_1.z.object({
8
+ old_string: v4_1.z
9
+ .string()
10
+ .describe("The exact text to find and replace. Must match exactly including whitespace, indentation, and context. For single replacements, include 2+ lines of context before and after the target text."),
11
+ new_string: v4_1.z
12
+ .string()
13
+ .describe("The text to replace it with (must be different from old_string)"),
14
+ expected_replacements: v4_1.z
15
+ .number()
16
+ .min(1)
17
+ .optional()
18
+ .describe("The expected number of replacements to perform. Defaults to 1 if not specified."),
19
+ });
20
+ const multieditParametersSchema = v4_1.z.object({
21
+ file_path: v4_1.z.string().describe("The absolute path to the file to modify"),
22
+ edits: v4_1.z
23
+ .array(singleEditSchema)
24
+ .min(1)
25
+ .describe("Array of edit operations to perform sequentially on the file"),
26
+ // fail_fast: z
27
+ // .boolean()
28
+ // .optional()
29
+ // .describe(
30
+ // 'Whether to stop on first error (true) or continue with remaining edits (false, default)'
31
+ // ),
32
+ });
33
+ // Path validation is now handled by validateWorkspacePath in tool-utils
34
+ /**
35
+ * Escape special regex characters
36
+ */
37
+ function escapeRegExp(string) {
38
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
39
+ }
40
+ /**
41
+ * Apply a single edit to content
42
+ */
43
+ function applySingleEdit(content, edit) {
44
+ const expectedReplacements = edit.expected_replacements ?? 1;
45
+ // Count occurrences
46
+ const regex = new RegExp(escapeRegExp(edit.old_string), "g");
47
+ const matches = content.match(regex) || [];
48
+ const occurrences = matches.length;
49
+ // Validate occurrence count
50
+ if (occurrences === 0) {
51
+ return {
52
+ edit,
53
+ success: false,
54
+ occurrences: 0,
55
+ error: `Text not found: "${edit.old_string.substring(0, 50)}${edit.old_string.length > 50 ? "..." : ""}"`,
56
+ };
57
+ }
58
+ if (occurrences !== expectedReplacements) {
59
+ return {
60
+ edit,
61
+ success: false,
62
+ occurrences,
63
+ error: `Expected ${expectedReplacements} replacement(s) but found ${occurrences} occurrence(s)`,
64
+ };
65
+ }
66
+ return {
67
+ edit,
68
+ success: true,
69
+ occurrences,
70
+ };
71
+ }
72
+ function createMultieditTool(context) {
73
+ return (0, utils_2.tool)(async (params) => {
74
+ try {
75
+ const { file_path, edits } = params;
76
+ const fail_fast = true;
77
+ // Validate workspace path (handles both absolute and relative paths)
78
+ const pathError = (0, utils_1.validateWorkspacePath)(file_path, context);
79
+ if (pathError) {
80
+ return pathError;
81
+ }
82
+ // Resolve path
83
+ const absolutePath = (0, utils_1.resolveWorkspacePath)(file_path, context);
84
+ // Check if file exists
85
+ const fileError = await (0, utils_1.validateFileExists)(context, absolutePath, file_path);
86
+ if (fileError) {
87
+ return fileError;
88
+ }
89
+ console.log(`Performing ${edits.length} edit(s) on: ${file_path}`);
90
+ // Read current content
91
+ let currentContent;
92
+ try {
93
+ currentContent = (await context.fsOperator.readFile(absolutePath, "utf8")).toString();
94
+ // Normalize line endings to LF
95
+ currentContent = currentContent.replace(/\r\n/g, "\n");
96
+ }
97
+ catch (error) {
98
+ return (0, utils_2.handleToolError)(error, "Failed to read file", "permission");
99
+ }
100
+ const originalContent = currentContent;
101
+ const editResults = [];
102
+ let successCount = 0;
103
+ let totalReplacements = 0;
104
+ // Apply edits sequentially
105
+ for (let i = 0; i < edits.length; i++) {
106
+ const edit = edits[i];
107
+ console.log(`Applying edit ${i + 1}/${edits.length}: "${edit.old_string.substring(0, 30)}..." => "${edit.new_string.substring(0, 30)}..."`);
108
+ const editResult = applySingleEdit(currentContent, edit);
109
+ editResults.push(editResult);
110
+ if (editResult.success) {
111
+ // Apply the edit
112
+ currentContent = currentContent
113
+ .split(edit.old_string)
114
+ .join(edit.new_string);
115
+ successCount++;
116
+ totalReplacements += editResult.occurrences;
117
+ console.log(`✓ Edit ${i + 1} successful: ${editResult.occurrences} replacement(s)`);
118
+ }
119
+ else {
120
+ console.log(`✗ Edit ${i + 1} failed: ${editResult.error}`);
121
+ if (fail_fast) {
122
+ return (0, utils_2.handleToolError)(`Edit operation failed at step ${i + 1}: ${editResult.error}`, "Edit sequence", "execution");
123
+ }
124
+ }
125
+ }
126
+ // Write the updated content if any edits were successful
127
+ if (successCount > 0) {
128
+ await context.fsOperator.writeFile(absolutePath, currentContent);
129
+ }
130
+ const newLines = currentContent.split("\n").length;
131
+ const newSize = Buffer.byteLength(currentContent, "utf8");
132
+ console.log(`Multi-edit completed: ${successCount}/${edits.length} edits successful, ${totalReplacements} total replacements`);
133
+ return (0, utils_1.createSuccessResponse)({
134
+ file_path,
135
+ absolute_path: absolutePath,
136
+ edits_total: edits.length,
137
+ edits_successful: successCount,
138
+ edits_failed: edits.length - successCount,
139
+ total_replacements: totalReplacements,
140
+ lines_total: newLines,
141
+ bytes_total: newSize,
142
+ content_changed: currentContent !== originalContent,
143
+ edit_results: editResults,
144
+ });
145
+ }
146
+ catch (error) {
147
+ return (0, utils_2.handleToolError)(error, "Multiedit tool execution", "execution");
148
+ }
149
+ }, {
150
+ name: "MultiEdit",
151
+ description: "Perform multiple find-and-replace operations on a single file in sequence. Each edit is applied to the result of the previous edit. Accepts both relative and absolute file paths within the workspace.",
152
+ schema: multieditParametersSchema,
153
+ getDisplay: ({ name, input }) => {
154
+ return `> Using ${name} for tool call: ${input.file_path || ""}`;
155
+ },
156
+ });
157
+ }
158
+ //# sourceMappingURL=multiedit-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiedit-tool.js","sourceRoot":"","sources":["../../src/fs/multiedit-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import fs from "fs";
2
+ import type { Stats as MemfsStats } from "memfs/lib/node/Stats";
3
+ import { IWriteFileOptions } from "memfs/lib/node/types/options";
4
+ export declare abstract class BaseFileOperator {
5
+ workspaceRoot: string;
6
+ constructor();
7
+ resolvePath(filePath: fs.PathLike): string;
8
+ abstract access(path: fs.PathLike): Promise<void>;
9
+ abstract readFile(path: fs.PathLike): Promise<Buffer>;
10
+ abstract readFile(path: fs.PathLike, encoding: BufferEncoding): Promise<string>;
11
+ abstract readFile(path: fs.PathLike, encoding?: BufferEncoding): Promise<string | Buffer>;
12
+ abstract mkdir(path: fs.PathLike, options?: fs.MakeDirectoryOptions): Promise<string | undefined>;
13
+ abstract writeFile(path: fs.PathLike, data: string | NodeJS.ArrayBufferView, options?: fs.WriteFileOptions | IWriteFileOptions): Promise<void>;
14
+ abstract readdir(path: fs.PathLike): Promise<string[]>;
15
+ abstract readdir(path: fs.PathLike, options: {
16
+ withFileTypes: true;
17
+ }): Promise<fs.Dirent[]>;
18
+ abstract readdir(path: fs.PathLike, options?: {
19
+ withFileTypes?: boolean;
20
+ }): Promise<string[] | fs.Dirent[]>;
21
+ abstract stat(path: fs.PathLike): Promise<fs.Stats | MemfsStats<number | bigint>>;
22
+ abstract exists(path: fs.PathLike): Promise<boolean>;
23
+ abstract unlink(path: fs.PathLike): Promise<void>;
24
+ abstract rmdir(path: fs.PathLike): Promise<void>;
25
+ abstract rename(oldPath: fs.PathLike, newPath: fs.PathLike): Promise<void>;
26
+ setWorkspaceRoot(workspaceRoot: string): void;
27
+ }
28
+ //# sourceMappingURL=base-operator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-operator.d.ts","sourceRoot":"","sources":["../../../src/fs/operator/base-operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,8BAAsB,gBAAgB;IAC7B,aAAa,EAAE,MAAM,CAAM;;IAI3B,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,MAAM;IAKjD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IACrD,QAAQ,CAAC,QAAQ,CACf,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC;IAClB,QAAQ,CAAC,QAAQ,CACf,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CACZ,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,OAAO,CAAC,EAAE,EAAE,CAAC,oBAAoB,GAChC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAChB,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EACrC,OAAO,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,GAChD,OAAO,CAAC,IAAI,CAAC;IAChB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IACtD,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,OAAO,EAAE;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,GAC/B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,EAAE,CAAC,QAAQ,EACjB,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACpC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAGlC,QAAQ,CAAC,IAAI,CACX,IAAI,EAAE,EAAE,CAAC,QAAQ,GAChB,OAAO,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAElD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpD,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjD,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhD,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1E,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CAG9C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseFileOperator = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ class BaseFileOperator {
9
+ constructor() {
10
+ this.workspaceRoot = "";
11
+ }
12
+ resolvePath(filePath) {
13
+ const pathStr = filePath.toString();
14
+ return pathStr;
15
+ }
16
+ setWorkspaceRoot(workspaceRoot) {
17
+ this.workspaceRoot = path_1.default.resolve(workspaceRoot);
18
+ }
19
+ }
20
+ exports.BaseFileOperator = BaseFileOperator;
21
+ //# sourceMappingURL=base-operator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-operator.js","sourceRoot":"","sources":["../../../src/fs/operator/base-operator.ts"],"names":[],"mappings":";;;;;;AAGA,gDAAwB;AAExB,MAAsB,gBAAgB;IAGpC;QAFO,kBAAa,GAAW,EAAE,CAAC;IAEnB,CAAC;IAET,WAAW,CAAC,QAAqB;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IA4CD,gBAAgB,CAAC,aAAqB;QACpC,IAAI,CAAC,aAAa,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,CAAC;CACF;AAvDD,4CAuDC"}
@@ -0,0 +1,39 @@
1
+ import { BaseFileOperator } from "./base-operator";
2
+ import type { IFs } from "memfs";
3
+ import type { MakeDirectoryOptions, Dirent } from "fs";
4
+ import { IWriteFileOptions } from "memfs/lib/node/types/options";
5
+ import { PathLike } from "memfs/lib/vendor/node/fs";
6
+ import Stats from "memfs/lib/node/Stats";
7
+ export declare class InMemoryFileOperator extends BaseFileOperator {
8
+ fileSystem: IFs;
9
+ workspaceRoot: string;
10
+ constructor(fs: IFs, workspaceRoot?: string);
11
+ /**
12
+ * Set workspace root for path resolution
13
+ */
14
+ setWorkspaceRoot(workspaceRoot: string): void;
15
+ /**
16
+ * Get current workspace root
17
+ */
18
+ getWorkspaceRoot(): string;
19
+ /**
20
+ * Resolve path relative to workspace root instead of process.cwd()
21
+ * For memory file system, we ensure all paths are absolute to avoid cwd issues
22
+ */
23
+ resolvePath(filePath: PathLike): string;
24
+ access(path: PathLike): Promise<void>;
25
+ readFile(path: PathLike): Promise<Buffer>;
26
+ readFile(path: PathLike, encoding: BufferEncoding): Promise<string>;
27
+ mkdir(path: PathLike, options?: MakeDirectoryOptions): Promise<string | undefined>;
28
+ writeFile(path: PathLike, data: string | NodeJS.ArrayBufferView, options?: IWriteFileOptions): Promise<void>;
29
+ readdir(path: PathLike): Promise<string[]>;
30
+ readdir(path: PathLike, options: {
31
+ withFileTypes: true;
32
+ }): Promise<Dirent[]>;
33
+ stat(path: PathLike): Promise<Stats>;
34
+ exists(path: PathLike): Promise<boolean>;
35
+ unlink(path: PathLike): Promise<void>;
36
+ rmdir(path: PathLike): Promise<void>;
37
+ rename(oldPath: PathLike, newPath: PathLike): Promise<void>;
38
+ }
39
+ //# sourceMappingURL=in-memory-operator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-operator.d.ts","sourceRoot":"","sources":["../../../src/fs/operator/in-memory-operator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,MAAM,sBAAsB,CAAC;AAGzC,qBAAa,oBAAqB,SAAQ,gBAAgB;IACjD,UAAU,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;gBAEjB,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE,MAAM;IAM3C;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;;OAGG;IACI,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IASxC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAYnE,KAAK,CACT,IAAI,EAAE,QAAQ,EACd,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKxB,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EACrC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC;IAMV,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1C,OAAO,CACX,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC;IASd,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAKpC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAKlE"}