wave-agent-sdk 0.0.8 → 0.0.11

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 (236) hide show
  1. package/dist/agent.d.ts +92 -23
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +351 -137
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +3 -0
  7. package/dist/managers/aiManager.d.ts +14 -36
  8. package/dist/managers/aiManager.d.ts.map +1 -1
  9. package/dist/managers/aiManager.js +74 -77
  10. package/dist/managers/backgroundBashManager.d.ts.map +1 -1
  11. package/dist/managers/backgroundBashManager.js +4 -3
  12. package/dist/managers/hookManager.d.ts +3 -8
  13. package/dist/managers/hookManager.d.ts.map +1 -1
  14. package/dist/managers/hookManager.js +39 -29
  15. package/dist/managers/liveConfigManager.d.ts +55 -18
  16. package/dist/managers/liveConfigManager.d.ts.map +1 -1
  17. package/dist/managers/liveConfigManager.js +372 -90
  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 +8 -16
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +52 -74
  24. package/dist/managers/permissionManager.d.ts +75 -0
  25. package/dist/managers/permissionManager.d.ts.map +1 -0
  26. package/dist/managers/permissionManager.js +368 -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 +0 -1
  32. package/dist/managers/subagentManager.d.ts +8 -23
  33. package/dist/managers/subagentManager.d.ts.map +1 -1
  34. package/dist/managers/subagentManager.js +97 -117
  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 +3 -1
  39. package/dist/services/aiService.d.ts.map +1 -1
  40. package/dist/services/aiService.js +123 -30
  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.map +1 -1
  45. package/dist/services/fileWatcher.js +5 -6
  46. package/dist/services/hook.d.ts +7 -124
  47. package/dist/services/hook.d.ts.map +1 -1
  48. package/dist/services/hook.js +46 -458
  49. package/dist/services/jsonlHandler.d.ts +24 -15
  50. package/dist/services/jsonlHandler.d.ts.map +1 -1
  51. package/dist/services/jsonlHandler.js +67 -88
  52. package/dist/services/memory.d.ts +0 -9
  53. package/dist/services/memory.d.ts.map +1 -1
  54. package/dist/services/memory.js +2 -49
  55. package/dist/services/session.d.ts +82 -33
  56. package/dist/services/session.d.ts.map +1 -1
  57. package/dist/services/session.js +275 -181
  58. package/dist/tools/bashTool.d.ts.map +1 -1
  59. package/dist/tools/bashTool.js +109 -11
  60. package/dist/tools/deleteFileTool.d.ts.map +1 -1
  61. package/dist/tools/deleteFileTool.js +25 -0
  62. package/dist/tools/editTool.d.ts.map +1 -1
  63. package/dist/tools/editTool.js +30 -6
  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 +26 -7
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +111 -2
  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 +25 -9
  78. package/dist/types/commands.d.ts +0 -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 +10 -0
  86. package/dist/types/core.d.ts.map +1 -1
  87. package/dist/types/environment.d.ts +41 -0
  88. package/dist/types/environment.d.ts.map +1 -1
  89. package/dist/types/fileSearch.d.ts +5 -0
  90. package/dist/types/fileSearch.d.ts.map +1 -0
  91. package/dist/types/fileSearch.js +1 -0
  92. package/dist/types/hooks.d.ts +11 -2
  93. package/dist/types/hooks.d.ts.map +1 -1
  94. package/dist/types/hooks.js +1 -7
  95. package/dist/types/index.d.ts +5 -0
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/types/index.js +5 -0
  98. package/dist/types/lsp.d.ts +90 -0
  99. package/dist/types/lsp.d.ts.map +1 -0
  100. package/dist/types/lsp.js +4 -0
  101. package/dist/types/messaging.d.ts +6 -11
  102. package/dist/types/messaging.d.ts.map +1 -1
  103. package/dist/types/permissions.d.ts +39 -0
  104. package/dist/types/permissions.d.ts.map +1 -0
  105. package/dist/types/permissions.js +12 -0
  106. package/dist/types/session.d.ts +1 -6
  107. package/dist/types/session.d.ts.map +1 -1
  108. package/dist/types/skills.d.ts +1 -0
  109. package/dist/types/skills.d.ts.map +1 -1
  110. package/dist/types/tools.d.ts +35 -0
  111. package/dist/types/tools.d.ts.map +1 -0
  112. package/dist/types/tools.js +4 -0
  113. package/dist/utils/abortUtils.d.ts +34 -0
  114. package/dist/utils/abortUtils.d.ts.map +1 -0
  115. package/dist/utils/abortUtils.js +92 -0
  116. package/dist/utils/bashHistory.d.ts +4 -0
  117. package/dist/utils/bashHistory.d.ts.map +1 -1
  118. package/dist/utils/bashHistory.js +21 -4
  119. package/dist/utils/bashParser.d.ts +24 -0
  120. package/dist/utils/bashParser.d.ts.map +1 -0
  121. package/dist/utils/bashParser.js +413 -0
  122. package/dist/utils/builtinSubagents.d.ts +7 -0
  123. package/dist/utils/builtinSubagents.d.ts.map +1 -0
  124. package/dist/utils/builtinSubagents.js +65 -0
  125. package/dist/utils/cacheControlUtils.d.ts +8 -33
  126. package/dist/utils/cacheControlUtils.d.ts.map +1 -1
  127. package/dist/utils/cacheControlUtils.js +83 -126
  128. package/dist/utils/constants.d.ts +0 -12
  129. package/dist/utils/constants.d.ts.map +1 -1
  130. package/dist/utils/constants.js +1 -13
  131. package/dist/utils/convertMessagesForAPI.d.ts +2 -1
  132. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
  133. package/dist/utils/convertMessagesForAPI.js +33 -14
  134. package/dist/utils/fileSearch.d.ts +14 -0
  135. package/dist/utils/fileSearch.d.ts.map +1 -0
  136. package/dist/utils/fileSearch.js +88 -0
  137. package/dist/utils/fileUtils.d.ts +14 -2
  138. package/dist/utils/fileUtils.d.ts.map +1 -1
  139. package/dist/utils/fileUtils.js +101 -17
  140. package/dist/utils/globalLogger.d.ts +0 -14
  141. package/dist/utils/globalLogger.d.ts.map +1 -1
  142. package/dist/utils/globalLogger.js +0 -16
  143. package/dist/utils/markdownParser.d.ts.map +1 -1
  144. package/dist/utils/markdownParser.js +1 -17
  145. package/dist/utils/messageOperations.d.ts +1 -11
  146. package/dist/utils/messageOperations.d.ts.map +1 -1
  147. package/dist/utils/messageOperations.js +7 -24
  148. package/dist/utils/pathEncoder.d.ts +4 -0
  149. package/dist/utils/pathEncoder.d.ts.map +1 -1
  150. package/dist/utils/pathEncoder.js +16 -9
  151. package/dist/utils/pathSafety.d.ts +10 -0
  152. package/dist/utils/pathSafety.d.ts.map +1 -0
  153. package/dist/utils/pathSafety.js +23 -0
  154. package/dist/utils/subagentParser.d.ts +2 -2
  155. package/dist/utils/subagentParser.d.ts.map +1 -1
  156. package/dist/utils/subagentParser.js +10 -7
  157. package/package.json +9 -9
  158. package/src/agent.ts +475 -216
  159. package/src/index.ts +3 -0
  160. package/src/managers/aiManager.ts +107 -111
  161. package/src/managers/backgroundBashManager.ts +4 -3
  162. package/src/managers/hookManager.ts +44 -39
  163. package/src/managers/liveConfigManager.ts +524 -138
  164. package/src/managers/lspManager.ts +434 -0
  165. package/src/managers/messageManager.ts +73 -103
  166. package/src/managers/permissionManager.ts +480 -0
  167. package/src/managers/skillManager.ts +3 -1
  168. package/src/managers/slashCommandManager.ts +1 -2
  169. package/src/managers/subagentManager.ts +116 -159
  170. package/src/managers/toolManager.ts +95 -3
  171. package/src/services/aiService.ts +207 -26
  172. package/src/services/configurationService.ts +762 -0
  173. package/src/services/fileWatcher.ts +5 -6
  174. package/src/services/hook.ts +50 -631
  175. package/src/services/jsonlHandler.ts +84 -100
  176. package/src/services/memory.ts +2 -59
  177. package/src/services/session.ts +338 -213
  178. package/src/tools/bashTool.ts +126 -13
  179. package/src/tools/deleteFileTool.ts +36 -0
  180. package/src/tools/editTool.ts +41 -7
  181. package/src/tools/lspTool.ts +760 -0
  182. package/src/tools/multiEditTool.ts +37 -8
  183. package/src/tools/readTool.ts +125 -2
  184. package/src/tools/skillTool.ts +2 -2
  185. package/src/tools/todoWriteTool.ts +33 -1
  186. package/src/tools/types.ts +15 -9
  187. package/src/tools/writeTool.ts +36 -10
  188. package/src/types/commands.ts +0 -1
  189. package/src/types/config.ts +5 -0
  190. package/src/types/configuration.ts +73 -0
  191. package/src/types/core.ts +11 -0
  192. package/src/types/environment.ts +44 -0
  193. package/src/types/fileSearch.ts +4 -0
  194. package/src/types/hooks.ts +14 -11
  195. package/src/types/index.ts +5 -0
  196. package/src/types/lsp.ts +96 -0
  197. package/src/types/messaging.ts +8 -13
  198. package/src/types/permissions.ts +52 -0
  199. package/src/types/session.ts +3 -8
  200. package/src/types/skills.ts +1 -0
  201. package/src/types/tools.ts +38 -0
  202. package/src/utils/abortUtils.ts +118 -0
  203. package/src/utils/bashHistory.ts +28 -4
  204. package/src/utils/bashParser.ts +444 -0
  205. package/src/utils/builtinSubagents.ts +71 -0
  206. package/src/utils/cacheControlUtils.ts +106 -171
  207. package/src/utils/constants.ts +1 -16
  208. package/src/utils/convertMessagesForAPI.ts +38 -14
  209. package/src/utils/fileSearch.ts +107 -0
  210. package/src/utils/fileUtils.ts +114 -19
  211. package/src/utils/globalLogger.ts +0 -17
  212. package/src/utils/markdownParser.ts +1 -19
  213. package/src/utils/messageOperations.ts +7 -35
  214. package/src/utils/pathEncoder.ts +24 -9
  215. package/src/utils/pathSafety.ts +26 -0
  216. package/src/utils/subagentParser.ts +11 -8
  217. package/dist/constants/events.d.ts +0 -28
  218. package/dist/constants/events.d.ts.map +0 -1
  219. package/dist/constants/events.js +0 -27
  220. package/dist/services/configurationWatcher.d.ts +0 -120
  221. package/dist/services/configurationWatcher.d.ts.map +0 -1
  222. package/dist/services/configurationWatcher.js +0 -439
  223. package/dist/services/memoryStore.d.ts +0 -81
  224. package/dist/services/memoryStore.d.ts.map +0 -1
  225. package/dist/services/memoryStore.js +0 -200
  226. package/dist/types/memoryStore.d.ts +0 -82
  227. package/dist/types/memoryStore.d.ts.map +0 -1
  228. package/dist/types/memoryStore.js +0 -7
  229. package/dist/utils/configResolver.d.ts +0 -65
  230. package/dist/utils/configResolver.d.ts.map +0 -1
  231. package/dist/utils/configResolver.js +0 -210
  232. package/src/constants/events.ts +0 -38
  233. package/src/services/configurationWatcher.ts +0 -622
  234. package/src/services/memoryStore.ts +0 -279
  235. package/src/types/memoryStore.ts +0 -94
  236. package/src/utils/configResolver.ts +0 -302
