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.
Files changed (240) hide show
  1. package/dist/agent.d.ts +105 -24
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +438 -53
  4. package/dist/index.d.ts +4 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +4 -0
  7. package/dist/managers/aiManager.d.ts +18 -7
  8. package/dist/managers/aiManager.d.ts.map +1 -1
  9. package/dist/managers/aiManager.js +254 -142
  10. package/dist/managers/backgroundBashManager.d.ts.map +1 -1
  11. package/dist/managers/backgroundBashManager.js +11 -9
  12. package/dist/managers/hookManager.d.ts +6 -6
  13. package/dist/managers/hookManager.d.ts.map +1 -1
  14. package/dist/managers/hookManager.js +81 -39
  15. package/dist/managers/liveConfigManager.d.ts +95 -0
  16. package/dist/managers/liveConfigManager.d.ts.map +1 -0
  17. package/dist/managers/liveConfigManager.js +442 -0
  18. package/dist/managers/lspManager.d.ts +43 -0
  19. package/dist/managers/lspManager.d.ts.map +1 -0
  20. package/dist/managers/lspManager.js +326 -0
  21. package/dist/managers/messageManager.d.ts +41 -24
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +184 -73
  24. package/dist/managers/permissionManager.d.ts +66 -0
  25. package/dist/managers/permissionManager.d.ts.map +1 -0
  26. package/dist/managers/permissionManager.js +208 -0
  27. package/dist/managers/skillManager.d.ts +1 -0
  28. package/dist/managers/skillManager.d.ts.map +1 -1
  29. package/dist/managers/skillManager.js +2 -1
  30. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  31. package/dist/managers/slashCommandManager.js +4 -2
  32. package/dist/managers/subagentManager.d.ts +42 -6
  33. package/dist/managers/subagentManager.d.ts.map +1 -1
  34. package/dist/managers/subagentManager.js +213 -62
  35. package/dist/managers/toolManager.d.ts +38 -1
  36. package/dist/managers/toolManager.d.ts.map +1 -1
  37. package/dist/managers/toolManager.js +66 -2
  38. package/dist/services/aiService.d.ts +15 -5
  39. package/dist/services/aiService.d.ts.map +1 -1
  40. package/dist/services/aiService.js +446 -77
  41. package/dist/services/configurationService.d.ts +116 -0
  42. package/dist/services/configurationService.d.ts.map +1 -0
  43. package/dist/services/configurationService.js +585 -0
  44. package/dist/services/fileWatcher.d.ts +69 -0
  45. package/dist/services/fileWatcher.d.ts.map +1 -0
  46. package/dist/services/fileWatcher.js +212 -0
  47. package/dist/services/hook.d.ts +5 -40
  48. package/dist/services/hook.d.ts.map +1 -1
  49. package/dist/services/hook.js +47 -109
  50. package/dist/services/jsonlHandler.d.ts +71 -0
  51. package/dist/services/jsonlHandler.d.ts.map +1 -0
  52. package/dist/services/jsonlHandler.js +236 -0
  53. package/dist/services/memory.d.ts.map +1 -1
  54. package/dist/services/memory.js +33 -11
  55. package/dist/services/session.d.ts +116 -52
  56. package/dist/services/session.d.ts.map +1 -1
  57. package/dist/services/session.js +415 -143
  58. package/dist/tools/bashTool.d.ts.map +1 -1
  59. package/dist/tools/bashTool.js +77 -17
  60. package/dist/tools/deleteFileTool.d.ts.map +1 -1
  61. package/dist/tools/deleteFileTool.js +27 -1
  62. package/dist/tools/editTool.d.ts.map +1 -1
  63. package/dist/tools/editTool.js +33 -8
  64. package/dist/tools/lspTool.d.ts +6 -0
  65. package/dist/tools/lspTool.d.ts.map +1 -0
  66. package/dist/tools/lspTool.js +589 -0
  67. package/dist/tools/multiEditTool.d.ts.map +1 -1
  68. package/dist/tools/multiEditTool.js +30 -10
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +113 -3
  71. package/dist/tools/skillTool.js +2 -2
  72. package/dist/tools/todoWriteTool.d.ts.map +1 -1
  73. package/dist/tools/todoWriteTool.js +23 -0
  74. package/dist/tools/types.d.ts +11 -8
  75. package/dist/tools/types.d.ts.map +1 -1
  76. package/dist/tools/writeTool.d.ts.map +1 -1
  77. package/dist/tools/writeTool.js +30 -15
  78. package/dist/types/commands.d.ts +4 -1
  79. package/dist/types/commands.d.ts.map +1 -1
  80. package/dist/types/config.d.ts +4 -0
  81. package/dist/types/config.d.ts.map +1 -1
  82. package/dist/types/configuration.d.ts +69 -0
  83. package/dist/types/configuration.d.ts.map +1 -0
  84. package/dist/types/configuration.js +8 -0
  85. package/dist/types/core.d.ts +45 -0
  86. package/dist/types/core.d.ts.map +1 -1
  87. package/dist/types/environment.d.ts +83 -0
  88. package/dist/types/environment.d.ts.map +1 -0
  89. package/dist/types/environment.js +21 -0
  90. package/dist/types/fileSearch.d.ts +5 -0
  91. package/dist/types/fileSearch.d.ts.map +1 -0
  92. package/dist/types/fileSearch.js +1 -0
  93. package/dist/types/hooks.d.ts +18 -3
  94. package/dist/types/hooks.d.ts.map +1 -1
  95. package/dist/types/hooks.js +8 -8
  96. package/dist/types/index.d.ts +7 -0
  97. package/dist/types/index.d.ts.map +1 -1
  98. package/dist/types/index.js +7 -0
  99. package/dist/types/lsp.d.ts +90 -0
  100. package/dist/types/lsp.d.ts.map +1 -0
  101. package/dist/types/lsp.js +4 -0
  102. package/dist/types/messaging.d.ts +19 -12
  103. package/dist/types/messaging.d.ts.map +1 -1
  104. package/dist/types/permissions.d.ts +35 -0
  105. package/dist/types/permissions.d.ts.map +1 -0
  106. package/dist/types/permissions.js +12 -0
  107. package/dist/types/session.d.ts +15 -0
  108. package/dist/types/session.d.ts.map +1 -0
  109. package/dist/types/session.js +7 -0
  110. package/dist/types/skills.d.ts +1 -0
  111. package/dist/types/skills.d.ts.map +1 -1
  112. package/dist/types/tools.d.ts +35 -0
  113. package/dist/types/tools.d.ts.map +1 -0
  114. package/dist/types/tools.js +4 -0
  115. package/dist/utils/abortUtils.d.ts +34 -0
  116. package/dist/utils/abortUtils.d.ts.map +1 -0
  117. package/dist/utils/abortUtils.js +92 -0
  118. package/dist/utils/bashHistory.d.ts +4 -0
  119. package/dist/utils/bashHistory.d.ts.map +1 -1
  120. package/dist/utils/bashHistory.js +48 -30
  121. package/dist/utils/builtinSubagents.d.ts +7 -0
  122. package/dist/utils/builtinSubagents.d.ts.map +1 -0
  123. package/dist/utils/builtinSubagents.js +65 -0
  124. package/dist/utils/cacheControlUtils.d.ts +96 -0
  125. package/dist/utils/cacheControlUtils.d.ts.map +1 -0
  126. package/dist/utils/cacheControlUtils.js +324 -0
  127. package/dist/utils/commandPathResolver.d.ts +52 -0
  128. package/dist/utils/commandPathResolver.d.ts.map +1 -0
  129. package/dist/utils/commandPathResolver.js +145 -0
  130. package/dist/utils/configPaths.d.ts +85 -0
  131. package/dist/utils/configPaths.d.ts.map +1 -0
  132. package/dist/utils/configPaths.js +121 -0
  133. package/dist/utils/constants.d.ts +1 -13
  134. package/dist/utils/constants.d.ts.map +1 -1
  135. package/dist/utils/constants.js +2 -14
  136. package/dist/utils/convertMessagesForAPI.d.ts +2 -1
  137. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
  138. package/dist/utils/convertMessagesForAPI.js +39 -18
  139. package/dist/utils/customCommands.d.ts.map +1 -1
  140. package/dist/utils/customCommands.js +66 -21
  141. package/dist/utils/fileSearch.d.ts +14 -0
  142. package/dist/utils/fileSearch.d.ts.map +1 -0
  143. package/dist/utils/fileSearch.js +88 -0
  144. package/dist/utils/fileUtils.d.ts +27 -0
  145. package/dist/utils/fileUtils.d.ts.map +1 -0
  146. package/dist/utils/fileUtils.js +145 -0
  147. package/dist/utils/globalLogger.d.ts +88 -0
  148. package/dist/utils/globalLogger.d.ts.map +1 -0
  149. package/dist/utils/globalLogger.js +120 -0
  150. package/dist/utils/largeOutputHandler.d.ts +15 -0
  151. package/dist/utils/largeOutputHandler.d.ts.map +1 -0
  152. package/dist/utils/largeOutputHandler.js +40 -0
  153. package/dist/utils/markdownParser.d.ts.map +1 -1
  154. package/dist/utils/markdownParser.js +1 -17
  155. package/dist/utils/mcpUtils.d.ts.map +1 -1
  156. package/dist/utils/mcpUtils.js +25 -3
  157. package/dist/utils/messageOperations.d.ts +20 -18
  158. package/dist/utils/messageOperations.d.ts.map +1 -1
  159. package/dist/utils/messageOperations.js +30 -38
  160. package/dist/utils/pathEncoder.d.ts +108 -0
  161. package/dist/utils/pathEncoder.d.ts.map +1 -0
  162. package/dist/utils/pathEncoder.js +279 -0
  163. package/dist/utils/subagentParser.d.ts +2 -2
  164. package/dist/utils/subagentParser.d.ts.map +1 -1
  165. package/dist/utils/subagentParser.js +12 -8
  166. package/dist/utils/tokenCalculation.d.ts +26 -0
  167. package/dist/utils/tokenCalculation.d.ts.map +1 -0
  168. package/dist/utils/tokenCalculation.js +36 -0
  169. package/dist/utils/tokenEstimator.d.ts +39 -0
  170. package/dist/utils/tokenEstimator.d.ts.map +1 -0
  171. package/dist/utils/tokenEstimator.js +55 -0
  172. package/package.json +6 -6
  173. package/src/agent.ts +586 -78
  174. package/src/index.ts +4 -0
  175. package/src/managers/aiManager.ts +341 -192
  176. package/src/managers/backgroundBashManager.ts +11 -9
  177. package/src/managers/hookManager.ts +102 -54
  178. package/src/managers/liveConfigManager.ts +634 -0
  179. package/src/managers/lspManager.ts +434 -0
  180. package/src/managers/messageManager.ts +258 -121
  181. package/src/managers/permissionManager.ts +276 -0
  182. package/src/managers/skillManager.ts +3 -1
  183. package/src/managers/slashCommandManager.ts +5 -3
  184. package/src/managers/subagentManager.ts +295 -76
  185. package/src/managers/toolManager.ts +95 -3
  186. package/src/services/aiService.ts +656 -84
  187. package/src/services/configurationService.ts +762 -0
  188. package/src/services/fileWatcher.ts +300 -0
  189. package/src/services/hook.ts +54 -144
  190. package/src/services/jsonlHandler.ts +303 -0
  191. package/src/services/memory.ts +34 -11
  192. package/src/services/session.ts +522 -173
  193. package/src/tools/bashTool.ts +94 -20
  194. package/src/tools/deleteFileTool.ts +38 -1
  195. package/src/tools/editTool.ts +44 -9
  196. package/src/tools/lspTool.ts +760 -0
  197. package/src/tools/multiEditTool.ts +41 -11
  198. package/src/tools/readTool.ts +127 -3
  199. package/src/tools/skillTool.ts +2 -2
  200. package/src/tools/todoWriteTool.ts +33 -1
  201. package/src/tools/types.ts +15 -9
  202. package/src/tools/writeTool.ts +43 -16
  203. package/src/types/commands.ts +6 -1
  204. package/src/types/config.ts +5 -0
  205. package/src/types/configuration.ts +73 -0
  206. package/src/types/core.ts +55 -0
  207. package/src/types/environment.ts +104 -0
  208. package/src/types/fileSearch.ts +4 -0
  209. package/src/types/hooks.ts +32 -16
  210. package/src/types/index.ts +7 -0
  211. package/src/types/lsp.ts +96 -0
  212. package/src/types/messaging.ts +21 -14
  213. package/src/types/permissions.ts +48 -0
  214. package/src/types/session.ts +20 -0
  215. package/src/types/skills.ts +1 -0
  216. package/src/types/tools.ts +38 -0
  217. package/src/utils/abortUtils.ts +118 -0
  218. package/src/utils/bashHistory.ts +55 -31
  219. package/src/utils/builtinSubagents.ts +71 -0
  220. package/src/utils/cacheControlUtils.ts +475 -0
  221. package/src/utils/commandPathResolver.ts +189 -0
  222. package/src/utils/configPaths.ts +163 -0
  223. package/src/utils/constants.ts +2 -17
  224. package/src/utils/convertMessagesForAPI.ts +44 -18
  225. package/src/utils/customCommands.ts +90 -22
  226. package/src/utils/fileSearch.ts +107 -0
  227. package/src/utils/fileUtils.ts +160 -0
  228. package/src/utils/globalLogger.ts +128 -0
  229. package/src/utils/largeOutputHandler.ts +55 -0
  230. package/src/utils/markdownParser.ts +1 -19
  231. package/src/utils/mcpUtils.ts +34 -3
  232. package/src/utils/messageOperations.ts +47 -53
  233. package/src/utils/pathEncoder.ts +394 -0
  234. package/src/utils/subagentParser.ts +13 -9
  235. package/src/utils/tokenCalculation.ts +43 -0
  236. package/src/utils/tokenEstimator.ts +68 -0
  237. package/dist/utils/configResolver.d.ts +0 -38
  238. package/dist/utils/configResolver.d.ts.map +0 -1
  239. package/dist/utils/configResolver.js +0 -106
  240. package/src/utils/configResolver.ts +0 -142
