wave-agent-sdk 0.5.0 → 0.6.2

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 (169) hide show
  1. package/dist/agent.d.ts +14 -11
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +64 -151
  4. package/dist/constants/subagents.d.ts +5 -0
  5. package/dist/constants/subagents.d.ts.map +1 -0
  6. package/dist/constants/subagents.js +4 -0
  7. package/dist/constants/tools.d.ts +4 -1
  8. package/dist/constants/tools.d.ts.map +1 -1
  9. package/dist/constants/tools.js +4 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/managers/aiManager.d.ts +2 -5
  14. package/dist/managers/aiManager.d.ts.map +1 -1
  15. package/dist/managers/aiManager.js +43 -48
  16. package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
  17. package/dist/managers/backgroundTaskManager.js +63 -53
  18. package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
  19. package/dist/managers/foregroundTaskManager.js +3 -2
  20. package/dist/managers/mcpManager.d.ts.map +1 -1
  21. package/dist/managers/messageManager.d.ts +13 -27
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +94 -89
  24. package/dist/managers/permissionManager.d.ts.map +1 -1
  25. package/dist/managers/permissionManager.js +25 -15
  26. package/dist/managers/planManager.d.ts +1 -1
  27. package/dist/managers/planManager.d.ts.map +1 -1
  28. package/dist/managers/planManager.js +2 -2
  29. package/dist/managers/reversionManager.d.ts.map +1 -1
  30. package/dist/managers/reversionManager.js +23 -2
  31. package/dist/managers/slashCommandManager.d.ts +3 -0
  32. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  33. package/dist/managers/slashCommandManager.js +8 -3
  34. package/dist/managers/subagentManager.d.ts +8 -14
  35. package/dist/managers/subagentManager.d.ts.map +1 -1
  36. package/dist/managers/subagentManager.js +46 -112
  37. package/dist/managers/toolManager.d.ts +11 -0
  38. package/dist/managers/toolManager.d.ts.map +1 -1
  39. package/dist/managers/toolManager.js +20 -2
  40. package/dist/{constants/prompts.d.ts → prompts/index.d.ts} +17 -15
  41. package/dist/prompts/index.d.ts.map +1 -0
  42. package/dist/prompts/index.js +309 -0
  43. package/dist/services/aiService.d.ts +0 -1
  44. package/dist/services/aiService.d.ts.map +1 -1
  45. package/dist/services/aiService.js +4 -140
  46. package/dist/services/memory.d.ts +0 -3
  47. package/dist/services/memory.d.ts.map +1 -1
  48. package/dist/services/memory.js +0 -59
  49. package/dist/services/session.d.ts +15 -1
  50. package/dist/services/session.d.ts.map +1 -1
  51. package/dist/services/session.js +57 -1
  52. package/dist/services/taskManager.d.ts +25 -0
  53. package/dist/services/taskManager.d.ts.map +1 -0
  54. package/dist/services/taskManager.js +164 -0
  55. package/dist/tools/askUserQuestion.d.ts.map +1 -1
  56. package/dist/tools/askUserQuestion.js +39 -25
  57. package/dist/tools/bashTool.d.ts.map +1 -1
  58. package/dist/tools/bashTool.js +13 -11
  59. package/dist/tools/editTool.d.ts.map +1 -1
  60. package/dist/tools/editTool.js +2 -1
  61. package/dist/tools/exitPlanMode.d.ts.map +1 -1
  62. package/dist/tools/exitPlanMode.js +26 -2
  63. package/dist/tools/globTool.d.ts.map +1 -1
  64. package/dist/tools/globTool.js +8 -2
  65. package/dist/tools/grepTool.d.ts.map +1 -1
  66. package/dist/tools/grepTool.js +17 -6
  67. package/dist/tools/lsTool.d.ts.map +1 -1
  68. package/dist/tools/lsTool.js +3 -1
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +16 -1
  71. package/dist/tools/taskManagementTools.d.ts +6 -0
  72. package/dist/tools/taskManagementTools.d.ts.map +1 -0
  73. package/dist/tools/taskManagementTools.js +461 -0
  74. package/dist/tools/taskOutputTool.d.ts.map +1 -1
  75. package/dist/tools/taskOutputTool.js +32 -8
  76. package/dist/tools/taskStopTool.d.ts.map +1 -1
  77. package/dist/tools/taskStopTool.js +7 -1
  78. package/dist/tools/taskTool.d.ts.map +1 -1
  79. package/dist/tools/taskTool.js +37 -2
  80. package/dist/tools/types.d.ts +11 -0
  81. package/dist/tools/types.d.ts.map +1 -1
  82. package/dist/tools/writeTool.d.ts.map +1 -1
  83. package/dist/tools/writeTool.js +9 -1
  84. package/dist/types/index.d.ts +1 -0
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/index.js +1 -0
  87. package/dist/types/messaging.d.ts +2 -18
  88. package/dist/types/messaging.d.ts.map +1 -1
  89. package/dist/types/processes.d.ts +16 -6
  90. package/dist/types/processes.d.ts.map +1 -1
  91. package/dist/types/tasks.d.ts +13 -0
  92. package/dist/types/tasks.d.ts.map +1 -0
  93. package/dist/types/tasks.js +1 -0
  94. package/dist/types/tools.d.ts +4 -1
  95. package/dist/types/tools.d.ts.map +1 -1
  96. package/dist/utils/builtinSubagents.d.ts.map +1 -1
  97. package/dist/utils/builtinSubagents.js +59 -44
  98. package/dist/utils/cacheControlUtils.d.ts.map +1 -1
  99. package/dist/utils/cacheControlUtils.js +18 -12
  100. package/dist/utils/constants.d.ts +0 -4
  101. package/dist/utils/constants.d.ts.map +1 -1
  102. package/dist/utils/constants.js +0 -4
  103. package/dist/utils/convertMessagesForAPI.js +2 -2
  104. package/dist/utils/editUtils.d.ts.map +1 -1
  105. package/dist/utils/editUtils.js +2 -2
  106. package/dist/utils/gitUtils.d.ts +7 -0
  107. package/dist/utils/gitUtils.d.ts.map +1 -0
  108. package/dist/utils/gitUtils.js +24 -0
  109. package/dist/utils/messageOperations.d.ts +3 -58
  110. package/dist/utils/messageOperations.d.ts.map +1 -1
  111. package/dist/utils/messageOperations.js +4 -146
  112. package/dist/utils/nameGenerator.d.ts +1 -1
  113. package/dist/utils/nameGenerator.d.ts.map +1 -1
  114. package/dist/utils/nameGenerator.js +19 -3
  115. package/package.json +1 -1
  116. package/src/agent.ts +86 -183
  117. package/src/constants/subagents.ts +4 -0
  118. package/src/constants/tools.ts +4 -1
  119. package/src/index.ts +1 -0
  120. package/src/managers/aiManager.ts +63 -70
  121. package/src/managers/backgroundTaskManager.ts +58 -54
  122. package/src/managers/foregroundTaskManager.ts +3 -2
  123. package/src/managers/mcpManager.ts +6 -3
  124. package/src/managers/messageManager.ts +126 -142
  125. package/src/managers/permissionManager.ts +32 -21
  126. package/src/managers/planManager.ts +2 -2
  127. package/src/managers/reversionManager.ts +26 -2
  128. package/src/managers/slashCommandManager.ts +12 -3
  129. package/src/managers/subagentManager.ts +60 -144
  130. package/src/managers/toolManager.ts +32 -2
  131. package/src/prompts/index.ts +366 -0
  132. package/src/services/aiService.ts +3 -145
  133. package/src/services/memory.ts +0 -72
  134. package/src/services/session.ts +73 -0
  135. package/src/services/taskManager.ts +195 -0
  136. package/src/tools/askUserQuestion.ts +51 -29
  137. package/src/tools/bashTool.ts +15 -17
  138. package/src/tools/editTool.ts +3 -1
  139. package/src/tools/exitPlanMode.ts +27 -3
  140. package/src/tools/globTool.ts +10 -2
  141. package/src/tools/grepTool.ts +17 -6
  142. package/src/tools/lsTool.ts +3 -1
  143. package/src/tools/readTool.ts +17 -1
  144. package/src/tools/taskManagementTools.ts +516 -0
  145. package/src/tools/taskOutputTool.ts +34 -12
  146. package/src/tools/taskStopTool.ts +7 -1
  147. package/src/tools/taskTool.ts +45 -1
  148. package/src/tools/types.ts +12 -0
  149. package/src/tools/writeTool.ts +9 -2
  150. package/src/types/index.ts +1 -0
  151. package/src/types/messaging.ts +1 -21
  152. package/src/types/processes.ts +18 -7
  153. package/src/types/tasks.ts +13 -0
  154. package/src/types/tools.ts +4 -1
  155. package/src/utils/builtinSubagents.ts +81 -45
  156. package/src/utils/cacheControlUtils.ts +26 -18
  157. package/src/utils/constants.ts +0 -5
  158. package/src/utils/convertMessagesForAPI.ts +2 -2
  159. package/src/utils/editUtils.ts +2 -6
  160. package/src/utils/gitUtils.ts +24 -0
  161. package/src/utils/messageOperations.ts +6 -229
  162. package/src/utils/nameGenerator.ts +20 -3
  163. package/dist/constants/prompts.d.ts.map +0 -1
  164. package/dist/constants/prompts.js +0 -118
  165. package/dist/tools/todoWriteTool.d.ts +0 -6
  166. package/dist/tools/todoWriteTool.d.ts.map +0 -1
  167. package/dist/tools/todoWriteTool.js +0 -220
  168. package/src/constants/prompts.ts +0 -155
  169. package/src/tools/todoWriteTool.ts +0 -257
