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
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Permission Manager for handling tool permission checks
3
+ *
4
+ * This manager provides utilities for checking permissions before tool execution.
5
+ * It implements the permission logic for different modes (default vs bypass) and
6
+ * handles custom callback integration.
7
+ */
8
+
9
+ import type {
10
+ PermissionDecision,
11
+ ToolPermissionContext,
12
+ PermissionCallback,
13
+ PermissionMode,
14
+ } from "../types/permissions.js";
15
+ import { RESTRICTED_TOOLS } from "../types/permissions.js";
16
+ import type { Logger } from "../types/index.js";
17
+
18
+ export interface PermissionManagerOptions {
19
+ /** Logger for debugging permission decisions */
20
+ logger?: Logger;
21
+ /** Configured default permission mode from settings */
22
+ configuredDefaultMode?: PermissionMode;
23
+ /** Allowed rules from settings */
24
+ allowedRules?: string[];
25
+ }
26
+
27
+ export class PermissionManager {
28
+ private logger?: Logger;
29
+ private configuredDefaultMode?: PermissionMode;
30
+ private allowedRules: string[] = [];
31
+ private onConfiguredDefaultModeChange?: (mode: PermissionMode) => void;
32
+
33
+ constructor(options: PermissionManagerOptions = {}) {
34
+ this.logger = options.logger;
35
+ this.configuredDefaultMode = options.configuredDefaultMode;
36
+ this.allowedRules = options.allowedRules || [];
37
+ }
38
+
39
+ /**
40
+ * Set a callback to be notified when the effective permission mode changes due to configuration updates
41
+ */
42
+ public setOnConfiguredDefaultModeChange(
43
+ callback: (mode: PermissionMode) => void,
44
+ ): void {
45
+ this.onConfiguredDefaultModeChange = callback;
46
+ }
47
+
48
+ /**
49
+ * Update the configured default mode (e.g., when configuration reloads)
50
+ */
51
+ updateConfiguredDefaultMode(defaultMode?: PermissionMode): void {
52
+ const oldEffectiveMode = this.getCurrentEffectiveMode();
53
+
54
+ this.logger?.debug("Updating configured default permission mode", {
55
+ previous: this.configuredDefaultMode,
56
+ new: defaultMode,
57
+ });
58
+ this.configuredDefaultMode = defaultMode;
59
+
60
+ const newEffectiveMode = this.getCurrentEffectiveMode();
61
+ if (
62
+ oldEffectiveMode !== newEffectiveMode &&
63
+ this.onConfiguredDefaultModeChange
64
+ ) {
65
+ this.logger?.debug(
66
+ "Effective permission mode changed due to configuration update",
67
+ {
68
+ oldMode: oldEffectiveMode,
69
+ newMode: newEffectiveMode,
70
+ },
71
+ );
72
+ this.onConfiguredDefaultModeChange(newEffectiveMode);
73
+ }
74
+ }
75
+
76
+ /**
77
+ * Get all currently allowed rules
78
+ */
79
+ public getAllowedRules(): string[] {
80
+ return [...this.allowedRules];
81
+ }
82
+
83
+ /**
84
+ * Update the allowed rules (e.g., when configuration reloads)
85
+ */
86
+ updateAllowedRules(rules: string[]): void {
87
+ this.logger?.debug("Updating allowed permission rules", {
88
+ count: rules.length,
89
+ });
90
+ this.allowedRules = rules;
91
+ }
92
+
93
+ /**
94
+ * Get the current effective permission mode for tool execution context
95
+ */
96
+ getCurrentEffectiveMode(cliPermissionMode?: PermissionMode): PermissionMode {
97
+ return this.resolveEffectivePermissionMode(cliPermissionMode);
98
+ }
99
+
100
+ /**
101
+ * Resolve the effective permission mode based on CLI override and configured default
102
+ */
103
+ resolveEffectivePermissionMode(
104
+ cliPermissionMode?: PermissionMode,
105
+ ): PermissionMode {
106
+ // CLI override takes highest precedence
107
+ if (cliPermissionMode !== undefined) {
108
+ this.logger?.debug("Using CLI permission mode override", {
109
+ cliMode: cliPermissionMode,
110
+ configuredDefault: this.configuredDefaultMode,
111
+ });
112
+ return cliPermissionMode;
113
+ }
114
+
115
+ // Use configured default mode if available
116
+ if (this.configuredDefaultMode !== undefined) {
117
+ this.logger?.debug("Using configured default permission mode", {
118
+ configuredDefault: this.configuredDefaultMode,
119
+ });
120
+ return this.configuredDefaultMode;
121
+ }
122
+
123
+ // Fall back to system default
124
+ this.logger?.debug("Using system default permission mode");
125
+ return "default";
126
+ }
127
+
128
+ /**
129
+ * Check if a tool execution requires permission and handle the authorization flow
130
+ * Called by individual tools after validation/diff, before real operation
131
+ */
132
+ async checkPermission(
133
+ context: ToolPermissionContext,
134
+ ): Promise<PermissionDecision> {
135
+ this.logger?.debug("Checking permission for tool", {
136
+ toolName: context.toolName,
137
+ permissionMode: context.permissionMode,
138
+ hasCallback: !!context.canUseToolCallback,
139
+ });
140
+
141
+ // 1. If bypassPermissions mode, always allow
142
+ if (context.permissionMode === "bypassPermissions") {
143
+ this.logger?.debug("Permission bypassed for tool", {
144
+ toolName: context.toolName,
145
+ });
146
+ return { behavior: "allow" };
147
+ }
148
+
149
+ // 1.1 If acceptEdits mode, allow Edit, MultiEdit, Delete, Write
150
+ if (context.permissionMode === "acceptEdits") {
151
+ const autoAcceptedTools = ["Edit", "MultiEdit", "Delete", "Write"];
152
+ if (autoAcceptedTools.includes(context.toolName)) {
153
+ this.logger?.debug(
154
+ "Permission automatically accepted for tool in acceptEdits mode",
155
+ {
156
+ toolName: context.toolName,
157
+ },
158
+ );
159
+ return { behavior: "allow" };
160
+ }
161
+ }
162
+
163
+ // 1.2 Check if tool call matches any allowed rule
164
+ if (this.isAllowedByRule(context)) {
165
+ this.logger?.debug("Permission allowed by persistent rule", {
166
+ toolName: context.toolName,
167
+ });
168
+ return { behavior: "allow" };
169
+ }
170
+
171
+ // 2. If not a restricted tool, always allow
172
+ if (!this.isRestrictedTool(context.toolName)) {
173
+ this.logger?.debug("Tool is not restricted, allowing", {
174
+ toolName: context.toolName,
175
+ });
176
+ return { behavior: "allow" };
177
+ }
178
+
179
+ // 3. If custom callback provided, call it and return result
180
+ if (context.canUseToolCallback) {
181
+ try {
182
+ this.logger?.debug("Calling custom permission callback for tool", {
183
+ toolName: context.toolName,
184
+ });
185
+ const decision = await context.canUseToolCallback(context);
186
+ this.logger?.debug("Custom callback returned decision", {
187
+ toolName: context.toolName,
188
+ decision,
189
+ });
190
+ return decision;
191
+ } catch (error) {
192
+ const errorMessage =
193
+ error instanceof Error ? error.message : String(error);
194
+ this.logger?.error("Error in permission callback", {
195
+ toolName: context.toolName,
196
+ error: errorMessage,
197
+ });
198
+ return {
199
+ behavior: "deny",
200
+ message: "Error in permission callback",
201
+ };
202
+ }
203
+ }
204
+
205
+ // 4. For default mode on restricted tools without callback, integrate with CLI confirmation
206
+ // Note: CLI confirmation integration will be implemented in Phase 2
207
+ this.logger?.warn(
208
+ "No permission callback provided for restricted tool in default mode",
209
+ {
210
+ toolName: context.toolName,
211
+ },
212
+ );
213
+ return {
214
+ behavior: "deny",
215
+ message: `Tool '${context.toolName}' requires permission approval. No permission callback configured.`,
216
+ };
217
+ }
218
+
219
+ /**
220
+ * Determine if a tool requires permission checks based on its name
221
+ */
222
+ isRestrictedTool(toolName: string): boolean {
223
+ const isRestricted = (RESTRICTED_TOOLS as readonly string[]).includes(
224
+ toolName,
225
+ );
226
+ this.logger?.debug("Checking if tool is restricted", {
227
+ toolName,
228
+ isRestricted,
229
+ });
230
+ return isRestricted;
231
+ }
232
+
233
+ /**
234
+ * Helper method to create a permission context for CLI integration
235
+ */
236
+ createContext(
237
+ toolName: string,
238
+ permissionMode: PermissionMode,
239
+ callback?: PermissionCallback,
240
+ toolInput?: Record<string, unknown>,
241
+ ): ToolPermissionContext {
242
+ const context: ToolPermissionContext = {
243
+ toolName,
244
+ permissionMode,
245
+ canUseToolCallback: callback,
246
+ toolInput,
247
+ };
248
+
249
+ this.logger?.debug("Created permission context", {
250
+ toolName,
251
+ permissionMode,
252
+ hasCallback: !!callback,
253
+ hasToolInput: !!toolInput,
254
+ });
255
+
256
+ return context;
257
+ }
258
+
259
+ /**
260
+ * Check if a tool call is allowed by persistent rules
261
+ */
262
+ private isAllowedByRule(context: ToolPermissionContext): boolean {
263
+ if (context.toolName === "Bash" && context.toolInput?.command) {
264
+ const action = `Bash(${context.toolInput.command})`;
265
+ return this.allowedRules.some((rule) => {
266
+ if (rule.endsWith(":*)")) {
267
+ const prefix = rule.slice(0, -3);
268
+ return action.startsWith(prefix);
269
+ }
270
+ return action === rule;
271
+ });
272
+ }
273
+ // Add other tools if needed in the future
274
+ return false;
275
+ }
276
+ }
@@ -20,6 +20,7 @@ export class SkillManager {
20
20
  private personalSkillsPath: string;
21
21
  private scanTimeout: number;
22
22
  private logger?: Logger;
23
+ private workdir: string;
23
24
 
24
25
  private skillMetadata = new Map<string, SkillMetadata>();
25
26
  private skillContent = new Map<string, Skill>();
@@ -30,6 +31,7 @@ export class SkillManager {
30
31
  options.personalSkillsPath || join(homedir(), ".wave", "skills");
31
32
  this.scanTimeout = options.scanTimeout || 5000;
32
33
  this.logger = options.logger;
34
+ this.workdir = options.workdir || process.cwd();
33
35
  }
34
36
 
35
37
  /**
@@ -123,7 +125,7 @@ export class SkillManager {
123
125
  );
124
126
 
125
127
  const projectCollection = await this.discoverSkillCollection(
126
- process.cwd(),
128
+ this.workdir,
127
129
  "project",
128
130
  );
129
131
 
@@ -52,9 +52,12 @@ export class SlashCommandManager {
52
52
  this.registerCommand({
53
53
  id: "clear",
54
54
  name: "clear",
55
- description: "Clear the chat session",
55
+ description: "Clear the chat session and terminal",
56
56
  handler: () => {
57
+ // Clear chat messages
57
58
  this.messageManager.clearMessages();
59
+ // Clear terminal screen
60
+ process.stdout.write("\x1Bc");
58
61
  },
59
62
  });
60
63
  }
@@ -215,7 +218,7 @@ export class SlashCommandManager {
215
218
  private async executeCustomCommandInMainAgent(
216
219
  commandName: string,
217
220
  content: string,
218
- config?: { model?: string; allowedTools?: string[] },
221
+ config?: { model?: string },
219
222
  args?: string,
220
223
  ): Promise<void> {
221
224
  try {
@@ -269,7 +272,6 @@ export class SlashCommandManager {
269
272
  // Execute the AI conversation with custom configuration
270
273
  await this.aiManager.sendAIMessage({
271
274
  model: config?.model,
272
- allowedTools: config?.allowedTools,
273
275
  });
274
276
  } catch (error) {
275
277
  this.logger?.error(