wave-agent-sdk 0.0.8 → 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 (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 +340 -137
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -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 +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 +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 +72 -13
  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 +35 -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/builtinSubagents.d.ts +7 -0
  120. package/dist/utils/builtinSubagents.d.ts.map +1 -0
  121. package/dist/utils/builtinSubagents.js +65 -0
  122. package/dist/utils/cacheControlUtils.d.ts +8 -33
  123. package/dist/utils/cacheControlUtils.d.ts.map +1 -1
  124. package/dist/utils/cacheControlUtils.js +83 -126
  125. package/dist/utils/constants.d.ts +0 -12
  126. package/dist/utils/constants.d.ts.map +1 -1
  127. package/dist/utils/constants.js +1 -13
  128. package/dist/utils/convertMessagesForAPI.d.ts +2 -1
  129. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
  130. package/dist/utils/convertMessagesForAPI.js +33 -14
  131. package/dist/utils/fileSearch.d.ts +14 -0
  132. package/dist/utils/fileSearch.d.ts.map +1 -0
  133. package/dist/utils/fileSearch.js +88 -0
  134. package/dist/utils/fileUtils.d.ts +14 -2
  135. package/dist/utils/fileUtils.d.ts.map +1 -1
  136. package/dist/utils/fileUtils.js +101 -17
  137. package/dist/utils/globalLogger.d.ts +0 -14
  138. package/dist/utils/globalLogger.d.ts.map +1 -1
  139. package/dist/utils/globalLogger.js +0 -16
  140. package/dist/utils/largeOutputHandler.d.ts +15 -0
  141. package/dist/utils/largeOutputHandler.d.ts.map +1 -0
  142. package/dist/utils/largeOutputHandler.js +40 -0
  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/subagentParser.d.ts +2 -2
  152. package/dist/utils/subagentParser.d.ts.map +1 -1
  153. package/dist/utils/subagentParser.js +10 -7
  154. package/dist/utils/tokenEstimator.d.ts +39 -0
  155. package/dist/utils/tokenEstimator.d.ts.map +1 -0
  156. package/dist/utils/tokenEstimator.js +55 -0
  157. package/package.json +5 -8
  158. package/src/agent.ts +460 -216
  159. package/src/index.ts +2 -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 +276 -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 +89 -16
  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 +48 -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/builtinSubagents.ts +71 -0
  205. package/src/utils/cacheControlUtils.ts +106 -171
  206. package/src/utils/constants.ts +1 -16
  207. package/src/utils/convertMessagesForAPI.ts +38 -14
  208. package/src/utils/fileSearch.ts +107 -0
  209. package/src/utils/fileUtils.ts +114 -19
  210. package/src/utils/globalLogger.ts +0 -17
  211. package/src/utils/largeOutputHandler.ts +55 -0
  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/subagentParser.ts +11 -8
  216. package/src/utils/tokenEstimator.ts +68 -0
  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,6 +1,6 @@
1
- import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addDiffBlockToMessage, addUserMessageToMessages, extractUserInputHistory, addMemoryBlockToMessage, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, addSubagentBlockToMessage, updateSubagentBlockInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
1
+ import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, extractUserInputHistory, addMemoryBlockToMessage, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, addSubagentBlockToMessage, updateSubagentBlockInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
2
2
  import { join } from "path";
3
- import { cleanupExpiredSessionsFromJsonl, getLatestSessionFromJsonl, loadSessionFromJsonl, appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
3
+ import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
4
4
  import { pathEncoder } from "../utils/pathEncoder.js";
5
5
  export class MessageManager {
6
6
  constructor(options) {
@@ -8,14 +8,12 @@ export class MessageManager {
8
8
  this.messages = [];
9
9
  this.latestTotalTokens = 0;
10
10
  this.userInputHistory = [];
11
- this.sessionStartTime = new Date().toISOString();
12
11
  this.workdir = options.workdir;
13
12
  this.encodedWorkdir = pathEncoder.encodeSync(this.workdir); // Cache encoded workdir
14
13
  this.callbacks = options.callbacks;
15
14
  this.logger = options.logger;
16
15
  this.savedMessageCount = 0; // Initialize saved message count tracker
17
16
  this.sessionType = options.sessionType || "main";
18
- this.parentSessionId = options.parentSessionId;
19
17
  this.subagentType = options.subagentType;
20
18
  // Compute and cache the transcript path
21
19
  this.transcriptPath = this.computeTranscriptPath();
@@ -33,9 +31,6 @@ export class MessageManager {
33
31
  getUserInputHistory() {
34
32
  return [...this.userInputHistory];
35
33
  }
36
- getSessionStartTime() {
37
- return this.sessionStartTime;
38
- }
39
34
  getWorkdir() {
40
35
  return this.workdir;
41
36
  }
@@ -71,7 +66,7 @@ export class MessageManager {
71
66
  */
72
67
  async createSessionIfNeeded() {
73
68
  try {
74
- await createSession(this.sessionId, this.workdir, this.sessionType, this.parentSessionId, this.subagentType);
69
+ await createSession(this.sessionId, this.workdir, this.sessionType);
75
70
  }
76
71
  catch (error) {
77
72
  this.logger?.error("Failed to create session:", error);
@@ -99,7 +94,7 @@ export class MessageManager {
99
94
  }
100
95
  // Use JSONL format for new sessions
101
96
  await appendMessages(this.sessionId, unsavedMessages, // Only append new messages
102
- this.workdir);
97
+ this.workdir, this.sessionType);
103
98
  // Update the saved message count
104
99
  this.savedMessageCount = this.messages.length;
105
100
  }
@@ -107,46 +102,6 @@ export class MessageManager {
107
102
  this.logger?.error("Failed to save session:", error);
108
103
  }
109
104
  }
110
- /**
111
- * Handle session restoration logic
112
- */
113
- async handleSessionRestoration(restoreSessionId, continueLastSession) {
114
- // Clean up expired sessions first
115
- cleanupExpiredSessionsFromJsonl(this.workdir).catch((error) => {
116
- this.logger?.warn("Failed to cleanup expired sessions:", error);
117
- });
118
- if (!restoreSessionId && !continueLastSession) {
119
- return;
120
- }
121
- try {
122
- let sessionToRestore = null;
123
- if (restoreSessionId) {
124
- // Use only JSONL format - no legacy support
125
- sessionToRestore = await loadSessionFromJsonl(restoreSessionId, this.workdir);
126
- if (!sessionToRestore) {
127
- console.error(`Session not found: ${restoreSessionId}`);
128
- process.exit(1);
129
- }
130
- }
131
- else if (continueLastSession) {
132
- // Use only JSONL format - no legacy support
133
- sessionToRestore = await getLatestSessionFromJsonl(this.workdir);
134
- if (!sessionToRestore) {
135
- console.error(`No previous session found for workdir: ${this.workdir}`);
136
- process.exit(1);
137
- }
138
- }
139
- if (sessionToRestore) {
140
- console.log(`Restoring session: ${sessionToRestore.id}`);
141
- // Initialize from session data
142
- this.initializeFromSession(sessionToRestore);
143
- }
144
- }
145
- catch (error) {
146
- console.error("Failed to restore session:", error);
147
- process.exit(1);
148
- }
149
- }
150
105
  setlatestTotalTokens(latestTotalTokens) {
151
106
  if (this.latestTotalTokens !== latestTotalTokens) {
152
107
  this.latestTotalTokens = latestTotalTokens;
@@ -165,7 +120,6 @@ export class MessageManager {
165
120
  this.setUserInputHistory([]);
166
121
  this.setSessionId(generateSessionId());
167
122
  this.setlatestTotalTokens(0);
168
- this.sessionStartTime = new Date().toISOString();
169
123
  this.savedMessageCount = 0; // Reset saved message count
170
124
  }
171
125
  // Initialize state from session data
@@ -173,8 +127,6 @@ export class MessageManager {
173
127
  this.setSessionId(sessionData.id);
174
128
  this.setMessages([...sessionData.messages]);
175
129
  this.setlatestTotalTokens(sessionData.metadata.latestTotalTokens);
176
- // Restore the original session start time
177
- this.sessionStartTime = sessionData.metadata.startedAt;
178
130
  // Extract user input history from session messages
179
131
  this.setUserInputHistory(extractUserInputHistory(sessionData.messages));
180
132
  // Set saved message count to the number of loaded messages since they're already saved
@@ -205,36 +157,36 @@ export class MessageManager {
205
157
  this.callbacks.onUserMessageAdded?.(params);
206
158
  // Note: Subagent-specific callbacks are now handled by SubagentManager
207
159
  }
208
- addAssistantMessage(content, toolCalls, usage, metadata) {
209
- const metadataRecord = metadata
210
- ? Object.fromEntries(Object.entries(metadata).filter(([, value]) => value !== undefined))
160
+ addAssistantMessage(content, toolCalls, usage, additionalFields) {
161
+ const additionalFieldsRecord = additionalFields
162
+ ? Object.fromEntries(Object.entries(additionalFields).filter(([, value]) => value !== undefined))
211
163
  : undefined;
212
- const newMessages = addAssistantMessageToMessages(this.messages, content, toolCalls, usage, metadataRecord);
164
+ const newMessages = addAssistantMessageToMessages(this.messages, content, toolCalls, usage, additionalFieldsRecord);
213
165
  this.setMessages(newMessages);
214
166
  this.callbacks.onAssistantMessageAdded?.();
215
167
  // Note: Subagent-specific callbacks are now handled by SubagentManager
216
168
  }
217
- mergeAssistantMetadata(metadata) {
218
- if (!metadata || Object.keys(metadata).length === 0) {
169
+ mergeAssistantAdditionalFields(additionalFields) {
170
+ if (!additionalFields || Object.keys(additionalFields).length === 0) {
219
171
  return;
220
172
  }
221
173
  const newMessages = [...this.messages];
222
174
  for (let i = newMessages.length - 1; i >= 0; i--) {
223
175
  const message = newMessages[i];
224
176
  if (message.role === "assistant") {
225
- const mergedMetadata = {
226
- ...(message.metadata || {}),
177
+ const mergedAdditionalFields = {
178
+ ...(message.additionalFields || {}),
227
179
  };
228
- for (const [key, value] of Object.entries(metadata)) {
180
+ for (const [key, value] of Object.entries(additionalFields)) {
229
181
  if (value === undefined) {
230
182
  continue;
231
183
  }
232
- mergedMetadata[key] = value;
184
+ mergedAdditionalFields[key] = value;
233
185
  }
234
- if (Object.keys(mergedMetadata).length === 0) {
186
+ if (Object.keys(mergedAdditionalFields).length === 0) {
235
187
  return;
236
188
  }
237
- message.metadata = mergedMetadata;
189
+ message.additionalFields = mergedAdditionalFields;
238
190
  this.setMessages(newMessages);
239
191
  return;
240
192
  }
@@ -259,15 +211,6 @@ export class MessageManager {
259
211
  this.callbacks.onToolBlockUpdated?.(params);
260
212
  // Note: Subagent-specific callbacks are now handled by SubagentManager
261
213
  }
262
- addDiffBlock(filePath, diffResult) {
263
- const newMessages = addDiffBlockToMessage({
264
- messages: this.messages,
265
- path: filePath,
266
- diffResult,
267
- });
268
- this.setMessages(newMessages);
269
- this.callbacks.onDiffBlockAdded?.(filePath, JSON.stringify(diffResult));
270
- }
271
214
  addErrorBlock(error) {
272
215
  const newMessages = addErrorBlockToMessage({
273
216
  messages: this.messages,
@@ -408,7 +351,7 @@ export class MessageManager {
408
351
  }
409
352
  else {
410
353
  // Add new text block if none exists
411
- lastMessage.blocks.unshift({
354
+ lastMessage.blocks.push({
412
355
  type: "text",
413
356
  content: newAccumulatedContent,
414
357
  });
@@ -418,6 +361,41 @@ export class MessageManager {
418
361
  // Note: Subagent-specific callbacks are now handled by SubagentManager
419
362
  this.callbacks.onMessagesChange?.([...this.messages]); // Still need to notify of changes
420
363
  }
364
+ /**
365
+ * Update the current assistant message reasoning during streaming
366
+ * This method updates the last assistant message's reasoning content without creating a new message
367
+ */
368
+ updateCurrentMessageReasoning(newAccumulatedReasoning) {
369
+ if (this.messages.length === 0)
370
+ return;
371
+ const lastMessage = this.messages[this.messages.length - 1];
372
+ if (lastMessage.role !== "assistant")
373
+ return;
374
+ // Get the current reasoning content to calculate the chunk
375
+ const reasoningBlockIndex = lastMessage.blocks.findIndex((block) => block.type === "reasoning");
376
+ const currentReasoning = reasoningBlockIndex >= 0
377
+ ? lastMessage.blocks[reasoningBlockIndex].content || ""
378
+ : "";
379
+ // Calculate the chunk (new content since last update)
380
+ const chunk = newAccumulatedReasoning.slice(currentReasoning.length);
381
+ if (reasoningBlockIndex >= 0) {
382
+ // Update existing reasoning block
383
+ lastMessage.blocks[reasoningBlockIndex] = {
384
+ type: "reasoning",
385
+ content: newAccumulatedReasoning,
386
+ };
387
+ }
388
+ else {
389
+ // Add new reasoning block if none exists
390
+ lastMessage.blocks.push({
391
+ type: "reasoning",
392
+ content: newAccumulatedReasoning,
393
+ });
394
+ }
395
+ // Trigger callbacks with chunk and accumulated reasoning content
396
+ this.callbacks.onAssistantReasoningUpdated?.(chunk, newAccumulatedReasoning);
397
+ this.callbacks.onMessagesChange?.([...this.messages]); // Still need to notify of changes
398
+ }
421
399
  /**
422
400
  * Remove the last user message from the conversation
423
401
  * Used for hook error handling when the user prompt needs to be erased
@@ -0,0 +1,66 @@
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
+ import type { PermissionDecision, ToolPermissionContext, PermissionCallback, PermissionMode } from "../types/permissions.js";
9
+ import type { Logger } from "../types/index.js";
10
+ export interface PermissionManagerOptions {
11
+ /** Logger for debugging permission decisions */
12
+ logger?: Logger;
13
+ /** Configured default permission mode from settings */
14
+ configuredDefaultMode?: PermissionMode;
15
+ /** Allowed rules from settings */
16
+ allowedRules?: string[];
17
+ }
18
+ export declare class PermissionManager {
19
+ private logger?;
20
+ private configuredDefaultMode?;
21
+ private allowedRules;
22
+ private onConfiguredDefaultModeChange?;
23
+ constructor(options?: PermissionManagerOptions);
24
+ /**
25
+ * Set a callback to be notified when the effective permission mode changes due to configuration updates
26
+ */
27
+ setOnConfiguredDefaultModeChange(callback: (mode: PermissionMode) => void): void;
28
+ /**
29
+ * Update the configured default mode (e.g., when configuration reloads)
30
+ */
31
+ updateConfiguredDefaultMode(defaultMode?: PermissionMode): void;
32
+ /**
33
+ * Get all currently allowed rules
34
+ */
35
+ getAllowedRules(): string[];
36
+ /**
37
+ * Update the allowed rules (e.g., when configuration reloads)
38
+ */
39
+ updateAllowedRules(rules: string[]): void;
40
+ /**
41
+ * Get the current effective permission mode for tool execution context
42
+ */
43
+ getCurrentEffectiveMode(cliPermissionMode?: PermissionMode): PermissionMode;
44
+ /**
45
+ * Resolve the effective permission mode based on CLI override and configured default
46
+ */
47
+ resolveEffectivePermissionMode(cliPermissionMode?: PermissionMode): PermissionMode;
48
+ /**
49
+ * Check if a tool execution requires permission and handle the authorization flow
50
+ * Called by individual tools after validation/diff, before real operation
51
+ */
52
+ checkPermission(context: ToolPermissionContext): Promise<PermissionDecision>;
53
+ /**
54
+ * Determine if a tool requires permission checks based on its name
55
+ */
56
+ isRestrictedTool(toolName: string): boolean;
57
+ /**
58
+ * Helper method to create a permission context for CLI integration
59
+ */
60
+ createContext(toolName: string, permissionMode: PermissionMode, callback?: PermissionCallback, toolInput?: Record<string, unknown>): ToolPermissionContext;
61
+ /**
62
+ * Check if a tool call is allowed by persistent rules
63
+ */
64
+ private isAllowedByRule;
65
+ }
66
+ //# sourceMappingURL=permissionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,6BAA6B,CAAC,CAAiC;gBAE3D,OAAO,GAAE,wBAA6B;IAMlD;;OAEG;IACI,gCAAgC,CACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,IAAI;IAIP;;OAEG;IACH,2BAA2B,CAAC,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI;IAyB/D;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOzC;;OAEG;IACH,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,cAAc,GAAG,cAAc;IAI3E;;OAEG;IACH,8BAA8B,CAC5B,iBAAiB,CAAC,EAAE,cAAc,GACjC,cAAc;IAuBjB;;;OAGG;IACG,eAAe,CACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAqF9B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAW3C;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,kBAAkB,EAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,qBAAqB;IAkBxB;;OAEG;IACH,OAAO,CAAC,eAAe;CAcxB"}
@@ -0,0 +1,208 @@
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
+ import { RESTRICTED_TOOLS } from "../types/permissions.js";
9
+ export class PermissionManager {
10
+ constructor(options = {}) {
11
+ this.allowedRules = [];
12
+ this.logger = options.logger;
13
+ this.configuredDefaultMode = options.configuredDefaultMode;
14
+ this.allowedRules = options.allowedRules || [];
15
+ }
16
+ /**
17
+ * Set a callback to be notified when the effective permission mode changes due to configuration updates
18
+ */
19
+ setOnConfiguredDefaultModeChange(callback) {
20
+ this.onConfiguredDefaultModeChange = callback;
21
+ }
22
+ /**
23
+ * Update the configured default mode (e.g., when configuration reloads)
24
+ */
25
+ updateConfiguredDefaultMode(defaultMode) {
26
+ const oldEffectiveMode = this.getCurrentEffectiveMode();
27
+ this.logger?.debug("Updating configured default permission mode", {
28
+ previous: this.configuredDefaultMode,
29
+ new: defaultMode,
30
+ });
31
+ this.configuredDefaultMode = defaultMode;
32
+ const newEffectiveMode = this.getCurrentEffectiveMode();
33
+ if (oldEffectiveMode !== newEffectiveMode &&
34
+ this.onConfiguredDefaultModeChange) {
35
+ this.logger?.debug("Effective permission mode changed due to configuration update", {
36
+ oldMode: oldEffectiveMode,
37
+ newMode: newEffectiveMode,
38
+ });
39
+ this.onConfiguredDefaultModeChange(newEffectiveMode);
40
+ }
41
+ }
42
+ /**
43
+ * Get all currently allowed rules
44
+ */
45
+ getAllowedRules() {
46
+ return [...this.allowedRules];
47
+ }
48
+ /**
49
+ * Update the allowed rules (e.g., when configuration reloads)
50
+ */
51
+ updateAllowedRules(rules) {
52
+ this.logger?.debug("Updating allowed permission rules", {
53
+ count: rules.length,
54
+ });
55
+ this.allowedRules = rules;
56
+ }
57
+ /**
58
+ * Get the current effective permission mode for tool execution context
59
+ */
60
+ getCurrentEffectiveMode(cliPermissionMode) {
61
+ return this.resolveEffectivePermissionMode(cliPermissionMode);
62
+ }
63
+ /**
64
+ * Resolve the effective permission mode based on CLI override and configured default
65
+ */
66
+ resolveEffectivePermissionMode(cliPermissionMode) {
67
+ // CLI override takes highest precedence
68
+ if (cliPermissionMode !== undefined) {
69
+ this.logger?.debug("Using CLI permission mode override", {
70
+ cliMode: cliPermissionMode,
71
+ configuredDefault: this.configuredDefaultMode,
72
+ });
73
+ return cliPermissionMode;
74
+ }
75
+ // Use configured default mode if available
76
+ if (this.configuredDefaultMode !== undefined) {
77
+ this.logger?.debug("Using configured default permission mode", {
78
+ configuredDefault: this.configuredDefaultMode,
79
+ });
80
+ return this.configuredDefaultMode;
81
+ }
82
+ // Fall back to system default
83
+ this.logger?.debug("Using system default permission mode");
84
+ return "default";
85
+ }
86
+ /**
87
+ * Check if a tool execution requires permission and handle the authorization flow
88
+ * Called by individual tools after validation/diff, before real operation
89
+ */
90
+ async checkPermission(context) {
91
+ this.logger?.debug("Checking permission for tool", {
92
+ toolName: context.toolName,
93
+ permissionMode: context.permissionMode,
94
+ hasCallback: !!context.canUseToolCallback,
95
+ });
96
+ // 1. If bypassPermissions mode, always allow
97
+ if (context.permissionMode === "bypassPermissions") {
98
+ this.logger?.debug("Permission bypassed for tool", {
99
+ toolName: context.toolName,
100
+ });
101
+ return { behavior: "allow" };
102
+ }
103
+ // 1.1 If acceptEdits mode, allow Edit, MultiEdit, Delete, Write
104
+ if (context.permissionMode === "acceptEdits") {
105
+ const autoAcceptedTools = ["Edit", "MultiEdit", "Delete", "Write"];
106
+ if (autoAcceptedTools.includes(context.toolName)) {
107
+ this.logger?.debug("Permission automatically accepted for tool in acceptEdits mode", {
108
+ toolName: context.toolName,
109
+ });
110
+ return { behavior: "allow" };
111
+ }
112
+ }
113
+ // 1.2 Check if tool call matches any allowed rule
114
+ if (this.isAllowedByRule(context)) {
115
+ this.logger?.debug("Permission allowed by persistent rule", {
116
+ toolName: context.toolName,
117
+ });
118
+ return { behavior: "allow" };
119
+ }
120
+ // 2. If not a restricted tool, always allow
121
+ if (!this.isRestrictedTool(context.toolName)) {
122
+ this.logger?.debug("Tool is not restricted, allowing", {
123
+ toolName: context.toolName,
124
+ });
125
+ return { behavior: "allow" };
126
+ }
127
+ // 3. If custom callback provided, call it and return result
128
+ if (context.canUseToolCallback) {
129
+ try {
130
+ this.logger?.debug("Calling custom permission callback for tool", {
131
+ toolName: context.toolName,
132
+ });
133
+ const decision = await context.canUseToolCallback(context);
134
+ this.logger?.debug("Custom callback returned decision", {
135
+ toolName: context.toolName,
136
+ decision,
137
+ });
138
+ return decision;
139
+ }
140
+ catch (error) {
141
+ const errorMessage = error instanceof Error ? error.message : String(error);
142
+ this.logger?.error("Error in permission callback", {
143
+ toolName: context.toolName,
144
+ error: errorMessage,
145
+ });
146
+ return {
147
+ behavior: "deny",
148
+ message: "Error in permission callback",
149
+ };
150
+ }
151
+ }
152
+ // 4. For default mode on restricted tools without callback, integrate with CLI confirmation
153
+ // Note: CLI confirmation integration will be implemented in Phase 2
154
+ this.logger?.warn("No permission callback provided for restricted tool in default mode", {
155
+ toolName: context.toolName,
156
+ });
157
+ return {
158
+ behavior: "deny",
159
+ message: `Tool '${context.toolName}' requires permission approval. No permission callback configured.`,
160
+ };
161
+ }
162
+ /**
163
+ * Determine if a tool requires permission checks based on its name
164
+ */
165
+ isRestrictedTool(toolName) {
166
+ const isRestricted = RESTRICTED_TOOLS.includes(toolName);
167
+ this.logger?.debug("Checking if tool is restricted", {
168
+ toolName,
169
+ isRestricted,
170
+ });
171
+ return isRestricted;
172
+ }
173
+ /**
174
+ * Helper method to create a permission context for CLI integration
175
+ */
176
+ createContext(toolName, permissionMode, callback, toolInput) {
177
+ const context = {
178
+ toolName,
179
+ permissionMode,
180
+ canUseToolCallback: callback,
181
+ toolInput,
182
+ };
183
+ this.logger?.debug("Created permission context", {
184
+ toolName,
185
+ permissionMode,
186
+ hasCallback: !!callback,
187
+ hasToolInput: !!toolInput,
188
+ });
189
+ return context;
190
+ }
191
+ /**
192
+ * Check if a tool call is allowed by persistent rules
193
+ */
194
+ isAllowedByRule(context) {
195
+ if (context.toolName === "Bash" && context.toolInput?.command) {
196
+ const action = `Bash(${context.toolInput.command})`;
197
+ return this.allowedRules.some((rule) => {
198
+ if (rule.endsWith(":*)")) {
199
+ const prefix = rule.slice(0, -3);
200
+ return action.startsWith(prefix);
201
+ }
202
+ return action === rule;
203
+ });
204
+ }
205
+ // Add other tools if needed in the future
206
+ return false;
207
+ }
208
+ }
@@ -6,6 +6,7 @@ export declare class SkillManager {
6
6
  private personalSkillsPath;
7
7
  private scanTimeout;
8
8
  private logger?;
9
+ private workdir;
9
10
  private skillMetadata;
10
11
  private skillContent;
11
12
  private initialized;
@@ -1 +1 @@
1
- {"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAO7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAqCjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
1
+ {"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAQ7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAqCjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
@@ -14,6 +14,7 @@ export class SkillManager {
14
14
  options.personalSkillsPath || join(homedir(), ".wave", "skills");
15
15
  this.scanTimeout = options.scanTimeout || 5000;
16
16
  this.logger = options.logger;
17
+ this.workdir = options.workdir || process.cwd();
17
18
  }
18
19
  /**
19
20
  * Initialize the skill manager by discovering available skills
@@ -84,7 +85,7 @@ export class SkillManager {
84
85
  */
85
86
  async discoverSkills() {
86
87
  const personalCollection = await this.discoverSkillCollection(this.personalSkillsPath, "personal");
87
- const projectCollection = await this.discoverSkillCollection(process.cwd(), "project");
88
+ const projectCollection = await this.discoverSkillCollection(this.workdir, "project");
88
89
  return {
89
90
  personalSkills: personalCollection.skills,
90
91
  projectSkills: projectCollection.skills,
@@ -1 +1 @@
1
- {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
1
+ {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IAyE7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
@@ -195,7 +195,6 @@ export class SlashCommandManager {
195
195
  // Execute the AI conversation with custom configuration
196
196
  await this.aiManager.sendAIMessage({
197
197
  model: config?.model,
198
- allowedTools: config?.allowedTools,
199
198
  });
200
199
  }
201
200
  catch (error) {
@@ -13,6 +13,8 @@ export interface SubagentManagerCallbacks {
13
13
  onSubagentAssistantMessageAdded?: (subagentId: string) => void;
14
14
  /** Triggered during subagent content streaming updates */
15
15
  onSubagentAssistantContentUpdated?: (subagentId: string, chunk: string, accumulated: string) => void;
16
+ /** Triggered during subagent reasoning streaming updates */
17
+ onSubagentAssistantReasoningUpdated?: (subagentId: string, chunk: string, accumulated: string) => void;
16
18
  /** Triggered when subagent tool block is updated */
17
19
  onSubagentToolBlockUpdated?: (subagentId: string, params: AgentToolBlockUpdateParams) => void;
18
20
  /** Triggered when subagent messages change */
@@ -34,9 +36,9 @@ export interface SubagentManagerOptions {
34
36
  parentMessageManager: MessageManager;
35
37
  callbacks?: SubagentManagerCallbacks;
36
38
  logger?: Logger;
37
- gatewayConfig: GatewayConfig;
38
- modelConfig: ModelConfig;
39
- tokenLimit: number;
39
+ getGatewayConfig: () => GatewayConfig;
40
+ getModelConfig: () => ModelConfig;
41
+ getTokenLimit: () => number;
40
42
  hookManager?: HookManager;
41
43
  onUsageAdded?: (usage: Usage) => void;
42
44
  }
@@ -48,9 +50,9 @@ export declare class SubagentManager {
48
50
  private parentMessageManager;
49
51
  private callbacks?;
50
52
  private logger?;
51
- private gatewayConfig;
52
- private modelConfig;
53
- private tokenLimit;
53
+ private getGatewayConfig;
54
+ private getModelConfig;
55
+ private getTokenLimit;
54
56
  private hookManager?;
55
57
  private onUsageAdded?;
56
58
  constructor(options: SubagentManagerOptions);
@@ -123,22 +125,5 @@ export declare class SubagentManager {
123
125
  * Extracted to reuse in both create and restore flows
124
126
  */
125
127
  private createSubagentCallbacks;
126
- /**
127
- * Update configuration for SubagentManager and all active subagents
128
- * This method updates configuration for live config reload support
129
- * @param newGatewayConfig - New gateway configuration
130
- * @param newModelConfig - New model configuration
131
- * @param newTokenLimit - New token limit
132
- */
133
- updateConfiguration(newGatewayConfig: GatewayConfig, newModelConfig: ModelConfig, newTokenLimit: number): void;
134
- /**
135
- * Get current configuration for debugging
136
- */
137
- getCurrentConfiguration(): {
138
- gatewayConfig: GatewayConfig;
139
- modelConfig: ModelConfig;
140
- tokenLimit: number;
141
- activeSubagents: number;
142
- };
143
128
  }
144
129
  //# sourceMappingURL=subagentManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}