@@ -1,4 +1,4 @@
1
- import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, extractUserInputHistory, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, addSubagentBlockToMessage, updateSubagentBlockInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
1
+ import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addUserMessageToMessages, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, removeLastUserMessage, } from "../utils/messageOperations.js";
2
2
  import { join } from "path";
3
3
  import { appendMessages, createSession, generateSessionId, SESSION_DIR, } from "../services/session.js";
4
4
  import { pathEncoder } from "../utils/pathEncoder.js";
@@ -6,9 +6,9 @@ export class MessageManager {
6
6
  constructor(options) {
7
7
  this.filesInContext = new Set(); // Track files mentioned in the conversation
8
8
  this.sessionId = generateSessionId();
9
+ this.rootSessionId = this.sessionId;
9
10
  this.messages = [];
10
11
  this.latestTotalTokens = 0;
11
- this.userInputHistory = [];
12
12
  this.workdir = options.workdir;
13
13
  this.encodedWorkdir = pathEncoder.encodeSync(this.workdir); // Cache encoded workdir
14
14
  this.callbacks = options.callbacks;
@@ -24,15 +24,18 @@ export class MessageManager {
24
24
  getSessionId() {
25
25
  return this.sessionId;
26
26
  }
27
+ getRootSessionId() {
28
+ return this.rootSessionId;
29
+ }
30
+ getParentSessionId() {
31
+ return this.parentSessionId;
32
+ }
27
33
  getMessages() {
28
34
  return [...this.messages];
29
35
  }
30
36
  getlatestTotalTokens() {
31
37
  return this.latestTotalTokens;
32
38
  }
33
- getUserInputHistory() {
34
- return [...this.userInputHistory];
35
- }
36
39
  getWorkdir() {
37
40
  return this.workdir;
38
41
  }
@@ -122,7 +125,7 @@ export class MessageManager {
122
125
  }
123
126
  // Use JSONL format for new sessions
124
127
  await appendMessages(this.sessionId, unsavedMessages, // Only append new messages
125
- this.workdir, this.sessionType);
128
+ this.workdir, this.sessionType, this.rootSessionId, this.parentSessionId);
126
129
  // Update the saved message count
127
130
  this.savedMessageCount = this.messages.length;
128
131
  }
@@ -136,17 +139,13 @@ export class MessageManager {
136
139
  this.callbacks.onLatestTotalTokensChange?.(latestTotalTokens);
137
140
  }
138
141
  }