@@ -1,4 +1,7 @@
1
1
  import { spawn, ChildProcess } 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
  import type { ToolPlugin, ToolResult, ToolContext } from "./types.js";
3
6
 
4
7
  /**
@@ -44,6 +47,7 @@ export const bashTool: ToolPlugin = {
44
47
  ): Promise<ToolResult> => {
45
48
  const command = args.command as string;
46
49
  const runInBackground = args.run_in_background as boolean | undefined;
50
+ const description = args.description as string | undefined;
47
51
  // Set default timeout: 60s for foreground, no timeout for background
48
52
  const timeout =
49
53
  (args.timeout as number | undefined) ??
@@ -69,6 +73,45 @@ export const bashTool: ToolPlugin = {
69
73
  };
70
74
  }
71
75
 
76
+ // Permission check after validation but before real operation
77
+ if (
78
+ context.permissionManager &&
79
+ context.permissionMode &&
80
+ context.permissionMode !== "bypassPermissions"
81
+ ) {
82
+ if (context.permissionManager.isRestrictedTool("Bash")) {
83
+ try {
84
+ const permissionContext = context.permissionManager.createContext(
85
+ "Bash",
86
+ context.permissionMode,
87
+ context.canUseToolCallback,
88
+ {
89
+ command,
90
+ description,
91
+ run_in_background: runInBackground,
92
+ timeout,
93
+ },
94
+ );
95
+ const permissionResult =
96
+ await context.permissionManager.checkPermission(permissionContext);
97
+
98
+ if (permissionResult.behavior === "deny") {
99
+ return {
100
+ success: false,
101
+ content: "",
102
+ error: `Bash operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
103
+ };
104
+ }
105
+ } catch {
106
+ return {
107
+ success: false,
108
+ content: "",
109
+ error: "Permission check failed",
110
+ };
111
+ }
112
+ }
113
+ }
114
+
72
115
  if (runInBackground) {
73
116
  // Background execution
74
117
  const backgroundBashManager = context?.backgroundBashManager;
@@ -133,8 +176,8 @@ export const bashTool: ToolPlugin = {
133
176
  if (child.pid && !child.killed) {
134
177
  try {
135
178
  process.kill(-child.pid, "SIGKILL");
136
- } catch {
137
- // logger.error("Failed to force kill process:", killError);
179
+ } catch (killError) {
180
+ logger.error("Failed to force kill process:", killError);
138
181
  }
139
182
  }
140
183
  }, 1000);
@@ -147,8 +190,8 @@ export const bashTool: ToolPlugin = {
147
190
  child.kill("SIGKILL");
148
191
  }
149
192
  }, 1000);
150
- } catch {
151
- // logger.error("Failed to kill child process:", directKillError);
193
+ } catch (directKillError) {
194
+ logger.error("Failed to kill child process:", directKillError);
152
195
  }
153
196
  }
154
197
  }
@@ -167,18 +210,21 @@ export const bashTool: ToolPlugin = {
167
210
  handleAbort();
168
211
  return;
169
212
  }
170
- context.abortSignal.addEventListener("abort", () => handleAbort());
213
+ // Use { once: true } to prevent listener accumulation on signal reuse
214
+ context.abortSignal.addEventListener("abort", () => handleAbort(), {
215
+ once: true,
216
+ });
171
217
  }
172
218
 
173
219
  child.stdout?.on("data", (data) => {
174
220
  if (!isAborted) {
175
- outputBuffer += data.toString();
221
+ outputBuffer += stripAnsiColors(data.toString());
176
222
  }
177
223
  });
178
224
 
179
225
  child.stderr?.on("data", (data) => {
180
226
  if (!isAborted) {
181
- errorBuffer += data.toString();
227
+ errorBuffer += stripAnsiColors(data.toString());
182
228
  }
183
229
  });
184
230
 
@@ -192,15 +238,32 @@ export const bashTool: ToolPlugin = {
192
238
  const combinedOutput =
193
239
  outputBuffer + (errorBuffer ? "\n" + errorBuffer : "");
194
240
 
195
- resolve({
196
- success: exitCode === 0,
197
- content:
198
- combinedOutput || `Command executed with exit code: ${exitCode}`,
199
- error:
200
- exitCode !== 0
201
- ? `Command failed with exit code: ${exitCode}`
202
- : undefined,
203
- });
241
+ // Handle large output by writing to temp file if needed
242
+ const finalOutput =
243
+ combinedOutput || `Command executed with exit code: ${exitCode}`;
244
+ handleLargeOutput(finalOutput)
245
+ .then(({ content, filePath }) => {
246
+ resolve({
247
+ success: exitCode === 0,
248
+ content,
249
+ filePath,
250
+ error:
251
+ exitCode !== 0
252
+ ? `Command failed with exit code: ${exitCode}`
253
+ : undefined,
254
+ });
255
+ })
256
+ .catch((error) => {
257
+ logger.warn(`Error handling large output: ${error}`);
258
+ resolve({
259
+ success: exitCode === 0,
260
+ content: finalOutput,
261
+ error:
262
+ exitCode !== 0
263
+ ? `Command failed with exit code: ${exitCode}`
264
+ : undefined,
265
+ });
266
+ });
204
267
  }
205
268
  });
206
269
 
@@ -219,9 +282,15 @@ export const bashTool: ToolPlugin = {
219
282
  });
220
283
  },
221
284
  formatCompactParams: (params: Record<string, unknown>) => {
285
+ const description = params.description as string;
222
286
  const command = params.command as string;
223
287
  const runInBackground = params.run_in_background as boolean;
224
- return `${command}${runInBackground ? " background" : ""}`;
288
+
289
+ if (description) {
290
+ return description;
291
+ }
292
+
293
+ return `${command}${runInBackground ? " (background)" : ""}`;
225
294
  },
226
295
  };
227
296
 
@@ -298,15 +367,20 @@ export const bashOutputTool: ToolPlugin = {
298
367
 
299
368
  let content = "";
300
369
  if (output.stdout) {
301
- content += output.stdout;
370
+ content += stripAnsiColors(output.stdout);
302
371
  }
303
372
  if (output.stderr) {
304
- content += (content ? "\n" : "") + output.stderr;
373
+ content += (content ? "\n" : "") + stripAnsiColors(output.stderr);
305
374
  }
306
375
 
376
+ const finalContent = content || "No output available";
377
+ const { content: processedContent, filePath } =
378
+ await handleLargeOutput(finalContent);
379
+
307
380
  return {
308
381
  success: true,
309
- content: content || "No output available",
382
+ content: processedContent,
383
+ filePath,
310
384
  shortResult: `${bashId}: ${output.status}${shell.exitCode !== undefined ? ` (${shell.exitCode})` : ""}`,
311
385
  error: undefined,
312
386
  };
@@ -1,4 +1,5 @@
1
1
  import { unlink } from "fs/promises";
2
+ import { logger } from "../utils/globalLogger.js";
2
3
  import type { ToolPlugin, ToolResult, ToolContext } from "./types.js";
3
4
  import { resolvePath, getDisplayPath } from "../utils/path.js";
4
5
 
@@ -45,10 +46,46 @@ export const deleteFileTool: ToolPlugin = {
45
46
  try {
46
47
  const filePath = resolvePath(targetFile, context.workdir);
47
48
 
49
+ // Permission check after validation but before real operation
50
+ if (
51
+ context.permissionManager &&
52
+ context.permissionMode &&
53
+ context.permissionMode !== "bypassPermissions"
54
+ ) {
55
+ if (context.permissionManager.isRestrictedTool("Delete")) {
56
+ try {
57
+ const permissionContext = context.permissionManager.createContext(
58
+ "Delete",
59
+ context.permissionMode,
60
+ context.canUseToolCallback,
61
+ { target_file: targetFile },
62
+ );
63
+ const permissionResult =
64
+ await context.permissionManager.checkPermission(
65
+ permissionContext,
66
+ );
67
+
68
+ if (permissionResult.behavior === "deny") {
69
+ return {
70
+ success: false,
71
+ content: "",
72
+ error: `Delete operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
73
+ };
74
+ }
75
+ } catch {
76
+ return {
77
+ success: false,
78
+ content: "",
79
+ error: "Permission check failed",
80
+ };
81
+ }
82
+ }
83
+ }
84
+
48
85
  // Delete file
49
86
  await unlink(filePath);
50
87
 
51
- // logger.debug(`Successfully deleted file: ${filePath}`);
88
+ logger.debug(`Successfully deleted file: ${filePath}`);
52
89
 
53
90
  return {
54
91
  success: true,
@@ -1,7 +1,7 @@
1
1
  import { readFile, writeFile } from "fs/promises";
2
+ import { logger } from "../utils/globalLogger.js";
2
3
  import type { ToolPlugin, ToolResult, ToolContext } from "./types.js";
3
4
  import { resolvePath, getDisplayPath } from "../utils/path.js";
4
- import { diffLines } from "diff";
5
5
 
6
6
  /**
7
7
  * Format compact parameter display
@@ -142,6 +142,47 @@ export const editTool: ToolPlugin = {
142
142
  replacementCount = 1;
143
143
  }
144
144
 
145
+ // Permission check after validation but before real operation
146
+ if (
147
+ context.permissionManager &&
148
+ context.permissionMode &&
149
+ context.permissionMode !== "bypassPermissions"
150
+ ) {
151
+ if (context.permissionManager.isRestrictedTool("Edit")) {
152
+ try {
153
+ const permissionContext = context.permissionManager.createContext(
154
+ "Edit",
155
+ context.permissionMode,
156
+ context.canUseToolCallback,
157
+ {
158
+ file_path: filePath,
159
+ old_string: oldString,
160
+ new_string: newString,
161
+ replace_all: replaceAll,
162
+ },
163
+ );
164
+ const permissionResult =
165
+ await context.permissionManager.checkPermission(
166
+ permissionContext,
167
+ );
168
+
169
+ if (permissionResult.behavior === "deny") {
170
+ return {
171
+ success: false,
172
+ content: "",
173
+ error: `Edit operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
174
+ };
175
+ }
176
+ } catch {
177
+ return {
178
+ success: false,
179
+ content: "",
180
+ error: "Permission check failed",
181
+ };
182
+ }
183
+ }
184
+ }
185
+
145
186
  // Write file
146
187
  try {
147
188
  await writeFile(resolvedPath, newContent, "utf-8");
@@ -153,28 +194,22 @@ export const editTool: ToolPlugin = {
153
194
  };
154
195
  }
155
196
 
156
- // Generate diff information
157
- const diffResult = diffLines(originalContent, newContent);
158
-
159
197
  const shortResult = replaceAll
160
198
  ? `Replaced ${replacementCount} instances`
161
199
  : "Text replaced successfully";
162
200
 
163
- // logger.debug(`Edit tool: ${shortResult}`);
201
+ logger.debug(`Edit tool: ${shortResult}`);
164
202
 
165
203
  return {
166
204
  success: true,
167
205
  content: shortResult,
168
206
  shortResult,
169
207
  filePath: resolvedPath,
170
- originalContent,
171
- newContent,
172
- diffResult,
173
208
  };
174
209
  } catch (error) {
175
210
  const errorMessage =
176
211
  error instanceof Error ? error.message : String(error);
177
- // logger.error(`Edit tool error: ${errorMessage}`);
212
+ logger.error(`Edit tool error: ${errorMessage}`);
178
213
  return {
179
214
  success: false,
180
215
  content: "",