wave-agent-sdk 0.0.2 → 0.0.3
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 +5 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +46 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +4 -7
- package/dist/managers/messageManager.d.ts +8 -0
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +26 -2
- package/dist/managers/skillManager.d.ts +4 -5
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +6 -82
- package/dist/managers/subagentManager.d.ts +96 -0
- package/dist/managers/subagentManager.d.ts.map +1 -0
- package/dist/managers/subagentManager.js +261 -0
- package/dist/managers/toolManager.d.ts +33 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +43 -5
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +40 -14
- package/dist/tools/grepTool.d.ts.map +1 -1
- package/dist/tools/grepTool.js +8 -6
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +36 -6
- package/dist/tools/skillTool.d.ts +8 -0
- package/dist/tools/skillTool.d.ts.map +1 -0
- package/dist/tools/skillTool.js +72 -0
- package/dist/tools/taskTool.d.ts +8 -0
- package/dist/tools/taskTool.d.ts.map +1 -0
- package/dist/tools/taskTool.js +109 -0
- package/dist/tools/todoWriteTool.d.ts +6 -0
- package/dist/tools/todoWriteTool.d.ts.map +1 -0
- package/dist/tools/todoWriteTool.js +203 -0
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/fileFormat.d.ts +17 -0
- package/dist/utils/fileFormat.d.ts.map +1 -0
- package/dist/utils/fileFormat.js +35 -0
- package/dist/utils/messageOperations.d.ts +18 -0
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +43 -0
- package/dist/utils/subagentParser.d.ts +19 -0
- package/dist/utils/subagentParser.d.ts.map +1 -0
- package/dist/utils/subagentParser.js +159 -0
- package/package.json +1 -1
- package/src/agent.ts +53 -3
- package/src/index.ts +0 -1
- package/src/managers/aiManager.ts +5 -8
- package/src/managers/messageManager.ts +55 -1
- package/src/managers/skillManager.ts +7 -96
- package/src/managers/subagentManager.ts +368 -0
- package/src/managers/toolManager.ts +50 -5
- package/src/services/aiService.ts +43 -15
- package/src/tools/grepTool.ts +9 -6
- package/src/tools/readTool.ts +40 -6
- package/src/tools/skillTool.ts +82 -0
- package/src/tools/taskTool.ts +128 -0
- package/src/tools/todoWriteTool.ts +232 -0
- package/src/types.ts +10 -1
- package/src/utils/fileFormat.ts +40 -0
- package/src/utils/messageOperations.ts +80 -0
- package/src/utils/subagentParser.ts +223 -0
package/dist/agent.d.ts
CHANGED
|
@@ -31,12 +31,12 @@ export interface AgentCallbacks extends MessageManagerCallbacks, BackgroundBashM
|
|
|
31
31
|
export declare class Agent {
|
|
32
32
|
private messageManager;
|
|
33
33
|
private aiManager;
|
|
34
|
-
private callbacks;
|
|
35
34
|
private bashManager;
|
|
36
35
|
private backgroundBashManager;
|
|
37
36
|
private logger?;
|
|
38
37
|
private toolManager;
|
|
39
38
|
private mcpManager;
|
|
39
|
+
private subagentManager;
|
|
40
40
|
private slashCommandManager;
|
|
41
41
|
private hookManager;
|
|
42
42
|
private workdir;
|
|
@@ -98,6 +98,10 @@ export declare class Agent {
|
|
|
98
98
|
abortBashCommand(): void;
|
|
99
99
|
/** Interrupt slash command execution */
|
|
100
100
|
abortSlashCommand(): void;
|
|
101
|
+
/** Interrupt all subagent execution */
|
|
102
|
+
abortSubagents(): void;
|
|
103
|
+
/** Interrupt specific subagent execution */
|
|
104
|
+
abortSubagent(subagentId: string): boolean;
|
|
101
105
|
/** Destroy managers, clean up resources */
|
|
102
106
|
destroy(): Promise<void>;
|
|
103
107
|
sendMessage(content: string, images?: Array<{
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { MessageManager, } from "./managers/messageManager.js";
|
|
2
2
|
import { AIManager } from "./managers/aiManager.js";
|
|
3
3
|
import { ToolManager } from "./managers/toolManager.js";
|
|
4
|
+
import { SubagentManager } from "./managers/subagentManager.js";
|
|
4
5
|
import * as memory from "./services/memory.js";
|
|
5
6
|
import { McpManager } from "./managers/mcpManager.js";
|
|
6
7
|
import { BashManager } from "./managers/bashManager.js";
|
|
@@ -9,6 +10,7 @@ import { SlashCommandManager } from "./managers/slashCommandManager.js";
|
|
|
9
10
|
import { HookManager } from "./hooks/index.js";
|
|
10
11
|
import { configResolver } from "./utils/configResolver.js";
|
|
11
12
|
import { configValidator } from "./utils/configValidator.js";
|
|
13
|
+
import { SkillManager } from "./managers/skillManager.js";
|
|
12
14
|
export class Agent {
|
|
13
15
|
/**
|
|
14
16
|
* Agent constructor - handles configuration resolution and validation
|
|
@@ -29,7 +31,6 @@ export class Agent {
|
|
|
29
31
|
configValidator.validateGatewayConfig(gatewayConfig);
|
|
30
32
|
configValidator.validateTokenLimit(tokenLimit);
|
|
31
33
|
configValidator.validateModelConfig(modelConfig.agentModel, modelConfig.fastModel);
|
|
32
|
-
this.callbacks = callbacks;
|
|
33
34
|
this.logger = logger; // Save the passed logger
|
|
34
35
|
this.workdir = workdir || process.cwd(); // Set working directory, default to current working directory
|
|
35
36
|
this.systemPrompt = systemPrompt; // Save custom system prompt
|
|
@@ -42,7 +43,10 @@ export class Agent {
|
|
|
42
43
|
workdir: this.workdir,
|
|
43
44
|
});
|
|
44
45
|
this.mcpManager = new McpManager({ callbacks, logger: this.logger }); // Initialize MCP manager
|
|
45
|
-
this.toolManager = new ToolManager({
|
|
46
|
+
this.toolManager = new ToolManager({
|
|
47
|
+
mcpManager: this.mcpManager,
|
|
48
|
+
logger: this.logger,
|
|
49
|
+
}); // Initialize tool registry, pass MCP manager
|
|
46
50
|
this.hookManager = new HookManager(this.workdir, undefined, undefined, this.logger); // Initialize hooks manager
|
|
47
51
|
// Initialize MessageManager
|
|
48
52
|
this.messageManager = new MessageManager({
|
|
@@ -50,6 +54,17 @@ export class Agent {
|
|
|
50
54
|
workdir: this.workdir,
|
|
51
55
|
logger: this.logger,
|
|
52
56
|
});
|
|
57
|
+
// Initialize subagent manager with all dependencies in constructor
|
|
58
|
+
// IMPORTANT: Must be initialized AFTER MessageManager
|
|
59
|
+
this.subagentManager = new SubagentManager({
|
|
60
|
+
workdir: this.workdir,
|
|
61
|
+
parentToolManager: this.toolManager,
|
|
62
|
+
parentMessageManager: this.messageManager,
|
|
63
|
+
logger: this.logger,
|
|
64
|
+
gatewayConfig,
|
|
65
|
+
modelConfig,
|
|
66
|
+
tokenLimit,
|
|
67
|
+
});
|
|
53
68
|
// Initialize AI manager with resolved configuration
|
|
54
69
|
this.aiManager = new AIManager({
|
|
55
70
|
messageManager: this.messageManager,
|
|
@@ -135,6 +150,23 @@ export class Agent {
|
|
|
135
150
|
}
|
|
136
151
|
/** Private initialization method, handles async initialization logic */
|
|
137
152
|
async initialize(options) {
|
|
153
|
+
// Initialize managers first
|
|
154
|
+
try {
|
|
155
|
+
// Initialize SkillManager
|
|
156
|
+
const skillManager = new SkillManager({ logger: this.logger });
|
|
157
|
+
await skillManager.initialize();
|
|
158
|
+
// Initialize SubagentManager (load and cache configurations)
|
|
159
|
+
await this.subagentManager.initialize();
|
|
160
|
+
// Initialize built-in tools with dependencies
|
|
161
|
+
this.toolManager.initializeBuiltInTools({
|
|
162
|
+
subagentManager: this.subagentManager,
|
|
163
|
+
skillManager: skillManager,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
this.logger?.error("Failed to initialize managers and tools:", error);
|
|
168
|
+
// Don't throw error to prevent app startup failure
|
|
169
|
+
}
|
|
138
170
|
// Initialize MCP servers with auto-connect
|
|
139
171
|
try {
|
|
140
172
|
await this.mcpManager.initialize(this.workdir, true);
|
|
@@ -182,6 +214,7 @@ export class Agent {
|
|
|
182
214
|
this.abortAIMessage();
|
|
183
215
|
this.abortBashCommand();
|
|
184
216
|
this.abortSlashCommand();
|
|
217
|
+
this.abortSubagents();
|
|
185
218
|
}
|
|
186
219
|
/** Add to input history */
|
|
187
220
|
addToInputHistory(input) {
|
|
@@ -195,16 +228,27 @@ export class Agent {
|
|
|
195
228
|
abortSlashCommand() {
|
|
196
229
|
this.slashCommandManager.abortCurrentCommand();
|
|
197
230
|
}
|
|
231
|
+
/** Interrupt all subagent execution */
|
|
232
|
+
abortSubagents() {
|
|
233
|
+
this.subagentManager.abortAllInstances();
|
|
234
|
+
}
|
|
235
|
+
/** Interrupt specific subagent execution */
|
|
236
|
+
abortSubagent(subagentId) {
|
|
237
|
+
return this.subagentManager.abortInstance(subagentId);
|
|
238
|
+
}
|
|
198
239
|
/** Destroy managers, clean up resources */
|
|
199
240
|
async destroy() {
|
|
200
241
|
this.messageManager.saveSession();
|
|
201
242
|
this.abortAIMessage();
|
|
202
243
|
this.abortBashCommand();
|
|
203
244
|
this.abortSlashCommand();
|
|
245
|
+
this.abortSubagents();
|
|
204
246
|
// Cleanup background bash manager
|
|
205
247
|
this.backgroundBashManager.cleanup();
|
|
206
248
|
// Cleanup MCP connections
|
|
207
249
|
await this.mcpManager.cleanup();
|
|
250
|
+
// Cleanup subagent manager
|
|
251
|
+
this.subagentManager.cleanup();
|
|
208
252
|
}
|
|
209
253
|
async sendMessage(content, images) {
|
|
210
254
|
try {
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export * from "./utils/mcpUtils.js";
|
|
|
9
9
|
export * from "./utils/messageOperations.js";
|
|
10
10
|
export * from "./utils/path.js";
|
|
11
11
|
export * from "./utils/stringUtils.js";
|
|
12
|
-
export * from "./utils/markdownParser.js";
|
|
13
12
|
export * from "./utils/customCommands.js";
|
|
14
13
|
export * from "./hooks/index.js";
|
|
15
14
|
export * from "./types.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,YAAY,CAAC;AAG3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,YAAY,CAAC;AAG3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,7 +12,6 @@ export * from "./utils/mcpUtils.js";
|
|
|
12
12
|
export * from "./utils/messageOperations.js";
|
|
13
13
|
export * from "./utils/path.js";
|
|
14
14
|
export * from "./utils/stringUtils.js";
|
|
15
|
-
export * from "./utils/markdownParser.js";
|
|
16
15
|
export * from "./utils/customCommands.js";
|
|
17
16
|
// Export hooks system
|
|
18
17
|
export * from "./hooks/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACb,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB;IAgBrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAYvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAqBf,8BAA8B;IAoDrC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOxC,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACL,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,SAAS;IACb,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,gBAAgB;IAgBrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAYvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAqBf,8BAA8B;IAoDrC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOxC,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,GACL,OAAO,CAAC,IAAI,CAAC;IA+PhB;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;YACW,sBAAsB;IA0CpC;;OAEG;YACW,uBAAuB;CA2CtC"}
|
|
@@ -309,13 +309,10 @@ export class AIManager {
|
|
|
309
309
|
// Only clear loading state for the initial call
|
|
310
310
|
if (recursionDepth === 0) {
|
|
311
311
|
this.setIsLoading(false);
|
|
312
|
-
// Save session
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
// Execute Stop hooks when AI response cycle completes
|
|
317
|
-
await this.executeStopHooks();
|
|
318
|
-
})();
|
|
312
|
+
// Save session before executing Stop hooks
|
|
313
|
+
await this.messageManager.saveSession();
|
|
314
|
+
// Execute Stop hooks when AI response cycle completes
|
|
315
|
+
await this.executeStopHooks();
|
|
319
316
|
}
|
|
320
317
|
}
|
|
321
318
|
}
|
|
@@ -17,9 +17,12 @@ export interface MessageManagerCallbacks {
|
|
|
17
17
|
onCompressBlockAdded?: (insertIndex: number, content: string) => void;
|
|
18
18
|
onCompressionStateChange?: (isCompressing: boolean) => void;
|
|
19
19
|
onMemoryBlockAdded?: (content: string, success: boolean, type: "project" | "user", storagePath: string) => void;
|
|
20
|
+
onCustomCommandAdded?: (commandName: string, content: string, originalInput?: string) => void;
|
|
20
21
|
onAddCommandOutputMessage?: (command: string) => void;
|
|
21
22
|
onUpdateCommandOutputMessage?: (command: string, output: string) => void;
|
|
22
23
|
onCompleteCommandMessage?: (command: string, exitCode: number) => void;
|
|
24
|
+
onSubAgentBlockAdded?: (subagentId: string) => void;
|
|
25
|
+
onSubAgentBlockUpdated?: (subagentId: string, messages: Message[]) => void;
|
|
23
26
|
}
|
|
24
27
|
export interface MessageManagerOptions {
|
|
25
28
|
callbacks: MessageManagerCallbacks;
|
|
@@ -81,5 +84,10 @@ export declare class MessageManager {
|
|
|
81
84
|
addCommandOutputMessage(command: string): void;
|
|
82
85
|
updateCommandOutputMessage(command: string, output: string): void;
|
|
83
86
|
completeCommandMessage(command: string, exitCode: number): void;
|
|
87
|
+
addSubagentBlock(subagentId: string, subagentName: string, status?: "active" | "completed" | "error", subagentMessages?: Message[]): void;
|
|
88
|
+
updateSubagentBlock(subagentId: string, updates: Partial<{
|
|
89
|
+
status: "active" | "completed" | "error" | "aborted";
|
|
90
|
+
messages: Message[];
|
|
91
|
+
}>): void;
|
|
84
92
|
}
|
|
85
93
|
//# sourceMappingURL=messageManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
|
-
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addDiffBlockToMessage, addUserMessageToMessages, extractUserInputHistory, addMemoryBlockToMessage, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, } from "../utils/messageOperations.js";
|
|
2
|
+
import { addAssistantMessageToMessages, updateToolBlockInMessage, addErrorBlockToMessage, addDiffBlockToMessage, addUserMessageToMessages, extractUserInputHistory, addMemoryBlockToMessage, addCommandOutputMessage, updateCommandOutputInMessage, completeCommandInMessage, addSubagentBlockToMessage, updateSubagentBlockInMessage, } from "../utils/messageOperations.js";
|
|
3
3
|
import { cleanupExpiredSessions, getLatestSession, loadSession, saveSession, getSessionFilePath, } from "../services/session.js";
|
|
4
4
|
export class MessageManager {
|
|
5
5
|
constructor(options) {
|
|
@@ -155,7 +155,7 @@ export class MessageManager {
|
|
|
155
155
|
},
|
|
156
156
|
});
|
|
157
157
|
this.setMessages(newMessages);
|
|
158
|
-
this.callbacks.
|
|
158
|
+
this.callbacks.onCustomCommandAdded?.(commandName, content, originalInput);
|
|
159
159
|
}
|
|
160
160
|
addAssistantMessage(content, toolCalls) {
|
|
161
161
|
const newMessages = addAssistantMessageToMessages(this.messages, content, toolCalls);
|
|
@@ -262,4 +262,28 @@ export class MessageManager {
|
|
|
262
262
|
this.setMessages(updatedMessages);
|
|
263
263
|
this.callbacks.onCompleteCommandMessage?.(command, exitCode);
|
|
264
264
|
}
|
|
265
|
+
// Subagent block methods
|
|
266
|
+
addSubagentBlock(subagentId, subagentName, status = "active", subagentMessages = []) {
|
|
267
|
+
const params = {
|
|
268
|
+
messages: this.messages,
|
|
269
|
+
subagentId,
|
|
270
|
+
subagentName,
|
|
271
|
+
status,
|
|
272
|
+
subagentMessages,
|
|
273
|
+
};
|
|
274
|
+
const updatedMessages = addSubagentBlockToMessage(params);
|
|
275
|
+
this.setMessages(updatedMessages);
|
|
276
|
+
this.callbacks.onSubAgentBlockAdded?.(params.subagentId);
|
|
277
|
+
}
|
|
278
|
+
updateSubagentBlock(subagentId, updates) {
|
|
279
|
+
const updatedMessages = updateSubagentBlockInMessage(this.messages, subagentId, updates);
|
|
280
|
+
this.setMessages(updatedMessages);
|
|
281
|
+
const params = {
|
|
282
|
+
messages: this.messages,
|
|
283
|
+
subagentId,
|
|
284
|
+
status: updates.status || "active",
|
|
285
|
+
subagentMessages: updates.messages || [],
|
|
286
|
+
};
|
|
287
|
+
this.callbacks.onSubAgentBlockUpdated?.(params.subagentId, params.messages);
|
|
288
|
+
}
|
|
265
289
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { SkillManagerOptions, SkillMetadata, Skill, SkillToolArgs, SkillInvocationContext } from "../types.js";
|
|
2
|
-
import type { ToolPlugin } from "../tools/types.js";
|
|
3
2
|
/**
|
|
4
3
|
* Manages skill discovery and loading
|
|
5
4
|
*/
|
|
@@ -15,6 +14,10 @@ export declare class SkillManager {
|
|
|
15
14
|
* Initialize the skill manager by discovering available skills
|
|
16
15
|
*/
|
|
17
16
|
initialize(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if the skill manager is initialized
|
|
19
|
+
*/
|
|
20
|
+
isInitialized(): boolean;
|
|
18
21
|
/**
|
|
19
22
|
* Get all available skills metadata
|
|
20
23
|
*/
|
|
@@ -36,10 +39,6 @@ export declare class SkillManager {
|
|
|
36
39
|
* Find all directories that could contain skills
|
|
37
40
|
*/
|
|
38
41
|
private findSkillDirectories;
|
|
39
|
-
/**
|
|
40
|
-
* Create a tool plugin for registering with ToolManager
|
|
41
|
-
*/
|
|
42
|
-
createTool(): ToolPlugin;
|
|
43
42
|
/**
|
|
44
43
|
* Execute a skill by name
|
|
45
44
|
*/
|
|
@@ -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,aAAa,CAAC;
|
|
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,aAAa,CAAC;AAGrB;;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"}
|
|
@@ -47,6 +47,12 @@ export class SkillManager {
|
|
|
47
47
|
throw error;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if the skill manager is initialized
|
|
52
|
+
*/
|
|
53
|
+
isInitialized() {
|
|
54
|
+
return this.initialized;
|
|
55
|
+
}
|
|
50
56
|
/**
|
|
51
57
|
* Get all available skills metadata
|
|
52
58
|
*/
|
|
@@ -173,88 +179,6 @@ export class SkillManager {
|
|
|
173
179
|
}
|
|
174
180
|
return directories;
|
|
175
181
|
}
|
|
176
|
-
/**
|
|
177
|
-
* Create a tool plugin for registering with ToolManager
|
|
178
|
-
*/
|
|
179
|
-
createTool() {
|
|
180
|
-
// Initialize skill manager asynchronously
|
|
181
|
-
let initializationPromise = null;
|
|
182
|
-
const ensureInitialized = async () => {
|
|
183
|
-
if (!initializationPromise) {
|
|
184
|
-
initializationPromise = this.initialize();
|
|
185
|
-
}
|
|
186
|
-
await initializationPromise;
|
|
187
|
-
};
|
|
188
|
-
const getToolDescription = () => {
|
|
189
|
-
if (!this.initialized) {
|
|
190
|
-
return "Invoke a Wave skill by name. Skills are user-defined automation templates that can be personal or project-specific. Skills will be loaded during initialization.";
|
|
191
|
-
}
|
|
192
|
-
const availableSkills = this.getAvailableSkills();
|
|
193
|
-
if (availableSkills.length === 0) {
|
|
194
|
-
return "Invoke a Wave skill by name. Skills are user-defined automation templates that can be personal or project-specific. No skills are currently available.";
|
|
195
|
-
}
|
|
196
|
-
const skillList = availableSkills
|
|
197
|
-
.map((skill) => `• **${skill.name}** (${skill.type}): ${skill.description}`)
|
|
198
|
-
.join("\n");
|
|
199
|
-
return `Invoke a Wave skill by name. Skills are user-defined automation templates that can be personal or project-specific.\n\nAvailable skills:\n${skillList}`;
|
|
200
|
-
};
|
|
201
|
-
return {
|
|
202
|
-
name: "skill",
|
|
203
|
-
config: {
|
|
204
|
-
type: "function",
|
|
205
|
-
function: {
|
|
206
|
-
name: "skill",
|
|
207
|
-
description: getToolDescription(),
|
|
208
|
-
parameters: {
|
|
209
|
-
type: "object",
|
|
210
|
-
properties: {
|
|
211
|
-
skill_name: {
|
|
212
|
-
type: "string",
|
|
213
|
-
description: "Name of the skill to invoke",
|
|
214
|
-
enum: this.initialized
|
|
215
|
-
? this.getAvailableSkills().map((skill) => skill.name)
|
|
216
|
-
: [],
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
required: ["skill_name"],
|
|
220
|
-
},
|
|
221
|
-
},
|
|
222
|
-
},
|
|
223
|
-
execute: async (args) => {
|
|
224
|
-
try {
|
|
225
|
-
// Ensure skill manager is initialized
|
|
226
|
-
await ensureInitialized();
|
|
227
|
-
// Validate arguments
|
|
228
|
-
const skillName = args.skill_name;
|
|
229
|
-
if (!skillName || typeof skillName !== "string") {
|
|
230
|
-
return {
|
|
231
|
-
success: false,
|
|
232
|
-
content: "",
|
|
233
|
-
error: "skill_name parameter is required and must be a string",
|
|
234
|
-
};
|
|
235
|
-
}
|
|
236
|
-
// Execute the skill
|
|
237
|
-
const result = await this.executeSkill({ skill_name: skillName });
|
|
238
|
-
return {
|
|
239
|
-
success: true,
|
|
240
|
-
content: result.content,
|
|
241
|
-
shortResult: `Invoked skill: ${skillName}`,
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
return {
|
|
246
|
-
success: false,
|
|
247
|
-
content: "",
|
|
248
|
-
error: error instanceof Error ? error.message : String(error),
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
formatCompactParams: (params) => {
|
|
253
|
-
const skillName = params.skill_name;
|
|
254
|
-
return skillName || "unknown-skill";
|
|
255
|
-
},
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
182
|
/**
|
|
259
183
|
* Execute a skill by name
|
|
260
184
|
*/
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { SubagentConfiguration } from "../utils/subagentParser.js";
|
|
2
|
+
import type { Message, Logger, GatewayConfig, ModelConfig } from "../types.js";
|
|
3
|
+
import { AIManager } from "./aiManager.js";
|
|
4
|
+
import { MessageManager } from "./messageManager.js";
|
|
5
|
+
import { ToolManager } from "./toolManager.js";
|
|
6
|
+
export interface SubagentInstance {
|
|
7
|
+
subagentId: string;
|
|
8
|
+
configuration: SubagentConfiguration;
|
|
9
|
+
aiManager: AIManager;
|
|
10
|
+
messageManager: MessageManager;
|
|
11
|
+
toolManager: ToolManager;
|
|
12
|
+
status: "initializing" | "active" | "completed" | "error" | "aborted";
|
|
13
|
+
taskDescription: string;
|
|
14
|
+
messages: Message[];
|
|
15
|
+
}
|
|
16
|
+
export interface SubagentManagerOptions {
|
|
17
|
+
workdir: string;
|
|
18
|
+
parentToolManager: ToolManager;
|
|
19
|
+
parentMessageManager: MessageManager;
|
|
20
|
+
logger?: Logger;
|
|
21
|
+
gatewayConfig: GatewayConfig;
|
|
22
|
+
modelConfig: ModelConfig;
|
|
23
|
+
tokenLimit: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class SubagentManager {
|
|
26
|
+
private instances;
|
|
27
|
+
private cachedConfigurations;
|
|
28
|
+
private workdir;
|
|
29
|
+
private parentToolManager;
|
|
30
|
+
private parentMessageManager;
|
|
31
|
+
private logger?;
|
|
32
|
+
private gatewayConfig;
|
|
33
|
+
private modelConfig;
|
|
34
|
+
private tokenLimit;
|
|
35
|
+
constructor(options: SubagentManagerOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Initialize the SubagentManager by loading and caching configurations
|
|
38
|
+
*/
|
|
39
|
+
initialize(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Load all available subagent configurations and cache them
|
|
42
|
+
*/
|
|
43
|
+
loadConfigurations(): Promise<SubagentConfiguration[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Get cached configurations synchronously (must call loadConfigurations first)
|
|
46
|
+
*/
|
|
47
|
+
getConfigurations(): SubagentConfiguration[];
|
|
48
|
+
/**
|
|
49
|
+
* Find subagent by exact name match
|
|
50
|
+
*/
|
|
51
|
+
findSubagent(name: string): Promise<SubagentConfiguration | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Create a new subagent instance with isolated managers
|
|
54
|
+
*/
|
|
55
|
+
createInstance(configuration: SubagentConfiguration, taskDescription: string): Promise<SubagentInstance>;
|
|
56
|
+
/**
|
|
57
|
+
* Execute task using subagent instance
|
|
58
|
+
*
|
|
59
|
+
* IMPORTANT: This method automatically filters out the Task tool from allowedTools
|
|
60
|
+
* to prevent subagents from spawning other subagents (infinite recursion protection)
|
|
61
|
+
*/
|
|
62
|
+
executeTask(instance: SubagentInstance, prompt: string): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Get instance by subagent ID
|
|
65
|
+
*/
|
|
66
|
+
getInstance(subagentId: string): SubagentInstance | null;
|
|
67
|
+
/**
|
|
68
|
+
* Update instance status
|
|
69
|
+
*/
|
|
70
|
+
updateInstanceStatus(subagentId: string, status: SubagentInstance["status"]): void;
|
|
71
|
+
/**
|
|
72
|
+
* Add message to instance
|
|
73
|
+
*/
|
|
74
|
+
addMessageToInstance(subagentId: string, message: Message): void;
|
|
75
|
+
/**
|
|
76
|
+
* Abort a running subagent instance
|
|
77
|
+
*/
|
|
78
|
+
abortInstance(subagentId: string): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Abort all active subagent instances
|
|
81
|
+
*/
|
|
82
|
+
abortAllInstances(): void;
|
|
83
|
+
/**
|
|
84
|
+
* Clean up completed, errored, or aborted instances
|
|
85
|
+
*/
|
|
86
|
+
cleanupInstance(subagentId: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Get all active instances
|
|
89
|
+
*/
|
|
90
|
+
getActiveInstances(): SubagentInstance[];
|
|
91
|
+
/**
|
|
92
|
+
* Clean up all instances (for session end)
|
|
93
|
+
*/
|
|
94
|
+
cleanup(): void;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=subagentManager.d.ts.map
|
|
@@ -0,0 +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,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,cAAc,EAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,qBAAqB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,WAAW,CAAC;IAC/B,oBAAoB,EAAE,cAAc,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,oBAAoB,CAAiB;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,sBAAsB;IAU3C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAY5D;;OAEG;IACH,iBAAiB,IAAI,qBAAqB,EAAE;IAS5C;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM;IAK/B;;OAEG;IACG,cAAc,CAClB,aAAa,EAAE,qBAAqB,EACpC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,gBAAgB,CAAC;IAmF5B;;;;;OAKG;IACG,WAAW,CACf,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAiElB;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAIxD;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GACjC,IAAI;IAOP;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAOhE;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAiC1C;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAOzB;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzC;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,EAAE;IAOxC;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
|