wave-agent-sdk 0.0.7 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +105 -24
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +438 -53
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/managers/aiManager.d.ts +18 -7
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +254 -142
- package/dist/managers/backgroundBashManager.d.ts.map +1 -1
- package/dist/managers/backgroundBashManager.js +11 -9
- package/dist/managers/hookManager.d.ts +6 -6
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +81 -39
- package/dist/managers/liveConfigManager.d.ts +95 -0
- package/dist/managers/liveConfigManager.d.ts.map +1 -0
- package/dist/managers/liveConfigManager.js +442 -0
- 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 +41 -24
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +184 -73
- 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 +4 -2
- package/dist/managers/subagentManager.d.ts +42 -6
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +213 -62
- 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 +15 -5
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +446 -77
- 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 +69 -0
- package/dist/services/fileWatcher.d.ts.map +1 -0
- package/dist/services/fileWatcher.js +212 -0
- package/dist/services/hook.d.ts +5 -40
- package/dist/services/hook.d.ts.map +1 -1
- package/dist/services/hook.js +47 -109
- package/dist/services/jsonlHandler.d.ts +71 -0
- package/dist/services/jsonlHandler.d.ts.map +1 -0
- package/dist/services/jsonlHandler.js +236 -0
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +33 -11
- package/dist/services/session.d.ts +116 -52
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +415 -143
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +77 -17
- package/dist/tools/deleteFileTool.d.ts.map +1 -1
- package/dist/tools/deleteFileTool.js +27 -1
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +33 -8
- 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 +30 -10
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +113 -3
- 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 +30 -15
- package/dist/types/commands.d.ts +4 -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 +45 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/environment.d.ts +83 -0
- package/dist/types/environment.d.ts.map +1 -0
- package/dist/types/environment.js +21 -0
- 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 +18 -3
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/hooks.js +8 -8
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +7 -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 +19 -12
- 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 +15 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +7 -0
- 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 +48 -30
- 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 +96 -0
- package/dist/utils/cacheControlUtils.d.ts.map +1 -0
- package/dist/utils/cacheControlUtils.js +324 -0
- package/dist/utils/commandPathResolver.d.ts +52 -0
- package/dist/utils/commandPathResolver.d.ts.map +1 -0
- package/dist/utils/commandPathResolver.js +145 -0
- package/dist/utils/configPaths.d.ts +85 -0
- package/dist/utils/configPaths.d.ts.map +1 -0
- package/dist/utils/configPaths.js +121 -0
- package/dist/utils/constants.d.ts +1 -13
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +2 -14
- package/dist/utils/convertMessagesForAPI.d.ts +2 -1
- package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
- package/dist/utils/convertMessagesForAPI.js +39 -18
- package/dist/utils/customCommands.d.ts.map +1 -1
- package/dist/utils/customCommands.js +66 -21
- 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 +27 -0
- package/dist/utils/fileUtils.d.ts.map +1 -0
- package/dist/utils/fileUtils.js +145 -0
- package/dist/utils/globalLogger.d.ts +88 -0
- package/dist/utils/globalLogger.d.ts.map +1 -0
- package/dist/utils/globalLogger.js +120 -0
- 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/mcpUtils.d.ts.map +1 -1
- package/dist/utils/mcpUtils.js +25 -3
- package/dist/utils/messageOperations.d.ts +20 -18
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +30 -38
- package/dist/utils/pathEncoder.d.ts +108 -0
- package/dist/utils/pathEncoder.d.ts.map +1 -0
- package/dist/utils/pathEncoder.js +279 -0
- package/dist/utils/subagentParser.d.ts +2 -2
- package/dist/utils/subagentParser.d.ts.map +1 -1
- package/dist/utils/subagentParser.js +12 -8
- package/dist/utils/tokenCalculation.d.ts +26 -0
- package/dist/utils/tokenCalculation.d.ts.map +1 -0
- package/dist/utils/tokenCalculation.js +36 -0
- 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 +6 -6
- package/src/agent.ts +586 -78
- package/src/index.ts +4 -0
- package/src/managers/aiManager.ts +341 -192
- package/src/managers/backgroundBashManager.ts +11 -9
- package/src/managers/hookManager.ts +102 -54
- package/src/managers/liveConfigManager.ts +634 -0
- package/src/managers/lspManager.ts +434 -0
- package/src/managers/messageManager.ts +258 -121
- package/src/managers/permissionManager.ts +276 -0
- package/src/managers/skillManager.ts +3 -1
- package/src/managers/slashCommandManager.ts +5 -3
- package/src/managers/subagentManager.ts +295 -76
- package/src/managers/toolManager.ts +95 -3
- package/src/services/aiService.ts +656 -84
- package/src/services/configurationService.ts +762 -0
- package/src/services/fileWatcher.ts +300 -0
- package/src/services/hook.ts +54 -144
- package/src/services/jsonlHandler.ts +303 -0
- package/src/services/memory.ts +34 -11
- package/src/services/session.ts +522 -173
- package/src/tools/bashTool.ts +94 -20
- package/src/tools/deleteFileTool.ts +38 -1
- package/src/tools/editTool.ts +44 -9
- package/src/tools/lspTool.ts +760 -0
- package/src/tools/multiEditTool.ts +41 -11
- package/src/tools/readTool.ts +127 -3
- 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 +43 -16
- package/src/types/commands.ts +6 -1
- package/src/types/config.ts +5 -0
- package/src/types/configuration.ts +73 -0
- package/src/types/core.ts +55 -0
- package/src/types/environment.ts +104 -0
- package/src/types/fileSearch.ts +4 -0
- package/src/types/hooks.ts +32 -16
- package/src/types/index.ts +7 -0
- package/src/types/lsp.ts +96 -0
- package/src/types/messaging.ts +21 -14
- package/src/types/permissions.ts +48 -0
- package/src/types/session.ts +20 -0
- 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 +55 -31
- package/src/utils/builtinSubagents.ts +71 -0
- package/src/utils/cacheControlUtils.ts +475 -0
- package/src/utils/commandPathResolver.ts +189 -0
- package/src/utils/configPaths.ts +163 -0
- package/src/utils/constants.ts +2 -17
- package/src/utils/convertMessagesForAPI.ts +44 -18
- package/src/utils/customCommands.ts +90 -22
- package/src/utils/fileSearch.ts +107 -0
- package/src/utils/fileUtils.ts +160 -0
- package/src/utils/globalLogger.ts +128 -0
- package/src/utils/largeOutputHandler.ts +55 -0
- package/src/utils/markdownParser.ts +1 -19
- package/src/utils/mcpUtils.ts +34 -3
- package/src/utils/messageOperations.ts +47 -53
- package/src/utils/pathEncoder.ts +394 -0
- package/src/utils/subagentParser.ts +13 -9
- package/src/utils/tokenCalculation.ts +43 -0
- package/src/utils/tokenEstimator.ts +68 -0
- package/dist/utils/configResolver.d.ts +0 -38
- package/dist/utils/configResolver.d.ts.map +0 -1
- package/dist/utils/configResolver.js +0 -106
- package/src/utils/configResolver.ts +0 -142
|
@@ -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;
|
|
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"}
|
|
@@ -20,9 +20,12 @@ export class SlashCommandManager {
|
|
|
20
20
|
this.registerCommand({
|
|
21
21
|
id: "clear",
|
|
22
22
|
name: "clear",
|
|
23
|
-
description: "Clear the chat session",
|
|
23
|
+
description: "Clear the chat session and terminal",
|
|
24
24
|
handler: () => {
|
|
25
|
+
// Clear chat messages
|
|
25
26
|
this.messageManager.clearMessages();
|
|
27
|
+
// Clear terminal screen
|
|
28
|
+
process.stdout.write("\x1Bc");
|
|
26
29
|
},
|
|
27
30
|
});
|
|
28
31
|
}
|
|
@@ -192,7 +195,6 @@ export class SlashCommandManager {
|
|
|
192
195
|
// Execute the AI conversation with custom configuration
|
|
193
196
|
await this.aiManager.sendAIMessage({
|
|
194
197
|
model: config?.model,
|
|
195
|
-
allowedTools: config?.allowedTools,
|
|
196
198
|
});
|
|
197
199
|
}
|
|
198
200
|
catch (error) {
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
import type { SubagentConfiguration } from "../utils/subagentParser.js";
|
|
2
2
|
import type { Message, Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
|
|
3
|
+
import type { SessionData } from "../services/session.js";
|
|
3
4
|
import { AIManager } from "./aiManager.js";
|
|
4
5
|
import { MessageManager } from "./messageManager.js";
|
|
5
6
|
import { ToolManager } from "./toolManager.js";
|
|
7
|
+
import { HookManager } from "./hookManager.js";
|
|
8
|
+
import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
|
|
9
|
+
export interface SubagentManagerCallbacks {
|
|
10
|
+
/** Triggered when subagent adds user message */
|
|
11
|
+
onSubagentUserMessageAdded?: (subagentId: string, params: UserMessageParams) => void;
|
|
12
|
+
/** Triggered when subagent creates assistant message */
|
|
13
|
+
onSubagentAssistantMessageAdded?: (subagentId: string) => void;
|
|
14
|
+
/** Triggered during subagent content streaming updates */
|
|
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;
|
|
18
|
+
/** Triggered when subagent tool block is updated */
|
|
19
|
+
onSubagentToolBlockUpdated?: (subagentId: string, params: AgentToolBlockUpdateParams) => void;
|
|
20
|
+
/** Triggered when subagent messages change */
|
|
21
|
+
onSubagentMessagesChange?: (subagentId: string, messages: Message[]) => void;
|
|
22
|
+
}
|
|
6
23
|
export interface SubagentInstance {
|
|
7
24
|
subagentId: string;
|
|
8
25
|
configuration: SubagentConfiguration;
|
|
@@ -11,15 +28,18 @@ export interface SubagentInstance {
|
|
|
11
28
|
toolManager: ToolManager;
|
|
12
29
|
status: "initializing" | "active" | "completed" | "error" | "aborted";
|
|
13
30
|
messages: Message[];
|
|
31
|
+
subagentType: string;
|
|
14
32
|
}
|
|
15
33
|
export interface SubagentManagerOptions {
|
|
16
34
|
workdir: string;
|
|
17
35
|
parentToolManager: ToolManager;
|
|
18
36
|
parentMessageManager: MessageManager;
|
|
37
|
+
callbacks?: SubagentManagerCallbacks;
|
|
19
38
|
logger?: Logger;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
39
|
+
getGatewayConfig: () => GatewayConfig;
|
|
40
|
+
getModelConfig: () => ModelConfig;
|
|
41
|
+
getTokenLimit: () => number;
|
|
42
|
+
hookManager?: HookManager;
|
|
23
43
|
onUsageAdded?: (usage: Usage) => void;
|
|
24
44
|
}
|
|
25
45
|
export declare class SubagentManager {
|
|
@@ -28,10 +48,12 @@ export declare class SubagentManager {
|
|
|
28
48
|
private workdir;
|
|
29
49
|
private parentToolManager;
|
|
30
50
|
private parentMessageManager;
|
|
51
|
+
private callbacks?;
|
|
31
52
|
private logger?;
|
|
32
|
-
private
|
|
33
|
-
private
|
|
34
|
-
private
|
|
53
|
+
private getGatewayConfig;
|
|
54
|
+
private getModelConfig;
|
|
55
|
+
private getTokenLimit;
|
|
56
|
+
private hookManager?;
|
|
35
57
|
private onUsageAdded?;
|
|
36
58
|
constructor(options: SubagentManagerOptions);
|
|
37
59
|
/**
|
|
@@ -89,5 +111,19 @@ export declare class SubagentManager {
|
|
|
89
111
|
* Clean up all instances (for session end)
|
|
90
112
|
*/
|
|
91
113
|
cleanup(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Restore subagent instances from saved session data
|
|
116
|
+
* This method is called during agent initialization to restore previous subagent states
|
|
117
|
+
*/
|
|
118
|
+
restoreSubagentSessions(subagentSessions: Array<{
|
|
119
|
+
sessionData: SessionData;
|
|
120
|
+
subagentId: string;
|
|
121
|
+
configuration: SubagentConfiguration;
|
|
122
|
+
}>): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Create subagent callbacks for a specific subagent ID
|
|
125
|
+
* Extracted to reuse in both create and restore flows
|
|
126
|
+
*/
|
|
127
|
+
private createSubagentCallbacks;
|
|
92
128
|
}
|
|
93
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,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
2
|
import { AIManager } from "./aiManager.js";
|
|
3
|
-
import { MessageManager
|
|
3
|
+
import { MessageManager } from "./messageManager.js";
|
|
4
|
+
import { addConsolidatedAbortListener, createAbortPromise, } from "../utils/abortUtils.js";
|
|
4
5
|
export class SubagentManager {
|
|
5
6
|
constructor(options) {
|
|
6
7
|
this.instances = new Map();
|
|
@@ -8,10 +9,12 @@ export class SubagentManager {
|
|
|
8
9
|
this.workdir = options.workdir;
|
|
9
10
|
this.parentToolManager = options.parentToolManager;
|
|
10
11
|
this.parentMessageManager = options.parentMessageManager;
|
|
12
|
+
this.callbacks = options.callbacks; // Store SubagentManagerCallbacks
|
|
11
13
|
this.logger = options.logger;
|
|
12
|
-
this.
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
14
|
+
this.getGatewayConfig = options.getGatewayConfig;
|
|
15
|
+
this.getModelConfig = options.getModelConfig;
|
|
16
|
+
this.getTokenLimit = options.getTokenLimit;
|
|
17
|
+
this.hookManager = options.hookManager;
|
|
15
18
|
this.onUsageAdded = options.onUsageAdded;
|
|
16
19
|
}
|
|
17
20
|
/**
|
|
@@ -50,38 +53,21 @@ export class SubagentManager {
|
|
|
50
53
|
* Create a new subagent instance with isolated managers
|
|
51
54
|
*/
|
|
52
55
|
async createInstance(configuration, parameters) {
|
|
53
|
-
if (!this.parentToolManager
|
|
54
|
-
!this.gatewayConfig ||
|
|
55
|
-
!this.modelConfig ||
|
|
56
|
-
!this.tokenLimit) {
|
|
56
|
+
if (!this.parentToolManager) {
|
|
57
57
|
throw new Error("SubagentManager not properly initialized - call initialize() first");
|
|
58
58
|
}
|
|
59
59
|
const subagentId = randomUUID();
|
|
60
60
|
// Create isolated MessageManager for the subagent
|
|
61
|
-
const subagentCallbacks =
|
|
62
|
-
// These callbacks will be handled by the parent agent
|
|
63
|
-
onMessagesChange: (messages) => {
|
|
64
|
-
const instance = this.instances.get(subagentId);
|
|
65
|
-
if (instance) {
|
|
66
|
-
instance.messages = messages;
|
|
67
|
-
// Update parent's subagent block with latest messages
|
|
68
|
-
this.parentMessageManager.updateSubagentBlock(subagentId, {
|
|
69
|
-
messages: messages,
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
};
|
|
61
|
+
const subagentCallbacks = this.createSubagentCallbacks(subagentId);
|
|
74
62
|
const messageManager = new MessageManager({
|
|
75
63
|
callbacks: subagentCallbacks,
|
|
76
64
|
workdir: this.workdir,
|
|
77
65
|
logger: this.logger,
|
|
66
|
+
sessionType: "subagent",
|
|
67
|
+
subagentType: parameters.subagent_type,
|
|
78
68
|
});
|
|
79
69
|
// Use the parent tool manager directly - tool restrictions will be handled by allowedTools parameter
|
|
80
70
|
const toolManager = this.parentToolManager;
|
|
81
|
-
// Determine model to use
|
|
82
|
-
const modelToUse = configuration.model && configuration.model !== "inherit"
|
|
83
|
-
? configuration.model
|
|
84
|
-
: this.modelConfig.agentModel;
|
|
85
71
|
// Create isolated AIManager for the subagent
|
|
86
72
|
const aiManager = new AIManager({
|
|
87
73
|
messageManager,
|
|
@@ -89,12 +75,31 @@ export class SubagentManager {
|
|
|
89
75
|
logger: this.logger,
|
|
90
76
|
workdir: this.workdir,
|
|
91
77
|
systemPrompt: configuration.systemPrompt,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
78
|
+
subagentType: parameters.subagent_type, // Pass subagent type for hook context
|
|
79
|
+
hookManager: this.hookManager,
|
|
80
|
+
getGatewayConfig: this.getGatewayConfig,
|
|
81
|
+
getModelConfig: () => {
|
|
82
|
+
// Determine model dynamically each time
|
|
83
|
+
const parentModelConfig = this.getModelConfig();
|
|
84
|
+
let modelToUse;
|
|
85
|
+
if (!configuration.model || configuration.model === "inherit") {
|
|
86
|
+
// Use parent's agentModel for "inherit" or undefined
|
|
87
|
+
modelToUse = parentModelConfig.agentModel;
|
|
88
|
+
}
|
|
89
|
+
else if (configuration.model === "fastModel") {
|
|
90
|
+
// Use parent's fastModel for special "fastModel" value
|
|
91
|
+
modelToUse = parentModelConfig.fastModel;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Use specific model name
|
|
95
|
+
modelToUse = configuration.model;
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...parentModelConfig,
|
|
99
|
+
agentModel: modelToUse,
|
|
100
|
+
};
|
|
96
101
|
},
|
|
97
|
-
|
|
102
|
+
getTokenLimit: this.getTokenLimit,
|
|
98
103
|
callbacks: {
|
|
99
104
|
onUsageAdded: this.onUsageAdded,
|
|
100
105
|
},
|
|
@@ -107,10 +112,11 @@ export class SubagentManager {
|
|
|
107
112
|
toolManager,
|
|
108
113
|
status: "initializing",
|
|
109
114
|
messages: [],
|
|
115
|
+
subagentType: parameters.subagent_type, // Store the subagent type
|
|
110
116
|
};
|
|
111
117
|
this.instances.set(subagentId, instance);
|
|
112
118
|
// Create subagent block in parent message manager
|
|
113
|
-
this.parentMessageManager.addSubagentBlock(subagentId, configuration.name, "active",
|
|
119
|
+
this.parentMessageManager.addSubagentBlock(subagentId, configuration.name, messageManager.getSessionId(), configuration, "active", parameters);
|
|
114
120
|
return instance;
|
|
115
121
|
}
|
|
116
122
|
/**
|
|
@@ -130,15 +136,22 @@ export class SubagentManager {
|
|
|
130
136
|
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
131
137
|
status: "active",
|
|
132
138
|
});
|
|
133
|
-
// Set up abort handler
|
|
139
|
+
// Set up consolidated abort handler to prevent listener accumulation
|
|
140
|
+
let abortCleanup;
|
|
134
141
|
if (abortSignal) {
|
|
135
|
-
abortSignal
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
+
abortCleanup = addConsolidatedAbortListener(abortSignal, [
|
|
143
|
+
() => {
|
|
144
|
+
// Update status to aborted
|
|
145
|
+
this.updateInstanceStatus(instance.subagentId, "aborted");
|
|
146
|
+
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
147
|
+
status: "aborted",
|
|
148
|
+
});
|
|
149
|
+
},
|
|
150
|
+
() => {
|
|
151
|
+
// Abort the AI execution
|
|
152
|
+
instance.aiManager.abortAIMessage();
|
|
153
|
+
},
|
|
154
|
+
]);
|
|
142
155
|
}
|
|
143
156
|
// Add the user's prompt as a message
|
|
144
157
|
instance.messageManager.addUserMessage({ content: prompt });
|
|
@@ -155,31 +168,42 @@ export class SubagentManager {
|
|
|
155
168
|
}
|
|
156
169
|
// Execute the AI request with tool restrictions
|
|
157
170
|
// The AIManager will handle abort signals through its own abort controllers
|
|
158
|
-
//
|
|
171
|
+
// Resolve model name for sendAIMessage
|
|
172
|
+
let resolvedModel;
|
|
173
|
+
if (instance.configuration.model &&
|
|
174
|
+
instance.configuration.model !== "inherit") {
|
|
175
|
+
if (instance.configuration.model === "fastModel") {
|
|
176
|
+
// Use parent's fastModel for special "fastModel" value
|
|
177
|
+
const parentModelConfig = this.getModelConfig();
|
|
178
|
+
resolvedModel = parentModelConfig.fastModel;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
// Use specific model name
|
|
182
|
+
resolvedModel = instance.configuration.model;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// For "inherit" or undefined, resolvedModel remains undefined (uses AIManager default)
|
|
159
186
|
const executeAI = instance.aiManager.sendAIMessage({
|
|
160
187
|
allowedTools,
|
|
161
|
-
model:
|
|
162
|
-
? instance.configuration.model
|
|
163
|
-
: undefined,
|
|
188
|
+
model: resolvedModel,
|
|
164
189
|
});
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
reject(new Error("Task was aborted"));
|
|
177
|
-
});
|
|
178
|
-
}),
|
|
179
|
-
]);
|
|
190
|
+
try {
|
|
191
|
+
// If we have an abort signal, race against it using utilities to prevent listener accumulation
|
|
192
|
+
if (abortSignal) {
|
|
193
|
+
await Promise.race([
|
|
194
|
+
executeAI,
|
|
195
|
+
createAbortPromise(abortSignal, "Task was aborted"),
|
|
196
|
+
]);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
await executeAI;
|
|
200
|
+
}
|
|
180
201
|
}
|
|
181
|
-
|
|
182
|
-
|
|
202
|
+
finally {
|
|
203
|
+
// Clean up abort listeners to prevent memory leaks
|
|
204
|
+
if (abortCleanup) {
|
|
205
|
+
abortCleanup();
|
|
206
|
+
}
|
|
183
207
|
}
|
|
184
208
|
// Get the latest messages to extract the response
|
|
185
209
|
const messages = instance.messageManager.getMessages();
|
|
@@ -192,11 +216,10 @@ export class SubagentManager {
|
|
|
192
216
|
// Extract text content from the last assistant message
|
|
193
217
|
const textBlocks = lastAssistantMessage.blocks.filter((block) => block.type === "text");
|
|
194
218
|
const response = textBlocks.map((block) => block.content).join("\n");
|
|
195
|
-
// Update status to completed and update parent
|
|
219
|
+
// Update status to completed and update parent
|
|
196
220
|
this.updateInstanceStatus(instance.subagentId, "completed");
|
|
197
221
|
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
198
222
|
status: "completed",
|
|
199
|
-
messages: messages,
|
|
200
223
|
});
|
|
201
224
|
return response || "Task completed with no text response";
|
|
202
225
|
}
|
|
@@ -256,4 +279,132 @@ export class SubagentManager {
|
|
|
256
279
|
cleanup() {
|
|
257
280
|
this.instances.clear();
|
|
258
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Restore subagent instances from saved session data
|
|
284
|
+
* This method is called during agent initialization to restore previous subagent states
|
|
285
|
+
*/
|
|
286
|
+
async restoreSubagentSessions(subagentSessions) {
|
|
287
|
+
for (const { sessionData, subagentId, configuration } of subagentSessions) {
|
|
288
|
+
try {
|
|
289
|
+
// Use the configuration from the SubagentBlock
|
|
290
|
+
// Create the subagent instance without executing - just restore the state
|
|
291
|
+
// Create MessageManager for the restored subagent
|
|
292
|
+
const subagentCallbacks = this.createSubagentCallbacks(subagentId);
|
|
293
|
+
const messageManager = new MessageManager({
|
|
294
|
+
callbacks: subagentCallbacks,
|
|
295
|
+
workdir: this.workdir,
|
|
296
|
+
logger: this.logger,
|
|
297
|
+
sessionType: "subagent",
|
|
298
|
+
subagentType: configuration.name, // Use configuration name for restored sessions
|
|
299
|
+
});
|
|
300
|
+
// Use the parent tool manager
|
|
301
|
+
const toolManager = this.parentToolManager;
|
|
302
|
+
// Determine model to use
|
|
303
|
+
let modelToUse;
|
|
304
|
+
const parentModelConfig = this.getModelConfig();
|
|
305
|
+
if (!configuration.model || configuration.model === "inherit") {
|
|
306
|
+
modelToUse = parentModelConfig.agentModel;
|
|
307
|
+
}
|
|
308
|
+
else if (configuration.model === "fastModel") {
|
|
309
|
+
modelToUse = parentModelConfig.fastModel;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
modelToUse = configuration.model;
|
|
313
|
+
}
|
|
314
|
+
// Create AIManager for the restored subagent
|
|
315
|
+
const aiManager = new AIManager({
|
|
316
|
+
messageManager,
|
|
317
|
+
toolManager,
|
|
318
|
+
logger: this.logger,
|
|
319
|
+
workdir: this.workdir,
|
|
320
|
+
systemPrompt: configuration.systemPrompt,
|
|
321
|
+
subagentType: configuration.name, // Use configuration name as subagent type for restored instances
|
|
322
|
+
hookManager: this.hookManager,
|
|
323
|
+
getGatewayConfig: this.getGatewayConfig,
|
|
324
|
+
getModelConfig: () => ({
|
|
325
|
+
...parentModelConfig,
|
|
326
|
+
agentModel: modelToUse,
|
|
327
|
+
}),
|
|
328
|
+
getTokenLimit: this.getTokenLimit,
|
|
329
|
+
callbacks: {
|
|
330
|
+
onUsageAdded: this.onUsageAdded,
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
// Create restored instance
|
|
334
|
+
const instance = {
|
|
335
|
+
subagentId,
|
|
336
|
+
configuration,
|
|
337
|
+
aiManager,
|
|
338
|
+
messageManager,
|
|
339
|
+
toolManager,
|
|
340
|
+
status: "completed", // Restored sessions are considered completed
|
|
341
|
+
messages: sessionData.messages,
|
|
342
|
+
subagentType: configuration.name, // Use configuration name as subagent type for restored instances
|
|
343
|
+
};
|
|
344
|
+
// IMPORTANT: Store instance in map BEFORE calling setMessages
|
|
345
|
+
// This ensures the callback can find the instance
|
|
346
|
+
this.instances.set(subagentId, instance);
|
|
347
|
+
messageManager.initializeFromSession(sessionData);
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
this.logger?.warn(`Failed to restore subagent session ${subagentId}:`, error);
|
|
351
|
+
// Continue with other sessions even if one fails
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Create subagent callbacks for a specific subagent ID
|
|
357
|
+
* Extracted to reuse in both create and restore flows
|
|
358
|
+
*/
|
|
359
|
+
createSubagentCallbacks(subagentId) {
|
|
360
|
+
return {
|
|
361
|
+
onUserMessageAdded: (params) => {
|
|
362
|
+
// Forward user message events to parent via SubagentManager callbacks
|
|
363
|
+
if (this.callbacks?.onSubagentUserMessageAdded) {
|
|
364
|
+
this.callbacks.onSubagentUserMessageAdded(subagentId, params);
|
|
365
|
+
}
|
|
366
|
+
},
|
|
367
|
+
onAssistantMessageAdded: () => {
|
|
368
|
+
// Forward assistant message events to parent via SubagentManager callbacks
|
|
369
|
+
if (this.callbacks?.onSubagentAssistantMessageAdded) {
|
|
370
|
+
this.callbacks.onSubagentAssistantMessageAdded(subagentId);
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
onAssistantContentUpdated: (chunk, accumulated) => {
|
|
374
|
+
// Forward assistant content updates to parent via SubagentManager callbacks
|
|
375
|
+
if (this.callbacks?.onSubagentAssistantContentUpdated) {
|
|
376
|
+
this.callbacks.onSubagentAssistantContentUpdated(subagentId, chunk, accumulated);
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
onAssistantReasoningUpdated: (chunk, accumulated) => {
|
|
380
|
+
// Forward assistant reasoning updates to parent via SubagentManager callbacks
|
|
381
|
+
if (this.callbacks?.onSubagentAssistantReasoningUpdated) {
|
|
382
|
+
this.callbacks.onSubagentAssistantReasoningUpdated(subagentId, chunk, accumulated);
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
onToolBlockUpdated: (params) => {
|
|
386
|
+
// Forward tool block updates to parent via SubagentManager callbacks
|
|
387
|
+
if (this.callbacks?.onSubagentToolBlockUpdated) {
|
|
388
|
+
this.callbacks.onSubagentToolBlockUpdated(subagentId, params);
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
// These callbacks will be handled by the parent agent
|
|
392
|
+
onMessagesChange: (messages) => {
|
|
393
|
+
const instance = this.instances.get(subagentId);
|
|
394
|
+
if (instance) {
|
|
395
|
+
instance.messages = messages;
|
|
396
|
+
// Forward subagent message changes to parent via callbacks
|
|
397
|
+
if (this.callbacks?.onSubagentMessagesChange) {
|
|
398
|
+
this.callbacks.onSubagentMessagesChange(subagentId, messages);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
onSessionIdChange: (newSessionId) => {
|
|
403
|
+
// Update the subagent block with the new session ID
|
|
404
|
+
this.parentMessageManager.updateSubagentBlock(subagentId, {
|
|
405
|
+
sessionId: newSessionId,
|
|
406
|
+
});
|
|
407
|
+
},
|
|
408
|
+
};
|
|
409
|
+
}
|
|
259
410
|
}
|
|
@@ -1,20 +1,35 @@
|
|
|
1
1
|
import type { ToolContext, ToolPlugin, ToolResult } from "../tools/types.js";
|
|
2
2
|
import { McpManager } from "./mcpManager.js";
|
|
3
|
+
import { PermissionManager } from "./permissionManager.js";
|
|
3
4
|
import { ChatCompletionFunctionTool } from "openai/resources.js";
|
|
4
|
-
import type { Logger } from "../types/index.js";
|
|
5
|
+
import type { Logger, PermissionMode, PermissionCallback, ILspManager } from "../types/index.js";
|
|
5
6
|
import type { SubagentManager } from "./subagentManager.js";
|
|
6
7
|
import type { SkillManager } from "./skillManager.js";
|
|
7
8
|
export interface ToolManagerOptions {
|
|
8
9
|
mcpManager: McpManager;
|
|
10
|
+
lspManager?: ILspManager;
|
|
9
11
|
logger?: Logger;
|
|
12
|
+
/** Optional permission manager for handling tool permission checks */
|
|
13
|
+
permissionManager?: PermissionManager;
|
|
14
|
+
/** Permission mode for tool execution (defaults to "default") */
|
|
15
|
+
permissionMode?: PermissionMode;
|
|
16
|
+
/** Custom permission callback for tool usage */
|
|
17
|
+
canUseToolCallback?: PermissionCallback;
|
|
10
18
|
}
|
|
11
19
|
/**
|
|
12
20
|
* Tool Manager
|
|
21
|
+
*
|
|
22
|
+
* Manages tool registration and execution with optional permission system integration.
|
|
23
|
+
* Supports both built-in tools and MCP (Model Context Protocol) tools.
|
|
13
24
|
*/
|
|
14
25
|
declare class ToolManager {
|
|
15
26
|
private tools;
|
|
16
27
|
private mcpManager;
|
|
28
|
+
private lspManager?;
|
|
17
29
|
private logger?;
|
|
30
|
+
private permissionManager?;
|
|
31
|
+
private permissionMode?;
|
|
32
|
+
private canUseToolCallback?;
|
|
18
33
|
constructor(options: ToolManagerOptions);
|
|
19
34
|
/**
|
|
20
35
|
* Register a new tool
|
|
@@ -47,9 +62,31 @@ declare class ToolManager {
|
|
|
47
62
|
subagentManager?: SubagentManager;
|
|
48
63
|
skillManager?: SkillManager;
|
|
49
64
|
}): void;
|
|
65
|
+
/**
|
|
66
|
+
* Execute a tool by name with the provided arguments and context
|
|
67
|
+
*
|
|
68
|
+
* Enhances the context with permission-related fields before execution:
|
|
69
|
+
* - permissionMode: The current permission mode (default or bypassPermissions)
|
|
70
|
+
* - canUseToolCallback: Custom permission callback if provided
|
|
71
|
+
* - permissionManager: The PermissionManager instance for permission checks
|
|
72
|
+
*
|
|
73
|
+
* @param name - Name of the tool to execute
|
|
74
|
+
* @param args - Arguments to pass to the tool
|
|
75
|
+
* @param context - Execution context for the tool
|
|
76
|
+
* @returns Promise resolving to the tool execution result
|
|
77
|
+
*/
|
|
50
78
|
execute(name: string, args: Record<string, unknown>, context: ToolContext): Promise<ToolResult>;
|
|
51
79
|
list(): ToolPlugin[];
|
|
52
80
|
getToolsConfig(): ChatCompletionFunctionTool[];
|
|
81
|
+
/**
|
|
82
|
+
* Get the current permission mode
|
|
83
|
+
*/
|
|
84
|
+
getPermissionMode(): PermissionMode;
|
|
85
|
+
/**
|
|
86
|
+
* Set the permission mode
|
|
87
|
+
* @param mode - The new permission mode
|
|
88
|
+
*/
|
|
89
|
+
setPermissionMode(mode: PermissionMode): void;
|
|
53
90
|
}
|
|
54
91
|
export { ToolManager };
|
|
55
92
|
//# sourceMappingURL=toolManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAe7E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAUvC;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,CAAC,IAAI,CAAC,EAAE;QACnC,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B,GAAG,IAAI;IAiCR;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IA2DtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;IAQ9C;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAS1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;CAGrD;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|