@@ -1,5 +1,8 @@
1
1
  import { spawn } from "child_process";
2
2
  import { logger } from "../utils/globalLogger.js";
3
+ import { stripAnsiColors } from "../utils/stringUtils.js";
4
+ const MAX_OUTPUT_LENGTH = 30000;
5
+ const BASH_DEFAULT_TIMEOUT_MS = 120000;
3
6
  /**
4
7
  * Bash command execution tool - supports both foreground and background execution
5
8
  */
@@ -9,7 +12,52 @@ export const bashTool = {
9
12
  type: "function",
10
13
  function: {
11
14
  name: "Bash",
12
- description: "Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.",
15
+ description: `Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.
16
+
17
+ IMPORTANT: This tool is for terminal operations like git, npm, docker, etc. DO NOT use it for file operations (reading, writing, editing, searching, finding files) - use the specialized tools for this instead.
18
+
19
+ Before executing the command, please follow these steps:
20
+
21
+ 1. Directory Verification:
22
+ - If the command will create new directories or files, first use \`ls\` to verify the parent directory exists and is the correct location
23
+ - For example, before running "mkdir foo/bar", first use \`ls foo\` to check that "foo" exists and is the intended parent directory
24
+
25
+ 2. Command Execution:
26
+ - Always quote file paths that contain spaces with double quotes (e.g., cd "path with spaces/file.txt")
27
+ - Examples of proper quoting:
28
+ - cd "/Users/name/My Documents" (correct)
29
+ - cd /Users/name/My Documents (incorrect - will fail)
30
+ - python "/path/with spaces/script.py" (correct)
31
+ - python /path/with spaces/script.py (incorrect - will fail)
32
+ - After ensuring proper quoting, execute the command.
33
+ - Capture the output of the command.
34
+
35
+ Usage notes:
36
+ - The command argument is required.
37
+ - You can specify an optional timeout in milliseconds (up to ${BASH_DEFAULT_TIMEOUT_MS}ms / ${BASH_DEFAULT_TIMEOUT_MS / 60000} minutes). If not specified, commands will timeout after ${BASH_DEFAULT_TIMEOUT_MS}ms (${BASH_DEFAULT_TIMEOUT_MS / 60000} minutes).
38
+ - It is very helpful if you write a clear, concise description of what this command does in 5-10 words.
39
+ - If the output exceeds ${MAX_OUTPUT_LENGTH} characters, output will be truncated before being returned to you.
40
+ - You can use the \`run_in_background\` parameter to run the command in the background, which allows you to continue working while the command runs. You can monitor the output using the Bash tool as it becomes available. You do not need to use '&' at the end of the command when using this parameter.
41
+ - Avoid using Bash with the \`find\`, \`grep\`, \`cat\`, \`head\`, \`tail\`, \`sed\`, \`awk\`, or \`echo\` commands, unless explicitly instructed or when these commands are truly necessary for the task. Instead, always prefer using the dedicated tools for these commands:
42
+ - File search: Use Glob (NOT find or ls)
43
+ - Content search: Use Grep (NOT grep or rg)
44
+ - Read files: Use Read (NOT cat/head/tail)
45
+ - Edit files: Use Edit (NOT sed/awk)
46
+ - Write files: Use Write (NOT echo >/cat <<EOF)
47
+ - Communication: Output text directly (NOT echo/printf)
48
+ - When issuing multiple commands:
49
+ - If the commands are independent and can run in parallel, make multiple Bash tool calls in a single message. For example, if you need to run "git status" and "git diff", send a single message with two Bash tool calls in parallel.
50
+ - If the commands depend on each other and must run sequentially, use a single Bash call with '&&' to chain them together (e.g., \`git add . && git commit -m "message" && git push\`). For instance, if one operation must complete before another starts (like mkdir before cp, Write before Bash for git operations, or git add before git commit), run these operations sequentially instead.
51
+ - Use ';' only when you need to run commands sequentially but don't care if earlier commands fail
52
+ - DO NOT use newlines to separate commands (newlines are ok in quoted strings)
53
+ - Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of \`cd\`. You may use \`cd\` if the User explicitly requests it.
54
+ <good-example>
55
+ pytest /foo/bar/tests
56
+ </good-example>
57
+ <bad-example>
58
+ cd /foo/bar && pytest tests
59
+ </bad-example>
60
+ `,
13
61
  parameters: {
14
62
  type: "object",
15
63
  properties: {
@@ -37,9 +85,10 @@ export const bashTool = {
37
85
  execute: async (args, context) => {
38
86
  const command = args.command;
39
87
  const runInBackground = args.run_in_background;
40
- // Set default timeout: 60s for foreground, no timeout for background
88
+ const description = args.description;
89
+ // Set default timeout: BASH_DEFAULT_TIMEOUT_MS for foreground, no timeout for background
41
90
  const timeout = args.timeout ??
42
- (runInBackground ? undefined : 60000);
91
+ (runInBackground ? undefined : BASH_DEFAULT_TIMEOUT_MS);
43
92
  if (!command || typeof command !== "string") {
44
93
  return {
45
94
  success: false,
@@ -56,6 +105,37 @@ export const bashTool = {
56
105
  error: "Timeout must be a number between 0 and 600000 milliseconds",
57
106
  };
58
107
  }
108
+ // Permission check after validation but before real operation
109
+ if (context.permissionManager &&
110
+ context.permissionMode &&
111
+ context.permissionMode !== "bypassPermissions") {
112
+ if (context.permissionManager.isRestrictedTool("Bash")) {
113
+ try {
114
+ const permissionContext = context.permissionManager.createContext("Bash", context.permissionMode, context.canUseToolCallback, {
115
+ command,
116
+ description,
117
+ run_in_background: runInBackground,
118
+ timeout,
119
+ workdir: context.workdir,
120
+ });
121
+ const permissionResult = await context.permissionManager.checkPermission(permissionContext);
122
+ if (permissionResult.behavior === "deny") {
123
+ return {
124
+ success: false,
125
+ content: "",
126
+ error: `Bash operation denied by user, reason: ${permissionResult.message || "No reason provided"}`,
127
+ };
128
+ }
129
+ }
130
+ catch {
131
+ return {
132
+ success: false,
133
+ content: "",
134
+ error: "Permission check failed",
135
+ };
136
+ }
137
+ }
138
+ }
59
139
  if (runInBackground) {
60
140
  // Background execution
61
141
  const backgroundBashManager = context?.backgroundBashManager;
@@ -147,16 +227,19 @@ export const bashTool = {
147
227
  handleAbort();
148
228
  return;
149
229
  }
150
- context.abortSignal.addEventListener("abort", () => handleAbort());
230
+ // Use { once: true } to prevent listener accumulation on signal reuse
231
+ context.abortSignal.addEventListener("abort", () => handleAbort(), {
232
+ once: true,
233
+ });
151
234
  }
152
235
  child.stdout?.on("data", (data) => {
153
236
  if (!isAborted) {
154
- outputBuffer += data.toString();
237
+ outputBuffer += stripAnsiColors(data.toString());
155
238
  }
156
239
  });
157
240
  child.stderr?.on("data", (data) => {
158
241
  if (!isAborted) {
159
- errorBuffer += data.toString();
242
+ errorBuffer += stripAnsiColors(data.toString());
160
243
  }
161
244
  });
162
245
  child.on("exit", (code) => {
@@ -166,9 +249,15 @@ export const bashTool = {
166
249
  }
167
250
  const exitCode = code ?? 0;
168
251
  const combinedOutput = outputBuffer + (errorBuffer ? "\n" + errorBuffer : "");
252
+ // Handle large output by truncation if needed
253
+ const finalOutput = combinedOutput || `Command executed with exit code: ${exitCode}`;
254
+ const content = finalOutput.length > MAX_OUTPUT_LENGTH
255
+ ? finalOutput.substring(0, MAX_OUTPUT_LENGTH) +
256
+ "\n\n... (output truncated)"
257
+ : finalOutput;
169
258
  resolve({
170
259
  success: exitCode === 0,
171
- content: combinedOutput || `Command executed with exit code: ${exitCode}`,
260
+ content,
172
261
  error: exitCode !== 0
173
262
  ? `Command failed with exit code: ${exitCode}`
174
263
  : undefined,
@@ -190,9 +279,13 @@ export const bashTool = {
190
279
  });
191
280
  },
192
281
  formatCompactParams: (params) => {
282
+ const description = params.description;
193
283
  const command = params.command;
194
284
  const runInBackground = params.run_in_background;
195
- return `${command}${runInBackground ? " background" : ""}`;
285
+ if (description) {
286
+ return description;
287
+ }
288
+ return `${command}${runInBackground ? " (background)" : ""}`;
196
289
  },
197
290
  };
198
291
  /**
@@ -257,14 +350,19 @@ export const bashOutputTool = {
257
350
  }
258
351
  let content = "";
259
352
  if (output.stdout) {
260
- content += output.stdout;
353
+ content += stripAnsiColors(output.stdout);
261
354
  }
262
355
  if (output.stderr) {
263
- content += (content ? "\n" : "") + output.stderr;
356
+ content += (content ? "\n" : "") + stripAnsiColors(output.stderr);
264
357
  }
358
+ const finalContent = content || "No output available";
359
+ const processedContent = finalContent.length > MAX_OUTPUT_LENGTH
360
+ ? finalContent.substring(0, MAX_OUTPUT_LENGTH) +
361
+ "\n\n... (output truncated)"
362
+ : finalContent;
265
363
  return {
266
364
  success: true,
267
- content: content || "No output available",
365
+ content: processedContent,
268
366
  shortResult: `${bashId}: ${output.status}${shell.exitCode !== undefined ? ` (${shell.exitCode})` : ""}`,
269
367
  error: undefined,
270
368
  };
@@ -1 +1 @@
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,UAyE5B,CAAC"}
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"}
@@ -37,6 +37,31 @@ export const deleteFileTool = {
37
37
  }
38
38
  try {
39
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
+ }
40
65
  // Delete file
41
66
  await unlink(filePath);
42
67
  logger.debug(`Successfully deleted file: ${filePath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"editTool.d.ts","sourceRoot":"","sources":["../../src/tools/editTool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,YAAY,CAAC;AAetE;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,UAqKtB,CAAC"}
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"}
@@ -1,7 +1,6 @@
1
1
  import { readFile, writeFile } from "fs/promises";
2
2
  import { logger } from "../utils/globalLogger.js";
3
3
  import { resolvePath, getDisplayPath } from "../utils/path.js";
4
- import { diffLines } from "diff";
5
4
  /**
6
5
  * Format compact parameter display
7
6
  */
@@ -123,6 +122,36 @@ export const editTool = {
123
122
  newContent = originalContent.replace(oldString, newString);
124
123
  replacementCount = 1;
125
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
+ }
126
155
  // Write file
127
156
  try {
128
157
  await writeFile(resolvedPath, newContent, "utf-8");
@@ -134,8 +163,6 @@ export const editTool = {
134
163
  error: `Failed to write file: ${writeError instanceof Error ? writeError.message : String(writeError)}`,
135
164
  };
136
165
  }
137
- // Generate diff information
138
- const diffResult = diffLines(originalContent, newContent);
139
166
  const shortResult = replaceAll
140
167
  ? `Replaced ${replacementCount} instances`
141
168
  : "Text replaced successfully";
@@ -145,9 +172,6 @@ export const editTool = {
145
172
  content: shortResult,
146
173
  shortResult,
147
174
  filePath: resolvedPath,
148
- originalContent,
149
- newContent,
150
- diffResult,
151
175
  };
152
176
  }
153
177
  catch (error) {
@@ -0,0 +1,6 @@
1
+ import type { ToolPlugin } from "./types.js";
2
+ /**
3
+ * LSP tool plugin - interact with LSP servers for code intelligence
4
+ */
5
+ export declare const lspTool: ToolPlugin;
6
+ //# sourceMappingURL=lspTool.d.ts.map
@@ -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"}