139
- setUserInputHistory(userInputHistory) {
140
- this.userInputHistory = [...userInputHistory];
141
- this.callbacks.onUserInputHistoryChange?.(this.userInputHistory);
142
- }
143
142
  /**
144
- * Clear messages and input history
143
+ * Clear messages
145
144
  */
146
145
  clearMessages() {
147
146
  this.setMessages([]);
148
- this.setUserInputHistory([]);
149
147
  this.setSessionId(generateSessionId());
148
+ this.rootSessionId = this.sessionId;
150
149
  this.setlatestTotalTokens(0);
151
150
  this.savedMessageCount = 0; // Reset saved message count
152
151
  }
@@ -165,29 +164,15 @@ export class MessageManager {
165
164
  // Initialize state from session data
166
165
  initializeFromSession(sessionData) {
167
166
  this.setSessionId(sessionData.id);
167
+ this.rootSessionId = sessionData.rootSessionId || sessionData.id;
168
+ this.parentSessionId = sessionData.parentSessionId;
168
169
  this.setMessages([...sessionData.messages]);
169
170
  this.updateFilesInContext(sessionData.messages);
170
171
  this.setlatestTotalTokens(sessionData.metadata.latestTotalTokens);
171
- // Extract user input history from session messages
172
- this.setUserInputHistory(extractUserInputHistory(sessionData.messages));
173
172
  // Set saved message count to the number of loaded messages since they're already saved
174
173
  // This must be done after setSessionId which resets it to 0
175
174
  this.savedMessageCount = sessionData.messages.length;
176
175
  }
177
- // Add to input history
178
- addToInputHistory(input) {
179
- // Avoid adding duplicate inputs
180
- if (this.userInputHistory.length > 0 &&
181
- this.userInputHistory[this.userInputHistory.length - 1] === input) {
182
- return;
183
- }
184
- // Limit history records, keep the latest 100
185
- this.setUserInputHistory([...this.userInputHistory, input].slice(-100));
186
- }
187
- // Clear input history
188
- clearInputHistory() {
189
- this.setUserInputHistory([]);
190
- }
191
176
  // Encapsulated message operation functions
192
177
  addUserMessage(params) {
193
178
  const newMessages = addUserMessageToMessages({
@@ -236,17 +221,7 @@ export class MessageManager {
236
221
  updateToolBlock(params) {
237
222
  const newMessages = updateToolBlockInMessage({
238
223
  messages: this.messages,
239
- id: params.id,
240
- parameters: params.parameters,
241
- result: params.result,
242
- success: params.success,
243
- error: params.error,
244
- stage: params.stage,
245
- name: params.name,
246
- shortResult: params.shortResult,
247
- images: params.images,
248
- compactParams: params.compactParams,
249
- parametersChunk: params.parametersChunk,
224
+ ...params,
250
225
  });
251
226
  this.setMessages(newMessages);
252
227
  this.callbacks.onToolBlockUpdated?.(params);
@@ -272,10 +247,11 @@ export class MessageManager {
272
247
  }
273
248
  }
274
249
  /**
275
- * Compress messages and update session, delete compressed messages, only keep compressed messages and subsequent messages
250
+ * Compress messages and update session, delete compressed messages, only keep compressed messages and last 3 messages
276
251
  */
277
- compressMessagesAndUpdateSession(insertIndex, compressedContent, usage) {
278
- const currentMessages = this.messages;
252
+ compressMessagesAndUpdateSession(compressedContent, usage) {
253
+ // Get last 3 messages to preserve
254
+ const lastThreeMessages = this.messages.slice(-3);
279
255
  // Create compressed message
280
256
  const compressMessage = {
281
257
  role: "assistant",
@@ -288,19 +264,20 @@ export class MessageManager {
288
264
  ],
289
265
  ...(usage && { usage }),
290
266
  };
291
- // Convert negative index to positive index
292
- const actualIndex = insertIndex < 0 ? currentMessages.length + insertIndex : insertIndex;
293
- // Build new message array: keep compressed message and all messages from actualIndex onwards
294
- const newMessages = [
295
- compressMessage,
296
- ...currentMessages.slice(actualIndex),
297
- ];
298
- // Update sessionId
267
+ // Build new message array: keep the compressed message and last 3 messages
268
+ const newMessages = [compressMessage, ...lastThreeMessages];
269
+ // Update sessionId and parentSessionId
270
+ const oldSessionId = this.sessionId;
299
271
  this.setSessionId(generateSessionId());
272
+ this.parentSessionId = oldSessionId;
273
+ // Trigger task list update if this is the main session to ensure continuity
274
+ if (this.sessionType === "main") {
275
+ this.callbacks.onSessionIdChange?.(this.sessionId);
276
+ }
300
277
  // Set new message list
301
278
  this.setMessages(newMessages);
302
- // Trigger compression callback, insertIndex remains unchanged
303
- this.callbacks.onCompressBlockAdded?.(insertIndex, compressedContent);
279
+ // Trigger compression callback
280
+ this.callbacks.onCompressBlockAdded?.(compressedContent);
304
281
  }
305
282
  addFileHistoryBlock(snapshots) {
306
283
  if (snapshots.length === 0)
@@ -312,6 +289,7 @@ export class MessageManager {
312
289
  snapshots,
313
290
  });
314
291
  this.setMessages([...this.messages]);
292
+ this.callbacks.onFileHistoryBlockAdded?.(snapshots);
315
293
  }
316
294
  }
317
295
  // Bash command related message operations
@@ -341,33 +319,6 @@ export class MessageManager {
341
319
  this.setMessages(updatedMessages);
342
320
  this.callbacks.onCompleteCommandMessage?.(command, exitCode);
343
321
  }
344
- // Subagent block methods
345
- addSubagentBlock(subagentId, subagentName, sessionId, configuration, status = "active", parameters, runInBackground) {
346
- const params = {
347
- messages: this.messages,
348
- subagentId,
349
- subagentName,
350
- sessionId,
351
- status,
352
- configuration,
353
- runInBackground,
354
- };
355
- const updatedMessages = addSubagentBlockToMessage(params);
356
- this.setMessages(updatedMessages);
357
- this.callbacks.onSubAgentBlockAdded?.(params.subagentId, parameters);
358
- }
359
- updateSubagentBlock(subagentId, updates) {
360
- const updatedMessages = updateSubagentBlockInMessage(this.messages, subagentId, updates);
361
- this.setMessages(updatedMessages);
362
- const params = {
363
- messages: this.messages,
364
- subagentId,
365
- status: updates.status || "active",
366
- };
367
- if (updates.status) {
368
- this.callbacks.onSubAgentBlockUpdated?.(params.subagentId, params.status);
369
- }
370
- }
371
322
  /**
372
323
  * Trigger usage change callback with all usage data from assistant messages
373
324
  */
@@ -460,31 +411,85 @@ export class MessageManager {
460
411
  const newMessages = removeLastUserMessage(this.messages);
461
412
  this.setMessages(newMessages);
462
413
  }
414
+ async getFullMessageThread() {
415
+ const { loadFullMessageThread } = await import("../services/session.js");
416
+ return loadFullMessageThread(this.sessionId, this.workdir);
417
+ }
463
418
  /**
464
419
  * Truncate history to a specific index and revert file changes.
465
420
  * @param index - The index of the user message to truncate to.
466
421
  * @param reversionManager - Optional ReversionManager to handle file rollbacks.
467
422
  */
468
423
  async truncateHistory(index, reversionManager) {
469
- if (index < 0 || index >= this.messages.length) {
424
+ const { messages, sessionIds } = await this.getFullMessageThread();
425
+ if (index < 0 || index >= messages.length) {
470
426
  throw new Error(`Invalid message index: ${index}`);
471
427
  }
472
- // Identify messages to be removed
473
- const messagesToRemove = this.messages.slice(index);
428
+ // Find which session the index belongs to
429
+ let targetSessionId = this.sessionId;
430
+ let targetIndexInSession = index;
431
+ // We need to be careful here because loadFullMessageThread might have removed "compress" blocks
432
+ // Let's re-calculate based on the actual messages returned.
433
+ // Actually, it's easier to just load sessions one by one again or keep track of counts.
434
+ // For simplicity, let's assume we want to truncate the WHOLE thread.
435
+ // If the index is in a previous session, we need to:
436
+ // 1. Load that session.
437
+ // 2. Truncate it.
438
+ // 3. Make it the current session.
439
+ // 4. Delete/Invalidate subsequent sessions.
440
+ // To correctly map 'index' to a session, we need to know the message count of each session
441
+ // as they appear in the concatenated 'messages' array.
442
+ let remainingIndex = index;
443
+ const { loadSessionFromJsonl } = await import("../services/session.js");
444
+ for (const sid of sessionIds) {
445
+ const sessionData = await loadSessionFromJsonl(sid, this.workdir);
446
+ if (!sessionData)
447
+ continue;
448
+ const sessionMessages = sessionData.messages;
449
+ // If this is not the first session in the thread, it might have a compress block at the start
450
+ // that was removed in getFullMessageThread.
451
+ const hasCompressBlock = sessionMessages[0]?.blocks.some((b) => b.type === "compress");
452
+ const effectiveMessages = hasCompressBlock && sid !== sessionIds[0]
453
+ ? sessionMessages.slice(1)
454
+ : sessionMessages;
455
+ if (remainingIndex < effectiveMessages.length) {
456
+ targetSessionId = sid;
457
+ targetIndexInSession = hasCompressBlock
458
+ ? remainingIndex + 1
459
+ : remainingIndex;
460
+ break;
461
+ }
462
+ remainingIndex -= effectiveMessages.length;
463
+ }
464
+ // Load the target session to perform truncation
465
+ const targetSessionData = await loadSessionFromJsonl(targetSessionId, this.workdir);
466
+ if (!targetSessionData)
467
+ throw new Error(`Target session ${targetSessionId} not found`);
468
+ // Identify messages to be removed (from the whole thread)
469
+ const messagesToRemove = messages.slice(index);
474
470
  const messageIdsToRemove = messagesToRemove
475
471
  .map((m) => m.id)
476
472
  .filter((id) => !!id);
477
473
  // Revert file changes if manager is provided
478
474
  if (reversionManager && messageIdsToRemove.length > 0) {
479
- await reversionManager.revertTo(messageIdsToRemove, this.messages);
475
+ await reversionManager.revertTo(messageIdsToRemove, messages);
480
476
  }
481
- // Truncate messages in memory
482
- const newMessages = this.messages.slice(0, index);
483
- this.setMessages(newMessages);
484
- // Update persistence: rewrite the session file
485
- await this.rewriteSessionFile(newMessages);
477
+ // Truncate messages in the target session
478
+ const newMessagesInSession = targetSessionData.messages.slice(0, targetIndexInSession);
479
+ // Update target session file
480
+ this.sessionId = targetSessionId;
481
+ this.rootSessionId = targetSessionData.rootSessionId || targetSessionId;
482
+ this.parentSessionId = targetSessionData.parentSessionId;
483
+ this.transcriptPath = this.computeTranscriptPath();
484
+ await this.rewriteSessionFile(newMessagesInSession);
485
+ // Update in-memory messages to the truncated session messages
486
+ // We do NOT include ancestor messages here to avoid exceeding context limits.
487
+ // The 'compress' block at the start of the session (if any) already summarizes them.
488
+ this.setMessages(newMessagesInSession);
486
489
  // Update saved message count
487
- this.savedMessageCount = newMessages.length;
490
+ this.savedMessageCount = newMessagesInSession.length;
491
+ // Notify session ID change if it changed
492
+ this.callbacks.onSessionIdChange?.(this.sessionId);
488
493
  }
489
494
  /**
490
495
  * Rewrite the session file with the current messages.
@@ -1 +1 @@
1
- {"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
@@ -230,31 +230,24 @@ export class PermissionManager {
230
230
  if (targetPath) {
231
231
  const { isInside, resolvedPath } = this.isInsideSafeZone(targetPath, workdir);
232
232
  if (!isInside) {
233
- this.logger?.warn("File operation outside the Safe Zone in acceptEdits mode", {
233
+ this.logger?.info("File operation outside the Safe Zone in acceptEdits mode, falling back to manual confirmation", {
234
234
  toolName: context.toolName,
235
235
  targetPath,
236
236
  resolvedPath,
237
237
  });
238
- return {
239
- behavior: "deny",
240
- message: `Tool '${context.toolName}' attempted to modify a file outside the Safe Zone: ${targetPath}. Operations outside the Safe Zone always require manual confirmation.`,
241
- };
238
+ // Fall through to normal permission check flow to trigger confirmation prompt
239
+ }
240
+ else {
241
+ this.logger?.debug("Permission automatically accepted for tool in acceptEdits mode", {
242
+ toolName: context.toolName,
243
+ });
244
+ return { behavior: "allow" };
242
245
  }
243
246
  }
244
- this.logger?.debug("Permission automatically accepted for tool in acceptEdits mode", {
245
- toolName: context.toolName,
246
- });
247
- return { behavior: "allow" };
248
247
  }
249
248
  }
250
249
  // 1.3 If plan mode, allow Read-only tools and Edit/Write for plan file
251
250
  if (context.permissionMode === "plan") {
252
- if (context.toolName === BASH_TOOL_NAME) {
253
- return {
254
- behavior: "deny",
255
- message: "Bash commands are not allowed in plan mode.",
256
- };
257
- }
258
251
  const writeTools = [
259
252
  EDIT_TOOL_NAME,
260
253
  MULTI_EDIT_TOOL_NAME,
@@ -368,6 +361,23 @@ export class PermissionManager {
368
361
  toolInput,
369
362
  suggestedPrefix,
370
363
  };
364
+ // Set hidePersistentOption for out-of-bounds file operations
365
+ const fileTools = [
366
+ EDIT_TOOL_NAME,
367
+ MULTI_EDIT_TOOL_NAME,
368
+ DELETE_FILE_TOOL_NAME,
369
+ WRITE_TOOL_NAME,
370
+ ];
371
+ if (fileTools.includes(toolName)) {
372
+ const targetPath = (toolInput?.file_path || toolInput?.target_file);
373
+ const workdir = toolInput?.workdir;
374
+ if (targetPath) {
375
+ const { isInside } = this.isInsideSafeZone(targetPath, workdir);
376
+ if (!isInside) {
377
+ context.hidePersistentOption = true;
378
+ }
379
+ }
380
+ }
371
381
  // Set hidePersistentOption for dangerous or out-of-bounds bash commands
372
382
  if (toolName === BASH_TOOL_NAME && toolInput?.command) {
373
383
  const command = String(toolInput.command);
@@ -9,7 +9,7 @@ export declare class PlanManager {
9
9
  /**
10
10
  * Ensures the plan directory exists and generates a new plan file path with a random name
11
11
  */
12
- getOrGeneratePlanFilePath(): Promise<{
12
+ getOrGeneratePlanFilePath(seed?: string): Promise<{
13
13
  path: string;
14
14
  name: string;
15
15
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"planManager.d.ts","sourceRoot":"","sources":["../../src/managers/planManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,OAAO,CAAS;gBAEJ,MAAM,CAAC,EAAE,MAAM,YAAA;IAInC;;OAEG;IACU,yBAAyB,IAAI,OAAO,CAAC;QAChD,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAgBF;;OAEG;IACI,UAAU,IAAI,MAAM;CAG5B"}
1
+ {"version":3,"file":"planManager.d.ts","sourceRoot":"","sources":["../../src/managers/planManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C;;GAEG;AACH,qBAAa,WAAW;IAGV,OAAO,CAAC,MAAM,CAAC;IAF3B,OAAO,CAAC,OAAO,CAAS;gBAEJ,MAAM,CAAC,EAAE,MAAM,YAAA;IAInC;;OAEG;IACU,yBAAyB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7D,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAgBF;;OAEG;IACI,UAAU,IAAI,MAAM;CAG5B"}
@@ -13,7 +13,7 @@ export class PlanManager {
13
13
  /**
14
14
  * Ensures the plan directory exists and generates a new plan file path with a random name
15
15
  */
16
- async getOrGeneratePlanFilePath() {
16
+ async getOrGeneratePlanFilePath(seed) {
17
17
  try {
18
18
  await fs.mkdir(this.planDir, { recursive: true });
19
19
  }
@@ -21,7 +21,7 @@ export class PlanManager {
21
21
  this.logger?.error(`Failed to create plan directory: ${this.planDir}`, error);
22
22
  throw error;
23
23
  }
24
- const name = generateRandomName();
24
+ const name = generateRandomName(seed);
25
25
  const filePath = path.join(this.planDir, `${name}.md`);
26
26
  this.logger?.info(`Generated plan file path: ${filePath}`);
27
27
  return { path: filePath, name };
@@ -1 +1 @@
1
- {"version":3,"file":"reversionManager.d.ts","sourceRoot":"","sources":["../../src/managers/reversionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,gBAAgB,EAAE,gBAAgB;IAI9C;;;OAGG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GACxC,OAAO,CAAC,MAAM,CAAC;IAuBlB;;;OAGG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GACxC,OAAO,CAAC,MAAM,CAAC;IAIlB;;;OAGG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD;;OAEG;IACH,6BAA6B,IAAI,YAAY,EAAE;IAM/C;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;OAIG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,OAAO,mBAAmB,EAAE,OAAO,EAAE,GACjD,OAAO,CAAC,MAAM,CAAC;CA6CnB"}
1
+ {"version":3,"file":"reversionManager.d.ts","sourceRoot":"","sources":["../../src/managers/reversionManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,gBAAgB,EAAE,gBAAgB;IAI9C;;;OAGG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GACxC,OAAO,CAAC,MAAM,CAAC;IAuBlB;;;OAGG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GACxC,OAAO,CAAC,MAAM,CAAC;IAIlB;;;OAGG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD;;OAEG;IACH,6BAA6B,IAAI,YAAY,EAAE;IAM/C;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;OAIG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,OAAO,mBAAmB,EAAE,OAAO,EAAE,GACjD,OAAO,CAAC,MAAM,CAAC;CAqEnB"}
@@ -89,10 +89,15 @@ export class ReversionManager {
89
89
  // Revert in reverse chronological order (LIFO)
90
90
  const sortedSnapshots = snapshots.sort((a, b) => b.timestamp - a.timestamp);
91
91
  let revertedCount = 0;
92
+ const affectedTaskListIds = new Set();
92
93
  for (const snapshot of sortedSnapshots) {
93
94
  try {
94
- if (!snapshot.snapshotPath) {
95
- // File didn't exist before, so delete it
95
+ if (snapshot.operation === "create") {
96
+ // For 'create' operations, we should hard delete the file upon reversion
97
+ await fs.rm(snapshot.filePath, { force: true });
98
+ }
99
+ else if (!snapshot.snapshotPath) {
100
+ // Fallback for older snapshots or if snapshotPath is missing
96
101
  await fs.rm(snapshot.filePath, { force: true });
97
102
  }
98
103
  else {
@@ -107,12 +112,28 @@ export class ReversionManager {
107
112
  await fs.rm(snapshot.filePath, { force: true });
108
113
  }
109
114
  }
115
+ // Check if this is a task file and track the task list ID
116
+ if (snapshot.filePath.includes("/.wave/tasks/")) {
117
+ const parts = snapshot.filePath.split("/.wave/tasks/");
118
+ if (parts.length > 1) {
119
+ const taskListId = parts[1].split("/")[0];
120
+ if (taskListId) {
121
+ affectedTaskListIds.add(taskListId);
122
+ }
123
+ }
124
+ }
110
125
  revertedCount++;
111
126
  }
112
127
  catch (error) {
113
128
  console.error(`Failed to revert file ${snapshot.filePath}:`, error);
114
129
  }
115
130
  }
131
+ // Notify TaskManager if any task lists were affected
132
+ // Note: In the current architecture, TaskManager is managed by Agent and
133
+ // listens for file changes if it's a foreground process, or we might need
134
+ // to explicitly trigger a refresh. Since ReversionManager doesn't have
135
+ // a direct reference to TaskManager, we rely on the fact that TaskManager
136
+ // will see the file system changes or be refreshed by the Agent/UI.
116
137
  return revertedCount;
117
138
  }
118
139
  }
@@ -1,11 +1,13 @@
1
1
  import type { MessageManager } from "./messageManager.js";
2
2
  import type { AIManager } from "./aiManager.js";
3
3
  import type { BackgroundTaskManager } from "./backgroundTaskManager.js";
4
+ import type { TaskManager } from "../services/taskManager.js";
4
5
  import type { SlashCommand, CustomSlashCommand, Logger } from "../types/index.js";
5
6
  export interface SlashCommandManagerOptions {
6
7
  messageManager: MessageManager;
7
8
  aiManager: AIManager;
8
9
  backgroundTaskManager: BackgroundTaskManager;
10
+ taskManager: TaskManager;
9
11
  workdir: string;
10
12
  logger?: Logger;
11
13
  }
@@ -15,6 +17,7 @@ export declare class SlashCommandManager {
15
17
  private messageManager;
16
18
  private aiManager;
17
19
  private backgroundTaskManager;
20
+ private taskManager;
18
21
  private workdir;
19
22
  private logger?;
20
23
  constructor(options: SlashCommandManagerOptions);
@@ -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,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,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,qBAAqB,CAAwB;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAW/C,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IAwDP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnD;;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,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,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,qBAAqB,CAAwB;IACrD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAY/C,OAAO,CAAC,yBAAyB;IAsCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IAwDP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnD;;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"}
@@ -3,7 +3,7 @@ import { substituteCommandParameters, parseSlashCommandInput, hasParameterPlaceh
3
3
  import { parseBashCommands, replaceBashCommandsWithOutput, } from "../utils/markdownParser.js";
4
4
  import { exec } from "child_process";
5
5
  import { promisify } from "util";
6
- import { INIT_PROMPT } from "../constants/prompts.js";
6
+ import { INIT_PROMPT } from "../prompts/index.js";
7
7
  const execAsync = promisify(exec);
8
8
  export class SlashCommandManager {
9
9
  constructor(options) {
@@ -12,6 +12,7 @@ export class SlashCommandManager {
12
12
  this.messageManager = options.messageManager;
13
13
  this.aiManager = options.aiManager;
14
14
  this.backgroundTaskManager = options.backgroundTaskManager;
15
+ this.taskManager = options.taskManager;
15
16
  this.workdir = options.workdir;
16
17
  this.logger = options.logger;
17
18
  this.initializeBuiltinCommands();
@@ -26,8 +27,12 @@ export class SlashCommandManager {
26
27
  handler: () => {
27
28
  // Clear chat messages
28
29
  this.messageManager.clearMessages();
29
- // Clear terminal screen
30
- process.stdout.write("\x1Bc");
30
+ // Reset task list if WAVE_TASK_LIST_ID is not set
31
+ if (!process.env.WAVE_TASK_LIST_ID) {
32
+ const newTaskListId = this.messageManager.getRootSessionId();
33
+ this.taskManager.setTaskListId(newTaskListId);
34
+ this.taskManager.emit("tasksChange", newTaskListId);
35
+ }
31
36
  },
32
37
  });
33
38
  // Register built-in init command
@@ -1,13 +1,12 @@
1
1
  import type { MemoryRuleManager } from "./MemoryRuleManager.js";
2
2
  import type { SubagentConfiguration } from "../utils/subagentParser.js";
3
3
  import type { Message, Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
4
- import type { SessionData } from "../services/session.js";
5
4
  import { AIManager } from "./aiManager.js";
6
5
  import { MessageManager } from "./messageManager.js";
7
6
  import { ToolManager } from "./toolManager.js";
8
7
  import { HookManager } from "./hookManager.js";
9
- import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
10
8
  import { BackgroundTaskManager } from "./backgroundTaskManager.js";
9
+ import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
11
10
  export interface SubagentManagerCallbacks {
12
11
  /** Triggered when subagent adds user message */
13
12
  onSubagentUserMessageAdded?: (subagentId: string, params: UserMessageParams) => void;
@@ -21,6 +20,8 @@ export interface SubagentManagerCallbacks {
21
20
  onSubagentToolBlockUpdated?: (subagentId: string, params: AgentToolBlockUpdateParams) => void;
22
21
  /** Triggered when subagent messages change */
23
22
  onSubagentMessagesChange?: (subagentId: string, messages: Message[]) => void;
23
+ /** Triggered when subagent latest total tokens change */
24
+ onSubagentLatestTotalTokensChange?: (subagentId: string, tokens: number) => void;
24
25
  }
25
26
  export interface SubagentInstance {
26
27
  subagentId: string;
@@ -30,13 +31,15 @@ export interface SubagentInstance {
30
31
  toolManager: ToolManager;
31
32
  status: "initializing" | "active" | "completed" | "error" | "aborted";
32
33
  messages: Message[];
34
+ lastTools: string[];
33
35
  subagentType: string;
34
36
  backgroundTaskId?: string;
37
+ onUpdate?: () => void;
35
38
  }
36
39
  export interface SubagentManagerOptions {
37
40
  workdir: string;
38
41
  parentToolManager: ToolManager;
39
- parentMessageManager: MessageManager;
42
+ taskManager: import("../services/taskManager.js").TaskManager;
40
43
  callbacks?: SubagentManagerCallbacks;
41
44
  logger?: Logger;
42
45
  getGatewayConfig: () => GatewayConfig;
@@ -53,7 +56,7 @@ export declare class SubagentManager {
53
56
  private cachedConfigurations;
54
57
  private workdir;
55
58
  private parentToolManager;
56
- private parentMessageManager;
59
+ private taskManager;
57
60
  private callbacks?;
58
61
  private logger?;
59
62
  private getGatewayConfig;
@@ -88,7 +91,7 @@ export declare class SubagentManager {
88
91
  description: string;
89
92
  prompt: string;
90
93
  subagent_type: string;
91
- }, runInBackground?: boolean): Promise<SubagentInstance>;
94
+ }, runInBackground?: boolean, onUpdate?: () => void): Promise<SubagentInstance>;
92
95
  /**
93
96
  * Execute task using subagent instance
94
97
  *
@@ -122,15 +125,6 @@ export declare class SubagentManager {
122
125
  * Clean up all instances (for session end)
123
126
  */
124
127
  cleanup(): void;
125
- /**
126
- * Restore subagent instances from saved session data
127
- * This method is called during agent initialization to restore previous subagent states
128
- */
129
- restoreSubagentSessions(subagentSessions: Array<{
130
- sessionData: SessionData;
131
- subagentId: string;
132
- configuration: SubagentConfiguration;
133
- }>): Promise<void>;
134
128
  /**
135
129
  * Create subagent callbacks for a specific subagent ID
136
130
  * Extracted to reuse in both create and restore flows
@@ -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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"}