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.
- package/dist/agent.d.ts +92 -23
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +340 -137
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/managers/aiManager.d.ts +14 -36
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +74 -77
- package/dist/managers/backgroundBashManager.d.ts.map +1 -1
- package/dist/managers/backgroundBashManager.js +4 -3
- package/dist/managers/hookManager.d.ts +3 -8
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +39 -29
- package/dist/managers/liveConfigManager.d.ts +55 -18
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +372 -90
- package/dist/managers/lspManager.d.ts +43 -0
- package/dist/managers/lspManager.d.ts.map +1 -0
- package/dist/managers/lspManager.js +326 -0
- package/dist/managers/messageManager.d.ts +8 -16
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +52 -74
- package/dist/managers/permissionManager.d.ts +66 -0
- package/dist/managers/permissionManager.d.ts.map +1 -0
- package/dist/managers/permissionManager.js +208 -0
- package/dist/managers/skillManager.d.ts +1 -0
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +2 -1
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +0 -1
- package/dist/managers/subagentManager.d.ts +8 -23
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +97 -117
- package/dist/managers/toolManager.d.ts +38 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +66 -2
- package/dist/services/aiService.d.ts +3 -1
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +123 -30
- package/dist/services/configurationService.d.ts +116 -0
- package/dist/services/configurationService.d.ts.map +1 -0
- package/dist/services/configurationService.js +585 -0
- package/dist/services/fileWatcher.d.ts.map +1 -1
- package/dist/services/fileWatcher.js +5 -6
- package/dist/services/hook.d.ts +7 -124
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +46 -458
- package/dist/services/jsonlHandler.d.ts +24 -15
- package/dist/services/jsonlHandler.d.ts.map +1 -1
- package/dist/services/jsonlHandler.js +67 -88
- package/dist/services/memory.d.ts +0 -9
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +2 -49
- package/dist/services/session.d.ts +82 -33
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +275 -181
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +72 -13
- package/dist/tools/deleteFileTool.d.ts.map +1 -1
- package/dist/tools/deleteFileTool.js +25 -0
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +30 -6
- package/dist/tools/lspTool.d.ts +6 -0
- package/dist/tools/lspTool.d.ts.map +1 -0
- package/dist/tools/lspTool.js +589 -0
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +26 -7
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +111 -2
- package/dist/tools/skillTool.js +2 -2
- package/dist/tools/todoWriteTool.d.ts.map +1 -1
- package/dist/tools/todoWriteTool.js +23 -0
- package/dist/tools/types.d.ts +11 -8
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +25 -9
- package/dist/types/commands.d.ts +0 -1
- package/dist/types/commands.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/configuration.d.ts +69 -0
- package/dist/types/configuration.d.ts.map +1 -0
- package/dist/types/configuration.js +8 -0
- package/dist/types/core.d.ts +10 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/environment.d.ts +41 -0
- package/dist/types/environment.d.ts.map +1 -1
- package/dist/types/fileSearch.d.ts +5 -0
- package/dist/types/fileSearch.d.ts.map +1 -0
- package/dist/types/fileSearch.js +1 -0
- package/dist/types/hooks.d.ts +11 -2
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +1 -7
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +5 -0
- package/dist/types/lsp.d.ts +90 -0
- package/dist/types/lsp.d.ts.map +1 -0
- package/dist/types/lsp.js +4 -0
- package/dist/types/messaging.d.ts +6 -11
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +35 -0
- package/dist/types/permissions.d.ts.map +1 -0
- package/dist/types/permissions.js +12 -0
- package/dist/types/session.d.ts +1 -6
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/skills.d.ts +1 -0
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/tools.d.ts +35 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +4 -0
- package/dist/utils/abortUtils.d.ts +34 -0
- package/dist/utils/abortUtils.d.ts.map +1 -0
- package/dist/utils/abortUtils.js +92 -0
- package/dist/utils/bashHistory.d.ts +4 -0
- package/dist/utils/bashHistory.d.ts.map +1 -1
- package/dist/utils/bashHistory.js +21 -4
- package/dist/utils/builtinSubagents.d.ts +7 -0
- package/dist/utils/builtinSubagents.d.ts.map +1 -0
- package/dist/utils/builtinSubagents.js +65 -0
- package/dist/utils/cacheControlUtils.d.ts +8 -33
- package/dist/utils/cacheControlUtils.d.ts.map +1 -1
- package/dist/utils/cacheControlUtils.js +83 -126
- package/dist/utils/constants.d.ts +0 -12
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +1 -13
- package/dist/utils/convertMessagesForAPI.d.ts +2 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +33 -14
- package/dist/utils/fileSearch.d.ts +14 -0
- package/dist/utils/fileSearch.d.ts.map +1 -0
- package/dist/utils/fileSearch.js +88 -0
- package/dist/utils/fileUtils.d.ts +14 -2
- package/dist/utils/fileUtils.d.ts.map +1 -1
- package/dist/utils/fileUtils.js +101 -17
- package/dist/utils/globalLogger.d.ts +0 -14
- package/dist/utils/globalLogger.d.ts.map +1 -1
- package/dist/utils/globalLogger.js +0 -16
- package/dist/utils/largeOutputHandler.d.ts +15 -0
- package/dist/utils/largeOutputHandler.d.ts.map +1 -0
- package/dist/utils/largeOutputHandler.js +40 -0
- package/dist/utils/markdownParser.d.ts.map +1 -1
- package/dist/utils/markdownParser.js +1 -17
- package/dist/utils/messageOperations.d.ts +1 -11
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +7 -24
- package/dist/utils/pathEncoder.d.ts +4 -0
- package/dist/utils/pathEncoder.d.ts.map +1 -1
- package/dist/utils/pathEncoder.js +16 -9
- package/dist/utils/subagentParser.d.ts +2 -2
- package/dist/utils/subagentParser.d.ts.map +1 -1
- package/dist/utils/subagentParser.js +10 -7
- package/dist/utils/tokenEstimator.d.ts +39 -0
- package/dist/utils/tokenEstimator.d.ts.map +1 -0
- package/dist/utils/tokenEstimator.js +55 -0
- package/package.json +5 -8
- package/src/agent.ts +460 -216
- package/src/index.ts +2 -0
- package/src/managers/aiManager.ts +107 -111
- package/src/managers/backgroundBashManager.ts +4 -3
- package/src/managers/hookManager.ts +44 -39
- package/src/managers/liveConfigManager.ts +524 -138
- package/src/managers/lspManager.ts +434 -0
- package/src/managers/messageManager.ts +73 -103
- package/src/managers/permissionManager.ts +276 -0
- package/src/managers/skillManager.ts +3 -1
- package/src/managers/slashCommandManager.ts +1 -2
- package/src/managers/subagentManager.ts +116 -159
- package/src/managers/toolManager.ts +95 -3
- package/src/services/aiService.ts +207 -26
- package/src/services/configurationService.ts +762 -0
- package/src/services/fileWatcher.ts +5 -6
- package/src/services/hook.ts +50 -631
- package/src/services/jsonlHandler.ts +84 -100
- package/src/services/memory.ts +2 -59
- package/src/services/session.ts +338 -213
- package/src/tools/bashTool.ts +89 -16
- package/src/tools/deleteFileTool.ts +36 -0
- package/src/tools/editTool.ts +41 -7
- package/src/tools/lspTool.ts +760 -0
- package/src/tools/multiEditTool.ts +37 -8
- package/src/tools/readTool.ts +125 -2
- package/src/tools/skillTool.ts +2 -2
- package/src/tools/todoWriteTool.ts +33 -1
- package/src/tools/types.ts +15 -9
- package/src/tools/writeTool.ts +36 -10
- package/src/types/commands.ts +0 -1
- package/src/types/config.ts +5 -0
- package/src/types/configuration.ts +73 -0
- package/src/types/core.ts +11 -0
- package/src/types/environment.ts +44 -0
- package/src/types/fileSearch.ts +4 -0
- package/src/types/hooks.ts +14 -11
- package/src/types/index.ts +5 -0
- package/src/types/lsp.ts +96 -0
- package/src/types/messaging.ts +8 -13
- package/src/types/permissions.ts +48 -0
- package/src/types/session.ts +3 -8
- package/src/types/skills.ts +1 -0
- package/src/types/tools.ts +38 -0
- package/src/utils/abortUtils.ts +118 -0
- package/src/utils/bashHistory.ts +28 -4
- package/src/utils/builtinSubagents.ts +71 -0
- package/src/utils/cacheControlUtils.ts +106 -171
- package/src/utils/constants.ts +1 -16
- package/src/utils/convertMessagesForAPI.ts +38 -14
- package/src/utils/fileSearch.ts +107 -0
- package/src/utils/fileUtils.ts +114 -19
- package/src/utils/globalLogger.ts +0 -17
- package/src/utils/largeOutputHandler.ts +55 -0
- package/src/utils/markdownParser.ts +1 -19
- package/src/utils/messageOperations.ts +7 -35
- package/src/utils/pathEncoder.ts +24 -9
- package/src/utils/subagentParser.ts +11 -8
- package/src/utils/tokenEstimator.ts +68 -0
- package/dist/constants/events.d.ts +0 -28
- package/dist/constants/events.d.ts.map +0 -1
- package/dist/constants/events.js +0 -27
- package/dist/services/configurationWatcher.d.ts +0 -120
- package/dist/services/configurationWatcher.d.ts.map +0 -1
- package/dist/services/configurationWatcher.js +0 -439
- package/dist/services/memoryStore.d.ts +0 -81
- package/dist/services/memoryStore.d.ts.map +0 -1
- package/dist/services/memoryStore.js +0 -200
- package/dist/types/memoryStore.d.ts +0 -82
- package/dist/types/memoryStore.d.ts.map +0 -1
- package/dist/types/memoryStore.js +0 -7
- package/dist/utils/configResolver.d.ts +0 -65
- package/dist/utils/configResolver.d.ts.map +0 -1
- package/dist/utils/configResolver.js +0 -210
- package/src/constants/events.ts +0 -38
- package/src/services/configurationWatcher.ts +0 -622
- package/src/services/memoryStore.ts +0 -279
- package/src/types/memoryStore.ts +0 -94
- package/src/utils/configResolver.ts +0 -302
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage,
|
|
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 {
|
|
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
|
|
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,
|
|
209
|
-
const
|
|
210
|
-
? Object.fromEntries(Object.entries(
|
|
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,
|
|
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
|
-
|
|
218
|
-
if (!
|
|
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
|
|
226
|
-
...(message.
|
|
177
|
+
const mergedAdditionalFields = {
|
|
178
|
+
...(message.additionalFields || {}),
|
|
227
179
|
};
|
|
228
|
-
for (const [key, value] of Object.entries(
|
|
180
|
+
for (const [key, value] of Object.entries(additionalFields)) {
|
|
229
181
|
if (value === undefined) {
|
|
230
182
|
continue;
|
|
231
183
|
}
|
|
232
|
-
|
|
184
|
+
mergedAdditionalFields[key] = value;
|
|
233
185
|
}
|
|
234
|
-
if (Object.keys(
|
|
186
|
+
if (Object.keys(mergedAdditionalFields).length === 0) {
|
|
235
187
|
return;
|
|
236
188
|
}
|
|
237
|
-
message.
|
|
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.
|
|
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
|
+
}
|
|
@@ -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;
|
|
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(
|
|
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;
|
|
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"}
|
|
@@ -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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
|
52
|
-
private
|
|
53
|
-
private
|
|
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":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|