wave-agent-sdk 0.0.7 → 0.0.10
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/dist/agent.d.ts +105 -24
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +438 -53
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/managers/aiManager.d.ts +18 -7
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +254 -142
- package/dist/managers/backgroundBashManager.d.ts.map +1 -1
- package/dist/managers/backgroundBashManager.js +11 -9
- package/dist/managers/hookManager.d.ts +6 -6
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +81 -39
- package/dist/managers/liveConfigManager.d.ts +95 -0
- package/dist/managers/liveConfigManager.d.ts.map +1 -0
- package/dist/managers/liveConfigManager.js +442 -0
- package/dist/managers/lspManager.d.ts +43 -0
- package/dist/managers/lspManager.d.ts.map +1 -0
- package/dist/managers/lspManager.js +326 -0
- package/dist/managers/messageManager.d.ts +41 -24
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +184 -73
- package/dist/managers/permissionManager.d.ts +66 -0
- package/dist/managers/permissionManager.d.ts.map +1 -0
- package/dist/managers/permissionManager.js +208 -0
- package/dist/managers/skillManager.d.ts +1 -0
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +2 -1
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +4 -2
- package/dist/managers/subagentManager.d.ts +42 -6
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +213 -62
- package/dist/managers/toolManager.d.ts +38 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +66 -2
- package/dist/services/aiService.d.ts +15 -5
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +446 -77
- package/dist/services/configurationService.d.ts +116 -0
- package/dist/services/configurationService.d.ts.map +1 -0
- package/dist/services/configurationService.js +585 -0
- package/dist/services/fileWatcher.d.ts +69 -0
- package/dist/services/fileWatcher.d.ts.map +1 -0
- package/dist/services/fileWatcher.js +212 -0
- package/dist/services/hook.d.ts +5 -40
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +47 -109
- package/dist/services/jsonlHandler.d.ts +71 -0
- package/dist/services/jsonlHandler.d.ts.map +1 -0
- package/dist/services/jsonlHandler.js +236 -0
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +33 -11
- package/dist/services/session.d.ts +116 -52
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +415 -143
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +77 -17
- package/dist/tools/deleteFileTool.d.ts.map +1 -1
- package/dist/tools/deleteFileTool.js +27 -1
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +33 -8
- package/dist/tools/lspTool.d.ts +6 -0
- package/dist/tools/lspTool.d.ts.map +1 -0
- package/dist/tools/lspTool.js +589 -0
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +30 -10
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +113 -3
- package/dist/tools/skillTool.js +2 -2
- package/dist/tools/todoWriteTool.d.ts.map +1 -1
- package/dist/tools/todoWriteTool.js +23 -0
- package/dist/tools/types.d.ts +11 -8
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +30 -15
- package/dist/types/commands.d.ts +4 -1
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/configuration.d.ts +69 -0
- package/dist/types/configuration.d.ts.map +1 -0
- package/dist/types/configuration.js +8 -0
- package/dist/types/core.d.ts +45 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/environment.d.ts +83 -0
- package/dist/types/environment.d.ts.map +1 -0
- package/dist/types/environment.js +21 -0
- package/dist/types/fileSearch.d.ts +5 -0
- package/dist/types/fileSearch.d.ts.map +1 -0
- package/dist/types/fileSearch.js +1 -0
- package/dist/types/hooks.d.ts +18 -3
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +8 -8
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -0
- package/dist/types/lsp.d.ts +90 -0
- package/dist/types/lsp.d.ts.map +1 -0
- package/dist/types/lsp.js +4 -0
- package/dist/types/messaging.d.ts +19 -12
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +35 -0
- package/dist/types/permissions.d.ts.map +1 -0
- package/dist/types/permissions.js +12 -0
- package/dist/types/session.d.ts +15 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +7 -0
- package/dist/types/skills.d.ts +1 -0
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/tools.d.ts +35 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +4 -0
- package/dist/utils/abortUtils.d.ts +34 -0
- package/dist/utils/abortUtils.d.ts.map +1 -0
- package/dist/utils/abortUtils.js +92 -0
- package/dist/utils/bashHistory.d.ts +4 -0
- package/dist/utils/bashHistory.d.ts.map +1 -1
- package/dist/utils/bashHistory.js +48 -30
- package/dist/utils/builtinSubagents.d.ts +7 -0
- package/dist/utils/builtinSubagents.d.ts.map +1 -0
- package/dist/utils/builtinSubagents.js +65 -0
- package/dist/utils/cacheControlUtils.d.ts +96 -0
- package/dist/utils/cacheControlUtils.d.ts.map +1 -0
- package/dist/utils/cacheControlUtils.js +324 -0
- package/dist/utils/commandPathResolver.d.ts +52 -0
- package/dist/utils/commandPathResolver.d.ts.map +1 -0
- package/dist/utils/commandPathResolver.js +145 -0
- package/dist/utils/configPaths.d.ts +85 -0
- package/dist/utils/configPaths.d.ts.map +1 -0
- package/dist/utils/configPaths.js +121 -0
- package/dist/utils/constants.d.ts +1 -13
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +2 -14
- package/dist/utils/convertMessagesForAPI.d.ts +2 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +39 -18
- package/dist/utils/customCommands.d.ts.map +1 -1
- package/dist/utils/customCommands.js +66 -21
- package/dist/utils/fileSearch.d.ts +14 -0
- package/dist/utils/fileSearch.d.ts.map +1 -0
- package/dist/utils/fileSearch.js +88 -0
- package/dist/utils/fileUtils.d.ts +27 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +145 -0
- package/dist/utils/globalLogger.d.ts +88 -0
- package/dist/utils/globalLogger.d.ts.map +1 -0
- package/dist/utils/globalLogger.js +120 -0
- package/dist/utils/largeOutputHandler.d.ts +15 -0
- package/dist/utils/largeOutputHandler.d.ts.map +1 -0
- package/dist/utils/largeOutputHandler.js +40 -0
- package/dist/utils/markdownParser.d.ts.map +1 -1
- package/dist/utils/markdownParser.js +1 -17
- package/dist/utils/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +25 -3
- package/dist/utils/messageOperations.d.ts +20 -18
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +30 -38
- package/dist/utils/pathEncoder.d.ts +108 -0
- package/dist/utils/pathEncoder.d.ts.map +1 -0
- package/dist/utils/pathEncoder.js +279 -0
- package/dist/utils/subagentParser.d.ts +2 -2
- package/dist/utils/subagentParser.d.ts.map +1 -1
- package/dist/utils/subagentParser.js +12 -8
- package/dist/utils/tokenCalculation.d.ts +26 -0
- package/dist/utils/tokenCalculation.d.ts.map +1 -0
- package/dist/utils/tokenCalculation.js +36 -0
- package/dist/utils/tokenEstimator.d.ts +39 -0
- package/dist/utils/tokenEstimator.d.ts.map +1 -0
- package/dist/utils/tokenEstimator.js +55 -0
- package/package.json +6 -6
- package/src/agent.ts +586 -78
- package/src/index.ts +4 -0
- package/src/managers/aiManager.ts +341 -192
- package/src/managers/backgroundBashManager.ts +11 -9
- package/src/managers/hookManager.ts +102 -54
- package/src/managers/liveConfigManager.ts +634 -0
- package/src/managers/lspManager.ts +434 -0
- package/src/managers/messageManager.ts +258 -121
- package/src/managers/permissionManager.ts +276 -0
- package/src/managers/skillManager.ts +3 -1
- package/src/managers/slashCommandManager.ts +5 -3
- package/src/managers/subagentManager.ts +295 -76
- package/src/managers/toolManager.ts +95 -3
- package/src/services/aiService.ts +656 -84
- package/src/services/configurationService.ts +762 -0
- package/src/services/fileWatcher.ts +300 -0
- package/src/services/hook.ts +54 -144
- package/src/services/jsonlHandler.ts +303 -0
- package/src/services/memory.ts +34 -11
- package/src/services/session.ts +522 -173
- package/src/tools/bashTool.ts +94 -20
- package/src/tools/deleteFileTool.ts +38 -1
- package/src/tools/editTool.ts +44 -9
- package/src/tools/lspTool.ts +760 -0
- package/src/tools/multiEditTool.ts +41 -11
- package/src/tools/readTool.ts +127 -3
- package/src/tools/skillTool.ts +2 -2
- package/src/tools/todoWriteTool.ts +33 -1
- package/src/tools/types.ts +15 -9
- package/src/tools/writeTool.ts +43 -16
- package/src/types/commands.ts +6 -1
- package/src/types/config.ts +5 -0
- package/src/types/configuration.ts +73 -0
- package/src/types/core.ts +55 -0
- package/src/types/environment.ts +104 -0
- package/src/types/fileSearch.ts +4 -0
- package/src/types/hooks.ts +32 -16
- package/src/types/index.ts +7 -0
- package/src/types/lsp.ts +96 -0
- package/src/types/messaging.ts +21 -14
- package/src/types/permissions.ts +48 -0
- package/src/types/session.ts +20 -0
- package/src/types/skills.ts +1 -0
- package/src/types/tools.ts +38 -0
- package/src/utils/abortUtils.ts +118 -0
- package/src/utils/bashHistory.ts +55 -31
- package/src/utils/builtinSubagents.ts +71 -0
- package/src/utils/cacheControlUtils.ts +475 -0
- package/src/utils/commandPathResolver.ts +189 -0
- package/src/utils/configPaths.ts +163 -0
- package/src/utils/constants.ts +2 -17
- package/src/utils/convertMessagesForAPI.ts +44 -18
- package/src/utils/customCommands.ts +90 -22
- package/src/utils/fileSearch.ts +107 -0
- package/src/utils/fileUtils.ts +160 -0
- package/src/utils/globalLogger.ts +128 -0
- package/src/utils/largeOutputHandler.ts +55 -0
- package/src/utils/markdownParser.ts +1 -19
- package/src/utils/mcpUtils.ts +34 -3
- package/src/utils/messageOperations.ts +47 -53
- package/src/utils/pathEncoder.ts +394 -0
- package/src/utils/subagentParser.ts +13 -9
- package/src/utils/tokenCalculation.ts +43 -0
- package/src/utils/tokenEstimator.ts +68 -0
- package/dist/utils/configResolver.d.ts +0 -38
- package/dist/utils/configResolver.d.ts.map +0 -1
- package/dist/utils/configResolver.js +0 -106
- package/src/utils/configResolver.ts +0 -142
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bashTool.d.ts","sourceRoot":"","sources":["../../src/tools/bashTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAEtE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UA6RtB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UA6F5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,UA8E1B,CAAC"}
|
package/dist/tools/bashTool.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { spawn } from "child_process";
|
|
2
|
+
import { logger } from "../utils/globalLogger.js";
|
|
3
|
+
import { stripAnsiColors } from "../utils/stringUtils.js";
|
|
4
|
+
import { handleLargeOutput } from "../utils/largeOutputHandler.js";
|
|
2
5
|
/**
|
|
3
6
|
* Bash command execution tool - supports both foreground and background execution
|
|
4
7
|
*/
|
|
@@ -36,6 +39,7 @@ export const bashTool = {
|
|
|
36
39
|
execute: async (args, context) => {
|
|
37
40
|
const command = args.command;
|
|
38
41
|
const runInBackground = args.run_in_background;
|
|
42
|
+
const description = args.description;
|
|
39
43
|
// Set default timeout: 60s for foreground, no timeout for background
|
|
40
44
|
const timeout = args.timeout ??
|
|
41
45
|
(runInBackground ? undefined : 60000);
|
|
@@ -55,6 +59,36 @@ export const bashTool = {
|
|
|
55
59
|
error: "Timeout must be a number between 0 and 600000 milliseconds",
|
|
56
60
|
};
|
|
57
61
|
}
|
|
62
|
+
// Permission check after validation but before real operation
|
|
63
|
+
if (context.permissionManager &&
|
|
64
|
+
context.permissionMode &&
|
|
65
|
+
context.permissionMode !== "bypassPermissions") {
|
|
66
|
+
if (context.permissionManager.isRestrictedTool("Bash")) {
|
|
67
|
+
try {
|
|
68
|
+
const permissionContext = context.permissionManager.createContext("Bash", context.permissionMode, context.canUseToolCallback, {
|
|
69
|
+
command,
|
|
70
|
+
description,
|
|
71
|
+
run_in_background: runInBackground,
|
|
72
|
+
timeout,
|
|
73
|
+
});
|
|
74
|
+
const permissionResult = await context.permissionManager.checkPermission(permissionContext);
|
|
75
|
+
if (permissionResult.behavior === "deny") {
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
content: "",
|
|
79
|
+
error: `Bash operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
content: "",
|
|
87
|
+
error: "Permission check failed",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
58
92
|
if (runInBackground) {
|
|
59
93
|
// Background execution
|
|
60
94
|
const backgroundBashManager = context?.backgroundBashManager;
|
|
@@ -112,8 +146,8 @@ export const bashTool = {
|
|
|
112
146
|
try {
|
|
113
147
|
process.kill(-child.pid, "SIGKILL");
|
|
114
148
|
}
|
|
115
|
-
catch {
|
|
116
|
-
|
|
149
|
+
catch (killError) {
|
|
150
|
+
logger.error("Failed to force kill process:", killError);
|
|
117
151
|
}
|
|
118
152
|
}
|
|
119
153
|
}, 1000);
|
|
@@ -128,8 +162,8 @@ export const bashTool = {
|
|
|
128
162
|
}
|
|
129
163
|
}, 1000);
|
|
130
164
|
}
|
|
131
|
-
catch {
|
|
132
|
-
|
|
165
|
+
catch (directKillError) {
|
|
166
|
+
logger.error("Failed to kill child process:", directKillError);
|
|
133
167
|
}
|
|
134
168
|
}
|
|
135
169
|
}
|
|
@@ -146,16 +180,19 @@ export const bashTool = {
|
|
|
146
180
|
handleAbort();
|
|
147
181
|
return;
|
|
148
182
|
}
|
|
149
|
-
|
|
183
|
+
// Use { once: true } to prevent listener accumulation on signal reuse
|
|
184
|
+
context.abortSignal.addEventListener("abort", () => handleAbort(), {
|
|
185
|
+
once: true,
|
|
186
|
+
});
|
|
150
187
|
}
|
|
151
188
|
child.stdout?.on("data", (data) => {
|
|
152
189
|
if (!isAborted) {
|
|
153
|
-
outputBuffer += data.toString();
|
|
190
|
+
outputBuffer += stripAnsiColors(data.toString());
|
|
154
191
|
}
|
|
155
192
|
});
|
|
156
193
|
child.stderr?.on("data", (data) => {
|
|
157
194
|
if (!isAborted) {
|
|
158
|
-
errorBuffer += data.toString();
|
|
195
|
+
errorBuffer += stripAnsiColors(data.toString());
|
|
159
196
|
}
|
|
160
197
|
});
|
|
161
198
|
child.on("exit", (code) => {
|
|
@@ -165,12 +202,28 @@ export const bashTool = {
|
|
|
165
202
|
}
|
|
166
203
|
const exitCode = code ?? 0;
|
|
167
204
|
const combinedOutput = outputBuffer + (errorBuffer ? "\n" + errorBuffer : "");
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
:
|
|
205
|
+
// Handle large output by writing to temp file if needed
|
|
206
|
+
const finalOutput = combinedOutput || `Command executed with exit code: ${exitCode}`;
|
|
207
|
+
handleLargeOutput(finalOutput)
|
|
208
|
+
.then(({ content, filePath }) => {
|
|
209
|
+
resolve({
|
|
210
|
+
success: exitCode === 0,
|
|
211
|
+
content,
|
|
212
|
+
filePath,
|
|
213
|
+
error: exitCode !== 0
|
|
214
|
+
? `Command failed with exit code: ${exitCode}`
|
|
215
|
+
: undefined,
|
|
216
|
+
});
|
|
217
|
+
})
|
|
218
|
+
.catch((error) => {
|
|
219
|
+
logger.warn(`Error handling large output: ${error}`);
|
|
220
|
+
resolve({
|
|
221
|
+
success: exitCode === 0,
|
|
222
|
+
content: finalOutput,
|
|
223
|
+
error: exitCode !== 0
|
|
224
|
+
? `Command failed with exit code: ${exitCode}`
|
|
225
|
+
: undefined,
|
|
226
|
+
});
|
|
174
227
|
});
|
|
175
228
|
}
|
|
176
229
|
});
|
|
@@ -189,9 +242,13 @@ export const bashTool = {
|
|
|
189
242
|
});
|
|
190
243
|
},
|
|
191
244
|
formatCompactParams: (params) => {
|
|
245
|
+
const description = params.description;
|
|
192
246
|
const command = params.command;
|
|
193
247
|
const runInBackground = params.run_in_background;
|
|
194
|
-
|
|
248
|
+
if (description) {
|
|
249
|
+
return description;
|
|
250
|
+
}
|
|
251
|
+
return `${command}${runInBackground ? " (background)" : ""}`;
|
|
195
252
|
},
|
|
196
253
|
};
|
|
197
254
|
/**
|
|
@@ -256,14 +313,17 @@ export const bashOutputTool = {
|
|
|
256
313
|
}
|
|
257
314
|
let content = "";
|
|
258
315
|
if (output.stdout) {
|
|
259
|
-
content += output.stdout;
|
|
316
|
+
content += stripAnsiColors(output.stdout);
|
|
260
317
|
}
|
|
261
318
|
if (output.stderr) {
|
|
262
|
-
content += (content ? "\n" : "") + output.stderr;
|
|
319
|
+
content += (content ? "\n" : "") + stripAnsiColors(output.stderr);
|
|
263
320
|
}
|
|
321
|
+
const finalContent = content || "No output available";
|
|
322
|
+
const { content: processedContent, filePath } = await handleLargeOutput(finalContent);
|
|
264
323
|
return {
|
|
265
324
|
success: true,
|
|
266
|
-
content:
|
|
325
|
+
content: processedContent,
|
|
326
|
+
filePath,
|
|
267
327
|
shortResult: `${bashId}: ${output.status}${shell.exitCode !== undefined ? ` (${shell.exitCode})` : ""}`,
|
|
268
328
|
error: undefined,
|
|
269
329
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteFileTool.d.ts","sourceRoot":"","sources":["../../src/tools/deleteFileTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deleteFileTool.d.ts","sourceRoot":"","sources":["../../src/tools/deleteFileTool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAGtE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UA6G5B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { unlink } from "fs/promises";
|
|
2
|
+
import { logger } from "../utils/globalLogger.js";
|
|
2
3
|
import { resolvePath, getDisplayPath } from "../utils/path.js";
|
|
3
4
|
/**
|
|
4
5
|
* Delete file tool plugin
|
|
@@ -36,9 +37,34 @@ export const deleteFileTool = {
|
|
|
36
37
|
}
|
|
37
38
|
try {
|
|
38
39
|
const filePath = resolvePath(targetFile, context.workdir);
|
|
40
|
+
// Permission check after validation but before real operation
|
|
41
|
+
if (context.permissionManager &&
|
|
42
|
+
context.permissionMode &&
|
|
43
|
+
context.permissionMode !== "bypassPermissions") {
|
|
44
|
+
if (context.permissionManager.isRestrictedTool("Delete")) {
|
|
45
|
+
try {
|
|
46
|
+
const permissionContext = context.permissionManager.createContext("Delete", context.permissionMode, context.canUseToolCallback, { target_file: targetFile });
|
|
47
|
+
const permissionResult = await context.permissionManager.checkPermission(permissionContext);
|
|
48
|
+
if (permissionResult.behavior === "deny") {
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
content: "",
|
|
52
|
+
error: `Delete operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
content: "",
|
|
60
|
+
error: "Permission check failed",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
39
65
|
// Delete file
|
|
40
66
|
await unlink(filePath);
|
|
41
|
-
|
|
67
|
+
logger.debug(`Successfully deleted file: ${filePath}`);
|
|
42
68
|
return {
|
|
43
69
|
success: true,
|
|
44
70
|
content: `Successfully deleted file: ${targetFile}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editTool.d.ts","sourceRoot":"","sources":["../../src/tools/editTool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editTool.d.ts","sourceRoot":"","sources":["../../src/tools/editTool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AActE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UAwMtB,CAAC"}
|
package/dist/tools/editTool.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { logger } from "../utils/globalLogger.js";
|
|
2
3
|
import { resolvePath, getDisplayPath } from "../utils/path.js";
|
|
3
|
-
import { diffLines } from "diff";
|
|
4
4
|
/**
|
|
5
5
|
* Format compact parameter display
|
|
6
6
|
*/
|
|
@@ -122,6 +122,36 @@ export const editTool = {
|
|
|
122
122
|
newContent = originalContent.replace(oldString, newString);
|
|
123
123
|
replacementCount = 1;
|
|
124
124
|
}
|
|
125
|
+
// Permission check after validation but before real operation
|
|
126
|
+
if (context.permissionManager &&
|
|
127
|
+
context.permissionMode &&
|
|
128
|
+
context.permissionMode !== "bypassPermissions") {
|
|
129
|
+
if (context.permissionManager.isRestrictedTool("Edit")) {
|
|
130
|
+
try {
|
|
131
|
+
const permissionContext = context.permissionManager.createContext("Edit", context.permissionMode, context.canUseToolCallback, {
|
|
132
|
+
file_path: filePath,
|
|
133
|
+
old_string: oldString,
|
|
134
|
+
new_string: newString,
|
|
135
|
+
replace_all: replaceAll,
|
|
136
|
+
});
|
|
137
|
+
const permissionResult = await context.permissionManager.checkPermission(permissionContext);
|
|
138
|
+
if (permissionResult.behavior === "deny") {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
content: "",
|
|
142
|
+
error: `Edit operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
content: "",
|
|
150
|
+
error: "Permission check failed",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
125
155
|
// Write file
|
|
126
156
|
try {
|
|
127
157
|
await writeFile(resolvedPath, newContent, "utf-8");
|
|
@@ -133,25 +163,20 @@ export const editTool = {
|
|
|
133
163
|
error: `Failed to write file: ${writeError instanceof Error ? writeError.message : String(writeError)}`,
|
|
134
164
|
};
|
|
135
165
|
}
|
|
136
|
-
// Generate diff information
|
|
137
|
-
const diffResult = diffLines(originalContent, newContent);
|
|
138
166
|
const shortResult = replaceAll
|
|
139
167
|
? `Replaced ${replacementCount} instances`
|
|
140
168
|
: "Text replaced successfully";
|
|
141
|
-
|
|
169
|
+
logger.debug(`Edit tool: ${shortResult}`);
|
|
142
170
|
return {
|
|
143
171
|
success: true,
|
|
144
172
|
content: shortResult,
|
|
145
173
|
shortResult,
|
|
146
174
|
filePath: resolvedPath,
|
|
147
|
-
originalContent,
|
|
148
|
-
newContent,
|
|
149
|
-
diffResult,
|
|
150
175
|
};
|
|
151
176
|
}
|
|
152
177
|
catch (error) {
|
|
153
178
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
154
|
-
|
|
179
|
+
logger.error(`Edit tool error: ${errorMessage}`);
|
|
155
180
|
return {
|
|
156
181
|
success: false,
|
|
157
182
|
content: "",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lspTool.d.ts","sourceRoot":"","sources":["../../src/tools/lspTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AA8dtE;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,UAsRrB,CAAC"}
|