@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.
- package/CHANGELOG.md +416 -0
- package/dist/agent_tool.d.ts +7 -0
- package/dist/agent_tool.d.ts.map +1 -0
- package/dist/agent_tool.js +16 -0
- package/dist/agent_tool.js.map +1 -0
- package/dist/bash/bash-tool.d.ts +61 -0
- package/dist/bash/bash-tool.d.ts.map +1 -0
- package/dist/bash/bash-tool.js +191 -0
- package/dist/bash/bash-tool.js.map +1 -0
- package/dist/bash/index.d.ts +7 -0
- package/dist/bash/index.d.ts.map +1 -0
- package/dist/bash/index.js +17 -0
- package/dist/bash/index.js.map +1 -0
- package/dist/bash/operator/base-operator.d.ts +44 -0
- package/dist/bash/operator/base-operator.d.ts.map +1 -0
- package/dist/bash/operator/base-operator.js +14 -0
- package/dist/bash/operator/base-operator.js.map +1 -0
- package/dist/bash/operator/local-operator.d.ts +15 -0
- package/dist/bash/operator/local-operator.d.ts.map +1 -0
- package/dist/bash/operator/local-operator.js +145 -0
- package/dist/bash/operator/local-operator.js.map +1 -0
- package/dist/bash/operator/sandbox-operator.d.ts +22 -0
- package/dist/bash/operator/sandbox-operator.d.ts.map +1 -0
- package/dist/bash/operator/sandbox-operator.js +112 -0
- package/dist/bash/operator/sandbox-operator.js.map +1 -0
- package/dist/bash/utils.d.ts +106 -0
- package/dist/bash/utils.d.ts.map +1 -0
- package/dist/bash/utils.js +197 -0
- package/dist/bash/utils.js.map +1 -0
- package/dist/browser/browser-instance-manager.d.ts +79 -0
- package/dist/browser/browser-instance-manager.d.ts.map +1 -0
- package/dist/browser/browser-instance-manager.js +242 -0
- package/dist/browser/browser-instance-manager.js.map +1 -0
- package/dist/browser/browser-tool-executor.d.ts +57 -0
- package/dist/browser/browser-tool-executor.d.ts.map +1 -0
- package/dist/browser/browser-tool-executor.js +205 -0
- package/dist/browser/browser-tool-executor.js.map +1 -0
- package/dist/browser/browser_client_unified.d.ts +52 -0
- package/dist/browser/browser_client_unified.d.ts.map +1 -0
- package/dist/browser/browser_client_unified.js +381 -0
- package/dist/browser/browser_client_unified.js.map +1 -0
- package/dist/browser/browser_tool_unified.d.ts +93 -0
- package/dist/browser/browser_tool_unified.d.ts.map +1 -0
- package/dist/browser/browser_tool_unified.js +181 -0
- package/dist/browser/browser_tool_unified.js.map +1 -0
- package/dist/browser/index.d.ts +7 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +19 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/sandbox-connector.d.ts +93 -0
- package/dist/browser/sandbox-connector.d.ts.map +1 -0
- package/dist/browser/sandbox-connector.js +272 -0
- package/dist/browser/sandbox-connector.js.map +1 -0
- package/dist/browser/types.d.ts +53 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +3 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/code_executers/base_code_executor.d.ts +17 -0
- package/dist/code_executers/base_code_executor.d.ts.map +1 -0
- package/dist/code_executers/base_code_executor.js +20 -0
- package/dist/code_executers/base_code_executor.js.map +1 -0
- package/dist/code_executers/built_in_code_executor.d.ts +25 -0
- package/dist/code_executers/built_in_code_executor.d.ts.map +1 -0
- package/dist/code_executers/built_in_code_executor.js +106 -0
- package/dist/code_executers/built_in_code_executor.js.map +1 -0
- package/dist/code_executers/unsafe_local_code_executor.d.ts +118 -0
- package/dist/code_executers/unsafe_local_code_executor.d.ts.map +1 -0
- package/dist/code_executers/unsafe_local_code_executor.js +605 -0
- package/dist/code_executers/unsafe_local_code_executor.js.map +1 -0
- package/dist/fs/edit-tool.d.ts +26 -0
- package/dist/fs/edit-tool.d.ts.map +1 -0
- package/dist/fs/edit-tool.js +202 -0
- package/dist/fs/edit-tool.js.map +1 -0
- package/dist/fs/glob-tool.d.ts +31 -0
- package/dist/fs/glob-tool.d.ts.map +1 -0
- package/dist/fs/glob-tool.js +287 -0
- package/dist/fs/glob-tool.js.map +1 -0
- package/dist/fs/grep-tool.d.ts +32 -0
- package/dist/fs/grep-tool.d.ts.map +1 -0
- package/dist/fs/grep-tool.js +353 -0
- package/dist/fs/grep-tool.js.map +1 -0
- package/dist/fs/index.d.ts +11 -0
- package/dist/fs/index.d.ts.map +1 -0
- package/dist/fs/index.js +38 -0
- package/dist/fs/index.js.map +1 -0
- package/dist/fs/ls-tool.d.ts +26 -0
- package/dist/fs/ls-tool.d.ts.map +1 -0
- package/dist/fs/ls-tool.js +235 -0
- package/dist/fs/ls-tool.js.map +1 -0
- package/dist/fs/multiedit-tool.d.ts +34 -0
- package/dist/fs/multiedit-tool.d.ts.map +1 -0
- package/dist/fs/multiedit-tool.js +158 -0
- package/dist/fs/multiedit-tool.js.map +1 -0
- package/dist/fs/operator/base-operator.d.ts +28 -0
- package/dist/fs/operator/base-operator.d.ts.map +1 -0
- package/dist/fs/operator/base-operator.js +21 -0
- package/dist/fs/operator/base-operator.js.map +1 -0
- package/dist/fs/operator/in-memory-operator.d.ts +39 -0
- package/dist/fs/operator/in-memory-operator.d.ts.map +1 -0
- package/dist/fs/operator/in-memory-operator.js +115 -0
- package/dist/fs/operator/in-memory-operator.js.map +1 -0
- package/dist/fs/operator/index.d.ts +6 -0
- package/dist/fs/operator/index.d.ts.map +1 -0
- package/dist/fs/operator/index.js +28 -0
- package/dist/fs/operator/index.js.map +1 -0
- package/dist/fs/operator/local-operator.d.ts +25 -0
- package/dist/fs/operator/local-operator.d.ts.map +1 -0
- package/dist/fs/operator/local-operator.js +62 -0
- package/dist/fs/operator/local-operator.js.map +1 -0
- package/dist/fs/operator/sanbox-operator.d.ts +31 -0
- package/dist/fs/operator/sanbox-operator.d.ts.map +1 -0
- package/dist/fs/operator/sanbox-operator.js +172 -0
- package/dist/fs/operator/sanbox-operator.js.map +1 -0
- package/dist/fs/operator/transaction/index.d.ts +6 -0
- package/dist/fs/operator/transaction/index.d.ts.map +1 -0
- package/dist/fs/operator/transaction/index.js +28 -0
- package/dist/fs/operator/transaction/index.js.map +1 -0
- package/dist/fs/operator/transaction/snapshot-strategies.d.ts +54 -0
- package/dist/fs/operator/transaction/snapshot-strategies.d.ts.map +1 -0
- package/dist/fs/operator/transaction/snapshot-strategies.js +278 -0
- package/dist/fs/operator/transaction/snapshot-strategies.js.map +1 -0
- package/dist/fs/operator/transaction/transaction-operator.d.ts +53 -0
- package/dist/fs/operator/transaction/transaction-operator.d.ts.map +1 -0
- package/dist/fs/operator/transaction/transaction-operator.js +195 -0
- package/dist/fs/operator/transaction/transaction-operator.js.map +1 -0
- package/dist/fs/operator/transaction/transaction-utils.d.ts +80 -0
- package/dist/fs/operator/transaction/transaction-utils.d.ts.map +1 -0
- package/dist/fs/operator/transaction/transaction-utils.js +156 -0
- package/dist/fs/operator/transaction/transaction-utils.js.map +1 -0
- package/dist/fs/read-tool.d.ts +32 -0
- package/dist/fs/read-tool.d.ts.map +1 -0
- package/dist/fs/read-tool.js +271 -0
- package/dist/fs/read-tool.js.map +1 -0
- package/dist/fs/str-replace-editor.d.ts +23 -0
- package/dist/fs/str-replace-editor.d.ts.map +1 -0
- package/dist/fs/str-replace-editor.js +74 -0
- package/dist/fs/str-replace-editor.js.map +1 -0
- package/dist/fs/toolkit.d.ts +61 -0
- package/dist/fs/toolkit.d.ts.map +1 -0
- package/dist/fs/toolkit.js +113 -0
- package/dist/fs/toolkit.js.map +1 -0
- package/dist/fs/utils.d.ts +32 -0
- package/dist/fs/utils.d.ts.map +1 -0
- package/dist/fs/utils.js +133 -0
- package/dist/fs/utils.js.map +1 -0
- package/dist/fs/write-tool.d.ts +26 -0
- package/dist/fs/write-tool.d.ts.map +1 -0
- package/dist/fs/write-tool.js +110 -0
- package/dist/fs/write-tool.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/agkit-mcp-server.d.ts +291 -0
- package/dist/mcp/agkit-mcp-server.d.ts.map +1 -0
- package/dist/mcp/agkit-mcp-server.js +821 -0
- package/dist/mcp/agkit-mcp-server.js.map +1 -0
- package/dist/mcp/client-tool.d.ts +65 -0
- package/dist/mcp/client-tool.d.ts.map +1 -0
- package/dist/mcp/client-tool.js +220 -0
- package/dist/mcp/client-tool.js.map +1 -0
- package/dist/mcp/index.d.ts +14 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +26 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp-client-manager.d.ts +153 -0
- package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
- package/dist/mcp/mcp-client-manager.js +606 -0
- package/dist/mcp/mcp-client-manager.js.map +1 -0
- package/dist/mcp/mcp-toolkit.d.ts +112 -0
- package/dist/mcp/mcp-toolkit.d.ts.map +1 -0
- package/dist/mcp/mcp-toolkit.js +188 -0
- package/dist/mcp/mcp-toolkit.js.map +1 -0
- package/dist/mcp/types.d.ts +157 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +34 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp/utils.d.ts +17 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +48 -0
- package/dist/mcp/utils.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/zod.d.ts +18 -0
- package/dist/types/zod.d.ts.map +1 -0
- package/dist/types/zod.js +3 -0
- package/dist/types/zod.js.map +1 -0
- package/dist/utils.d.ts +141 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +379 -0
- package/dist/utils.js.map +1 -0
- 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"}
|