wave-agent-sdk 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/agent.d.ts +8 -0
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +49 -240
  4. package/dist/constants/tools.d.ts +0 -2
  5. package/dist/constants/tools.d.ts.map +1 -1
  6. package/dist/constants/tools.js +0 -2
  7. package/dist/core/plugin.d.ts +86 -0
  8. package/dist/core/plugin.d.ts.map +1 -0
  9. package/dist/core/plugin.js +164 -0
  10. package/dist/index.d.ts +1 -4
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -5
  13. package/dist/managers/MemoryRuleManager.d.ts +3 -1
  14. package/dist/managers/MemoryRuleManager.d.ts.map +1 -1
  15. package/dist/managers/MemoryRuleManager.js +2 -1
  16. package/dist/managers/aiManager.d.ts +13 -23
  17. package/dist/managers/aiManager.d.ts.map +1 -1
  18. package/dist/managers/aiManager.js +59 -32
  19. package/dist/managers/backgroundTaskManager.d.ts +3 -1
  20. package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
  21. package/dist/managers/backgroundTaskManager.js +2 -1
  22. package/dist/managers/bashManager.d.ts +4 -4
  23. package/dist/managers/bashManager.d.ts.map +1 -1
  24. package/dist/managers/bashManager.js +5 -2
  25. package/dist/managers/foregroundTaskManager.d.ts +3 -0
  26. package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
  27. package/dist/managers/foregroundTaskManager.js +2 -1
  28. package/dist/managers/hookManager.d.ts +3 -3
  29. package/dist/managers/hookManager.d.ts.map +1 -1
  30. package/dist/managers/hookManager.js +20 -19
  31. package/dist/managers/liveConfigManager.d.ts +6 -13
  32. package/dist/managers/liveConfigManager.d.ts.map +1 -1
  33. package/dist/managers/liveConfigManager.js +50 -45
  34. package/dist/managers/lspManager.d.ts +4 -5
  35. package/dist/managers/lspManager.d.ts.map +1 -1
  36. package/dist/managers/lspManager.js +13 -12
  37. package/dist/managers/mcpManager.d.ts +3 -2
  38. package/dist/managers/mcpManager.d.ts.map +1 -1
  39. package/dist/managers/mcpManager.js +16 -15
  40. package/dist/managers/messageManager.d.ts +5 -7
  41. package/dist/managers/messageManager.d.ts.map +1 -1
  42. package/dist/managers/messageManager.js +12 -7
  43. package/dist/managers/permissionManager.d.ts +6 -4
  44. package/dist/managers/permissionManager.d.ts.map +1 -1
  45. package/dist/managers/permissionManager.js +39 -63
  46. package/dist/managers/planManager.d.ts +4 -6
  47. package/dist/managers/planManager.d.ts.map +1 -1
  48. package/dist/managers/planManager.js +18 -4
  49. package/dist/managers/pluginManager.d.ts +10 -22
  50. package/dist/managers/pluginManager.d.ts.map +1 -1
  51. package/dist/managers/pluginManager.js +27 -14
  52. package/dist/managers/reversionManager.d.ts +4 -3
  53. package/dist/managers/reversionManager.d.ts.map +1 -1
  54. package/dist/managers/reversionManager.js +5 -2
  55. package/dist/managers/skillManager.d.ts +3 -2
  56. package/dist/managers/skillManager.d.ts.map +1 -1
  57. package/dist/managers/skillManager.js +15 -14
  58. package/dist/managers/slashCommandManager.d.ts +9 -16
  59. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  60. package/dist/managers/slashCommandManager.js +21 -10
  61. package/dist/managers/subagentManager.d.ts +7 -17
  62. package/dist/managers/subagentManager.d.ts.map +1 -1
  63. package/dist/managers/subagentManager.js +41 -34
  64. package/dist/managers/toolManager.d.ts +15 -38
  65. package/dist/managers/toolManager.d.ts.map +1 -1
  66. package/dist/managers/toolManager.js +66 -56
  67. package/dist/prompts/index.d.ts +6 -3
  68. package/dist/prompts/index.d.ts.map +1 -1
  69. package/dist/prompts/index.js +8 -16
  70. package/dist/services/MarketplaceService.d.ts.map +1 -1
  71. package/dist/services/MarketplaceService.js +13 -0
  72. package/dist/services/aiService.d.ts +4 -0
  73. package/dist/services/aiService.d.ts.map +1 -1
  74. package/dist/services/aiService.js +47 -7
  75. package/dist/services/configurationService.d.ts.map +1 -1
  76. package/dist/services/configurationService.js +30 -11
  77. package/dist/services/taskManager.d.ts +3 -1
  78. package/dist/services/taskManager.d.ts.map +1 -1
  79. package/dist/services/taskManager.js +2 -1
  80. package/dist/tools/bashTool.js +2 -2
  81. package/dist/tools/editTool.d.ts.map +1 -1
  82. package/dist/tools/editTool.js +9 -1
  83. package/dist/tools/readTool.d.ts.map +1 -1
  84. package/dist/tools/readTool.js +2 -2
  85. package/dist/tools/skillTool.d.ts +2 -4
  86. package/dist/tools/skillTool.d.ts.map +1 -1
  87. package/dist/tools/skillTool.js +61 -61
  88. package/dist/tools/taskOutputTool.js +1 -1
  89. package/dist/tools/taskTool.d.ts +2 -4
  90. package/dist/tools/taskTool.d.ts.map +1 -1
  91. package/dist/tools/taskTool.js +192 -187
  92. package/dist/tools/types.d.ts +11 -1
  93. package/dist/tools/types.d.ts.map +1 -1
  94. package/dist/tools/writeTool.d.ts.map +1 -1
  95. package/dist/tools/writeTool.js +4 -2
  96. package/dist/types/marketplace.d.ts +8 -0
  97. package/dist/types/marketplace.d.ts.map +1 -1
  98. package/dist/types/permissions.d.ts +1 -1
  99. package/dist/types/permissions.d.ts.map +1 -1
  100. package/dist/types/permissions.js +1 -3
  101. package/dist/types/skills.d.ts +0 -2
  102. package/dist/types/skills.d.ts.map +1 -1
  103. package/dist/types/tools.d.ts +0 -15
  104. package/dist/types/tools.d.ts.map +1 -1
  105. package/dist/utils/container.d.ts +31 -0
  106. package/dist/utils/container.d.ts.map +1 -0
  107. package/dist/utils/container.js +79 -0
  108. package/dist/utils/containerSetup.d.ts +26 -0
  109. package/dist/utils/containerSetup.d.ts.map +1 -0
  110. package/dist/utils/containerSetup.js +165 -0
  111. package/dist/utils/editUtils.d.ts +0 -3
  112. package/dist/utils/editUtils.d.ts.map +1 -1
  113. package/dist/utils/editUtils.js +4 -3
  114. package/dist/utils/hookMatcher.d.ts +1 -1
  115. package/dist/utils/hookMatcher.d.ts.map +1 -1
  116. package/dist/utils/hookMatcher.js +2 -2
  117. package/dist/utils/openaiClient.js +2 -2
  118. package/dist/utils/stringUtils.d.ts +6 -0
  119. package/dist/utils/stringUtils.d.ts.map +1 -1
  120. package/dist/utils/stringUtils.js +8 -0
  121. package/package.json +1 -1
  122. package/src/agent.ts +60 -282
  123. package/src/constants/tools.ts +0 -2
  124. package/src/core/plugin.ts +224 -0
  125. package/src/index.ts +1 -6
  126. package/src/managers/MemoryRuleManager.ts +6 -1
  127. package/src/managers/aiManager.ts +83 -58
  128. package/src/managers/backgroundTaskManager.ts +5 -1
  129. package/src/managers/bashManager.ts +9 -4
  130. package/src/managers/foregroundTaskManager.ts +3 -0
  131. package/src/managers/hookManager.ts +21 -23
  132. package/src/managers/liveConfigManager.ts +57 -53
  133. package/src/managers/lspManager.ts +14 -19
  134. package/src/managers/mcpManager.ts +20 -20
  135. package/src/managers/messageManager.ts +19 -12
  136. package/src/managers/permissionManager.ts +45 -70
  137. package/src/managers/planManager.ts +26 -7
  138. package/src/managers/pluginManager.ts +37 -33
  139. package/src/managers/reversionManager.ts +5 -3
  140. package/src/managers/skillManager.ts +19 -20
  141. package/src/managers/slashCommandManager.ts +30 -25
  142. package/src/managers/subagentManager.ts +53 -53
  143. package/src/managers/toolManager.ts +91 -90
  144. package/src/prompts/index.ts +12 -24
  145. package/src/services/MarketplaceService.ts +13 -0
  146. package/src/services/aiService.ts +61 -15
  147. package/src/services/configurationService.ts +34 -13
  148. package/src/services/taskManager.ts +5 -1
  149. package/src/tools/bashTool.ts +2 -2
  150. package/src/tools/editTool.ts +9 -1
  151. package/src/tools/readTool.ts +2 -2
  152. package/src/tools/skillTool.ts +75 -71
  153. package/src/tools/taskOutputTool.ts +1 -1
  154. package/src/tools/taskTool.ts +224 -225
  155. package/src/tools/types.ts +12 -1
  156. package/src/tools/writeTool.ts +4 -2
  157. package/src/types/marketplace.ts +9 -0
  158. package/src/types/permissions.ts +0 -4
  159. package/src/types/skills.ts +0 -3
  160. package/src/types/tools.ts +0 -17
  161. package/src/utils/container.ts +92 -0
  162. package/src/utils/containerSetup.ts +256 -0
  163. package/src/utils/editUtils.ts +4 -3
  164. package/src/utils/hookMatcher.ts +2 -2
  165. package/src/utils/openaiClient.ts +2 -2
  166. package/src/utils/stringUtils.ts +9 -0
  167. package/dist/tools/deleteFileTool.d.ts +0 -6
  168. package/dist/tools/deleteFileTool.d.ts.map +0 -1
  169. package/dist/tools/deleteFileTool.js +0 -100
  170. package/dist/tools/multiEditTool.d.ts +0 -6
  171. package/dist/tools/multiEditTool.d.ts.map +0 -1
  172. package/dist/tools/multiEditTool.js +0 -246
  173. package/src/tools/deleteFileTool.ts +0 -127
  174. package/src/tools/multiEditTool.ts +0 -306
@@ -2,25 +2,26 @@ import { readdir, stat } from "fs/promises";
2
2
  import { join } from "path";
3
3
  import { homedir } from "os";
4
4
  import { parseSkillFile, formatSkillError } from "../utils/skillParser.js";
5
+ import { logger } from "../utils/globalLogger.js";
5
6
  /**
6
7
  * Manages skill discovery and loading
7
8
  */
8
9
  export class SkillManager {
9
- constructor(options = {}) {
10
+ constructor(container, options = {}) {
11
+ this.container = container;
10
12
  this.skillMetadata = new Map();
11
13
  this.skillContent = new Map();
12
14
  this.initialized = false;
13
15
  this.personalSkillsPath =
14
16
  options.personalSkillsPath || join(homedir(), ".wave", "skills");
15
17
  this.scanTimeout = options.scanTimeout || 5000;
16
- this.logger = options.logger;
17
18
  this.workdir = options.workdir || process.cwd();
18
19
  }
19
20
  /**
20
21
  * Initialize the skill manager by discovering available skills
21
22
  */
22
23
  async initialize() {
23
- this.logger?.debug("Initializing SkillManager...");
24
+ logger?.debug("Initializing SkillManager...");
24
25
  try {
25
26
  // Clear existing data before discovery
26
27
  this.skillMetadata.clear();
@@ -35,16 +36,16 @@ export class SkillManager {
35
36
  });
36
37
  // Log any discovery errors
37
38
  if (discovery.errors.length > 0) {
38
- this.logger?.warn(`Found ${discovery.errors.length} skill discovery errors`);
39
+ logger?.warn(`Found ${discovery.errors.length} skill discovery errors`);
39
40
  discovery.errors.forEach((error) => {
40
- this.logger?.warn(`Skill error in ${error.skillPath}: ${error.message}`);
41
+ logger?.warn(`Skill error in ${error.skillPath}: ${error.message}`);
41
42
  });
42
43
  }
43
44
  this.initialized = true;
44
- this.logger?.debug(`SkillManager initialized with ${this.skillMetadata.size} skills`);
45
+ logger?.debug(`SkillManager initialized with ${this.skillMetadata.size} skills`);
45
46
  }
46
47
  catch (error) {
47
- this.logger?.error("Failed to initialize SkillManager:", error);
48
+ logger?.error("Failed to initialize SkillManager:", error);
48
49
  throw error;
49
50
  }
50
51
  }
@@ -74,10 +75,10 @@ export class SkillManager {
74
75
  // Return skill content that was loaded during initialization
75
76
  const skill = this.skillContent.get(skillName);
76
77
  if (skill) {
77
- this.logger?.debug(`Skill '${skillName}' retrieved from loaded content`);
78
+ logger?.debug(`Skill '${skillName}' retrieved from loaded content`);
78
79
  return skill;
79
80
  }
80
- this.logger?.debug(`Skill '${skillName}' not found`);
81
+ logger?.debug(`Skill '${skillName}' not found`);
81
82
  return null;
82
83
  }
83
84
  /**
@@ -105,7 +106,7 @@ export class SkillManager {
105
106
  const skillsPath = type === "personal" ? basePath : join(basePath, ".wave", "skills");
106
107
  try {
107
108
  const skillDirs = await this.findSkillDirectories(skillsPath);
108
- this.logger?.debug(`Found ${skillDirs.length} potential skill directories in ${skillsPath}`);
109
+ logger?.debug(`Found ${skillDirs.length} potential skill directories in ${skillsPath}`);
109
110
  for (const skillDir of skillDirs) {
110
111
  try {
111
112
  const skillFilePath = join(skillDir, "SKILL.md");
@@ -157,7 +158,7 @@ export class SkillManager {
157
158
  }
158
159
  }
159
160
  catch (error) {
160
- this.logger?.debug(`Could not scan ${skillsPath}: ${error instanceof Error ? error.message : String(error)}`);
161
+ logger?.debug(`Could not scan ${skillsPath}: ${error instanceof Error ? error.message : String(error)}`);
161
162
  // Not an error - the directory might not exist yet
162
163
  }
163
164
  return collection;
@@ -185,7 +186,7 @@ export class SkillManager {
185
186
  */
186
187
  async executeSkill(args) {
187
188
  const { skill_name } = args;
188
- this.logger?.debug(`Invoking skill: ${skill_name}`);
189
+ logger?.debug(`Invoking skill: ${skill_name}`);
189
190
  try {
190
191
  // Load the skill
191
192
  const skill = await this.loadSkill(skill_name);
@@ -209,7 +210,7 @@ export class SkillManager {
209
210
  };
210
211
  }
211
212
  catch (error) {
212
- this.logger?.error(`Failed to execute skill '${skill_name}':`, error);
213
+ logger?.error(`Failed to execute skill '${skill_name}':`, error);
213
214
  return {
214
215
  content: `❌ **Error executing skill**: ${error instanceof Error ? error.message : String(error)}`,
215
216
  };
@@ -252,6 +253,6 @@ export class SkillManager {
252
253
  });
253
254
  this.skillContent.set(skill.name, skill);
254
255
  }
255
- this.logger?.debug(`Registered ${skills.length} plugin skills. Total skills: ${this.skillMetadata.size}`);
256
+ logger?.debug(`Registered ${skills.length} plugin skills. Total skills: ${this.skillMetadata.size}`);
256
257
  }
257
258
  }
@@ -1,26 +1,19 @@
1
- import type { MessageManager } from "./messageManager.js";
2
- import type { AIManager } from "./aiManager.js";
3
- import type { BackgroundTaskManager } from "./backgroundTaskManager.js";
4
- import type { TaskManager } from "../services/taskManager.js";
5
- import type { SlashCommand, CustomSlashCommand, Logger } from "../types/index.js";
1
+ import type { SlashCommand, CustomSlashCommand } from "../types/index.js";
2
+ import { Container } from "../utils/container.js";
6
3
  export interface SlashCommandManagerOptions {
7
- messageManager: MessageManager;
8
- aiManager: AIManager;
9
- backgroundTaskManager: BackgroundTaskManager;
10
- taskManager: TaskManager;
11
4
  workdir: string;
12
- logger?: Logger;
13
5
  }
14
6
  export declare class SlashCommandManager {
7
+ private container;
15
8
  private commands;
16
9
  private customCommands;
17
- private messageManager;
18
- private aiManager;
19
- private backgroundTaskManager;
20
- private taskManager;
21
10
  private workdir;
22
- private logger?;
23
- constructor(options: SlashCommandManagerOptions);
11
+ constructor(container: Container, options: SlashCommandManagerOptions);
12
+ initialize(): void;
13
+ private get messageManager();
14
+ private get aiManager();
15
+ private get backgroundTaskManager();
16
+ private get taskManager();
24
17
  private initializeBuiltinCommands;
25
18
  /**
26
19
  * Load custom commands from filesystem
@@ -1 +1 @@
1
- {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAY/C,OAAO,CAAC,yBAAyB;IAsCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IAwDP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
1
+ {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQ1E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAclD,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAM5B,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,0BAA0B;IAK9B,UAAU,IAAI,IAAI;IAKzB,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,CAAC,yBAAyB;IAsCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IAwDP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
@@ -5,19 +5,30 @@ import { exec } from "child_process";
5
5
  import { promisify } from "util";
6
6
  import { INIT_PROMPT } from "../prompts/index.js";
7
7
  const execAsync = promisify(exec);
8
+ import { logger } from "../utils/globalLogger.js";
8
9
  export class SlashCommandManager {
9
- constructor(options) {
10
+ constructor(container, options) {
11
+ this.container = container;
10
12
  this.commands = new Map();
11
13
  this.customCommands = new Map();
12
- this.messageManager = options.messageManager;
13
- this.aiManager = options.aiManager;
14
- this.backgroundTaskManager = options.backgroundTaskManager;
15
- this.taskManager = options.taskManager;
16
14
  this.workdir = options.workdir;
17
- this.logger = options.logger;
15
+ }
16
+ initialize() {
18
17
  this.initializeBuiltinCommands();
19
18
  this.loadCustomCommands();
20
19
  }
20
+ get messageManager() {
21
+ return this.container.get("MessageManager");
22
+ }
23
+ get aiManager() {
24
+ return this.container.get("AIManager");
25
+ }
26
+ get backgroundTaskManager() {
27
+ return this.container.get("BackgroundTaskManager");
28
+ }
29
+ get taskManager() {
30
+ return this.container.get("TaskManager");
31
+ }
21
32
  initializeBuiltinCommands() {
22
33
  // Register built-in clear command
23
34
  this.registerCommand({
@@ -87,10 +98,10 @@ export class SlashCommandManager {
87
98
  },
88
99
  });
89
100
  }
90
- this.logger?.debug(`Loaded ${customCommands.length} custom commands`);
101
+ logger?.debug(`Loaded ${customCommands.length} custom commands`);
91
102
  }
92
103
  catch (error) {
93
- this.logger?.warn("Failed to load custom commands:", error);
104
+ logger?.warn("Failed to load custom commands:", error);
94
105
  }
95
106
  }
96
107
  /**
@@ -129,7 +140,7 @@ export class SlashCommandManager {
129
140
  },
130
141
  });
131
142
  }
132
- this.logger?.debug(`Registered ${commands.length} commands from plugin '${pluginName}'`);
143
+ logger?.debug(`Registered ${commands.length} commands from plugin '${pluginName}'`);
133
144
  }
134
145
  /**
135
146
  * Reload custom commands (useful for development)
@@ -271,7 +282,7 @@ export class SlashCommandManager {
271
282
  });
272
283
  }
273
284
  catch (error) {
274
- this.logger?.error(`Failed to execute custom command '${commandName}':`, error);
285
+ logger?.error(`Failed to execute custom command '${commandName}':`, error);
275
286
  // Add error to message manager
276
287
  this.messageManager.addErrorBlock(`Failed to execute custom command '${commandName}': ${error instanceof Error ? error.message : String(error)}`);
277
288
  }
@@ -1,12 +1,10 @@
1
- import type { MemoryRuleManager } from "./MemoryRuleManager.js";
2
1
  import type { SubagentConfiguration } from "../utils/subagentParser.js";
3
- import type { Message, Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
2
+ import type { Message, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
4
3
  import { AIManager } from "./aiManager.js";
5
4
  import { MessageManager } from "./messageManager.js";
6
5
  import { ToolManager } from "./toolManager.js";
7
- import { HookManager } from "./hookManager.js";
8
- import { BackgroundTaskManager } from "./backgroundTaskManager.js";
9
6
  import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
7
+ import { Container } from "../utils/container.js";
10
8
  export interface SubagentManagerCallbacks {
11
9
  /** Triggered when subagent adds user message */
12
10
  onSubagentUserMessageAdded?: (subagentId: string, params: UserMessageParams) => void;
@@ -33,41 +31,33 @@ export interface SubagentInstance {
33
31
  messages: Message[];
34
32
  lastTools: string[];
35
33
  subagentType: string;
34
+ description: string;
36
35
  backgroundTaskId?: string;
37
36
  onUpdate?: () => void;
38
37
  }
39
38
  export interface SubagentManagerOptions {
40
39
  workdir: string;
41
- parentToolManager: ToolManager;
42
- taskManager: import("../services/taskManager.js").TaskManager;
43
40
  callbacks?: SubagentManagerCallbacks;
44
- logger?: Logger;
45
41
  getGatewayConfig: () => GatewayConfig;
46
42
  getModelConfig: () => ModelConfig;
47
43
  getMaxInputTokens: () => number;
48
44
  getLanguage: () => string | undefined;
49
- hookManager?: HookManager;
45
+ getEnvironmentVars?: () => Record<string, string>;
50
46
  onUsageAdded?: (usage: Usage) => void;
51
- backgroundTaskManager?: BackgroundTaskManager;
52
- memoryRuleManager?: MemoryRuleManager;
53
47
  }
54
48
  export declare class SubagentManager {
55
49
  private instances;
56
50
  private cachedConfigurations;
57
51
  private workdir;
58
- private parentToolManager;
59
- private taskManager;
60
52
  private callbacks?;
61
- private logger?;
62
53
  private getGatewayConfig;
63
54
  private getModelConfig;
64
55
  private getMaxInputTokens;
65
56
  private getLanguage;
66
- private hookManager?;
57
+ private getEnvironmentVars?;
67
58
  private onUsageAdded?;
68
- private backgroundTaskManager?;
69
- private memoryRuleManager?;
70
- constructor(options: SubagentManagerOptions);
59
+ private container;
60
+ constructor(container: Container, options: SubagentManagerOptions);
71
61
  /**
72
62
  * Initialize the SubagentManager by loading and caching configurations
73
63
  */
@@ -1 +1 @@
1
- {"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,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,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,wBAAwB;IAEvC,gDAAgD;IAChD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,KACtB,IAAI,CAAC;IACV,wDAAwD;IACxD,+BAA+B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,0DAA0D;IAC1D,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,4DAA4D;IAC5D,mCAAmC,CAAC,EAAE,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,oDAAoD;IACpD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0BAA0B,KAC/B,IAAI,CAAC;IACV,8CAA8C;IAC9C,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7E,yDAAyD;IACzD,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,IAAI,CAAC;CACX;AAED,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,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,WAAW,CAAC;IAC/B,WAAW,EAAE,OAAO,4BAA4B,EAAE,WAAW,CAAC;IAC9D,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,aAAa,CAAC;IACtC,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;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,WAAW,CAAmD;IACtE,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAElC,OAAO,EAAE,sBAAsB;IAgB3C;;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,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,EACD,eAAe,CAAC,EAAE,OAAO,EACzB,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAkF5B;;;;;OAKG;IACG,WAAW,CACf,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,MAAM,CAAC;IAoEZ,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAiC/C,eAAe;IAoI7B;;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,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzC;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,EAAE;IAOxC;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACH,OAAO,CAAC,uBAAuB;CAqFhC"}
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,aAAa,EACb,WAAW,EACX,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,wBAAwB;IAEvC,gDAAgD;IAChD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,KACtB,IAAI,CAAC;IACV,wDAAwD;IACxD,+BAA+B,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,0DAA0D;IAC1D,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,4DAA4D;IAC5D,mCAAmC,CAAC,EAAE,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,oDAAoD;IACpD,0BAA0B,CAAC,EAAE,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,0BAA0B,KAC/B,IAAI,CAAC;IACV,8CAA8C;IAC9C,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7E,yDAAyD;IACzD,iCAAiC,CAAC,EAAE,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,KACX,IAAI,CAAC;CACX;AAED,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,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,gBAAgB,EAAE,MAAM,aAAa,CAAC;IACtC,cAAc,EAAE,MAAM,WAAW,CAAC;IAClC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC,kBAAkB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,oBAAoB,CAAwC;IAEpE,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,cAAc,CAAoB;IAC1C,OAAO,CAAC,iBAAiB,CAAe;IACxC,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,kBAAkB,CAAC,CAA+B;IAC1D,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB;IAYjE;;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,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;KACvB,EACD,eAAe,CAAC,EAAE,OAAO,EACzB,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAmF5B;;;;;OAKG;IACG,WAAW,CACf,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,WAAW,EACzB,eAAe,CAAC,EAAE,OAAO,GACxB,OAAO,CAAC,MAAM,CAAC;IAwEZ,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAqC/C,eAAe;IAwI7B;;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,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAYzC;;OAEG;IACH,kBAAkB,IAAI,gBAAgB,EAAE;IAOxC;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;OAGG;IACH,OAAO,CAAC,uBAAuB;CAqFhC"}
@@ -3,22 +3,18 @@ import { AIManager } from "./aiManager.js";
3
3
  import { MessageManager } from "./messageManager.js";
4
4
  import { addConsolidatedAbortListener, createAbortPromise, } from "../utils/abortUtils.js";
5
5
  export class SubagentManager {
6
- constructor(options) {
6
+ constructor(container, options) {
7
7
  this.instances = new Map();
8
8
  this.cachedConfigurations = null;
9
+ this.container = container;
9
10
  this.workdir = options.workdir;
10
- this.parentToolManager = options.parentToolManager;
11
- this.taskManager = options.taskManager;
12
11
  this.callbacks = options.callbacks; // Store SubagentManagerCallbacks
13
- this.logger = options.logger;
14
12
  this.getGatewayConfig = options.getGatewayConfig;
15
13
  this.getModelConfig = options.getModelConfig;
16
14
  this.getMaxInputTokens = options.getMaxInputTokens;
17
15
  this.getLanguage = options.getLanguage;
18
- this.hookManager = options.hookManager;
16
+ this.getEnvironmentVars = options.getEnvironmentVars;
19
17
  this.onUsageAdded = options.onUsageAdded;
20
- this.backgroundTaskManager = options.backgroundTaskManager;
21
- this.memoryRuleManager = options.memoryRuleManager;
22
18
  }
23
19
  /**
24
20
  * Initialize the SubagentManager by loading and caching configurations
@@ -56,33 +52,29 @@ export class SubagentManager {
56
52
  * Create a new subagent instance with isolated managers
57
53
  */
58
54
  async createInstance(configuration, parameters, runInBackground, onUpdate) {
59
- if (!this.parentToolManager) {
60
- throw new Error("SubagentManager not properly initialized - call initialize() first");
55
+ const parentToolManager = this.container.get("ToolManager");
56
+ if (!parentToolManager) {
57
+ throw new Error("SubagentManager not properly initialized - ToolManager not found in container");
61
58
  }
62
59
  const subagentId = randomUUID();
60
+ // Create a child container for the subagent to isolate its managers
61
+ const subagentContainer = this.container.createChild();
63
62
  // Create isolated MessageManager for the subagent
64
63
  const subagentCallbacks = this.createSubagentCallbacks(subagentId);
65
- const messageManager = new MessageManager({
64
+ const messageManager = new MessageManager(subagentContainer, {
66
65
  callbacks: subagentCallbacks,
67
66
  workdir: this.workdir,
68
- logger: this.logger,
69
67
  sessionType: "subagent",
70
68
  subagentType: parameters.subagent_type,
71
- memoryRuleManager: this.memoryRuleManager,
72
69
  });
70
+ subagentContainer.register("MessageManager", messageManager);
73
71
  // Use the parent tool manager directly - tool restrictions will be handled by allowedTools parameter
74
- const toolManager = this.parentToolManager;
72
+ const toolManager = parentToolManager;
75
73
  // Create isolated AIManager for the subagent
76
- const aiManager = new AIManager({
77
- messageManager,
78
- toolManager,
79
- taskManager: this.taskManager,
80
- logger: this.logger,
74
+ const aiManager = new AIManager(subagentContainer, {
81
75
  workdir: this.workdir,
82
76
  systemPrompt: configuration.systemPrompt,
83
77
  subagentType: parameters.subagent_type, // Pass subagent type for hook context
84
- hookManager: this.hookManager,
85
- permissionManager: this.parentToolManager.getPermissionManager(),
86
78
  getGatewayConfig: this.getGatewayConfig,
87
79
  getModelConfig: () => {
88
80
  // Determine model dynamically each time
@@ -107,10 +99,12 @@ export class SubagentManager {
107
99
  },
108
100
  getMaxInputTokens: this.getMaxInputTokens,
109
101
  getLanguage: this.getLanguage,
102
+ getEnvironmentVars: this.getEnvironmentVars,
110
103
  callbacks: {
111
104
  onUsageAdded: this.onUsageAdded,
112
105
  },
113
106
  });
107
+ subagentContainer.register("AIManager", aiManager);
114
108
  const instance = {
115
109
  subagentId,
116
110
  configuration,
@@ -121,6 +115,7 @@ export class SubagentManager {
121
115
  messages: [],
122
116
  lastTools: [], // Initialize lastTools
123
117
  subagentType: parameters.subagent_type, // Store the subagent type
118
+ description: parameters.description, // Store the AI-generated description
124
119
  onUpdate,
125
120
  };
126
121
  this.instances.set(subagentId, instance);
@@ -140,15 +135,18 @@ export class SubagentManager {
140
135
  }
141
136
  // Set status to active and update parent
142
137
  this.updateInstanceStatus(instance.subagentId, "active");
143
- if (runInBackground && this.backgroundTaskManager) {
144
- const taskId = this.backgroundTaskManager.generateId();
138
+ const backgroundTaskManager = this.container.has("BackgroundTaskManager")
139
+ ? this.container.get("BackgroundTaskManager")
140
+ : undefined;
141
+ if (runInBackground && backgroundTaskManager) {
142
+ const taskId = backgroundTaskManager.generateId();
145
143
  const startTime = Date.now();
146
- this.backgroundTaskManager.addTask({
144
+ backgroundTaskManager.addTask({
147
145
  id: taskId,
148
146
  type: "subagent",
149
147
  status: "running",
150
148
  startTime,
151
- description: instance.configuration.description,
149
+ description: instance.description,
152
150
  stdout: "",
153
151
  stderr: "",
154
152
  subagentId: instance.subagentId,
@@ -162,7 +160,7 @@ export class SubagentManager {
162
160
  (async () => {
163
161
  try {
164
162
  const result = await this.internalExecute(instance, prompt, abortSignal);
165
- const task = this.backgroundTaskManager?.getTask(taskId);
163
+ const task = backgroundTaskManager?.getTask(taskId);
166
164
  if (task) {
167
165
  task.status = "completed";
168
166
  task.stdout = result;
@@ -171,7 +169,7 @@ export class SubagentManager {
171
169
  }
172
170
  }
173
171
  catch (error) {
174
- const task = this.backgroundTaskManager?.getTask(taskId);
172
+ const task = backgroundTaskManager?.getTask(taskId);
175
173
  if (task) {
176
174
  task.status = "failed";
177
175
  task.stderr =
@@ -195,17 +193,20 @@ export class SubagentManager {
195
193
  if (!instance) {
196
194
  throw new Error(`Subagent instance ${subagentId} not found`);
197
195
  }
198
- if (!this.backgroundTaskManager) {
196
+ const backgroundTaskManager = this.container.has("BackgroundTaskManager")
197
+ ? this.container.get("BackgroundTaskManager")
198
+ : undefined;
199
+ if (!backgroundTaskManager) {
199
200
  throw new Error("BackgroundTaskManager not available");
200
201
  }
201
- const taskId = this.backgroundTaskManager.generateId();
202
+ const taskId = backgroundTaskManager.generateId();
202
203
  const startTime = Date.now();
203
- this.backgroundTaskManager.addTask({
204
+ backgroundTaskManager.addTask({
204
205
  id: taskId,
205
206
  type: "subagent",
206
207
  status: "running",
207
208
  startTime,
208
- description: instance.configuration.description,
209
+ description: instance.description,
209
210
  stdout: "",
210
211
  stderr: "",
211
212
  subagentId: instance.subagentId,
@@ -293,9 +294,12 @@ export class SubagentManager {
293
294
  const response = textBlocks.map((block) => block.content).join("\n");
294
295
  // Update status to completed and update parent
295
296
  this.updateInstanceStatus(instance.subagentId, "completed");
297
+ const backgroundTaskManager = this.container.has("BackgroundTaskManager")
298
+ ? this.container.get("BackgroundTaskManager")
299
+ : undefined;
296
300
  // If this was transitioned to background, update the background task
297
- if (instance.backgroundTaskId && this.backgroundTaskManager) {
298
- const task = this.backgroundTaskManager.getTask(instance.backgroundTaskId);
301
+ if (instance.backgroundTaskId && backgroundTaskManager) {
302
+ const task = backgroundTaskManager.getTask(instance.backgroundTaskId);
299
303
  if (task) {
300
304
  task.status = "completed";
301
305
  task.stdout = response || "Task completed with no text response";
@@ -308,9 +312,12 @@ export class SubagentManager {
308
312
  return response || "Task completed with no text response";
309
313
  }
310
314
  catch (error) {
315
+ const backgroundTaskManager = this.container.has("BackgroundTaskManager")
316
+ ? this.container.get("BackgroundTaskManager")
317
+ : undefined;
311
318
  // If this was transitioned to background, update the background task with error
312
- if (instance.backgroundTaskId && this.backgroundTaskManager) {
313
- const task = this.backgroundTaskManager.getTask(instance.backgroundTaskId);
319
+ if (instance.backgroundTaskId && backgroundTaskManager) {
320
+ const task = backgroundTaskManager.getTask(instance.backgroundTaskId);
314
321
  if (task) {
315
322
  task.status = "failed";
316
323
  task.stderr = error instanceof Error ? error.message : String(error);
@@ -1,29 +1,12 @@
1
1
  import type { ToolContext, ToolPlugin, ToolResult } from "../tools/types.js";
2
- import { McpManager } from "./mcpManager.js";
3
2
  import { PermissionManager } from "./permissionManager.js";
4
3
  import { ChatCompletionFunctionTool } from "openai/resources.js";
5
- import type { Logger, PermissionMode, PermissionCallback, ILspManager } from "../types/index.js";
6
- import type { SubagentManager } from "./subagentManager.js";
7
- import type { SkillManager } from "./skillManager.js";
8
- import { ReversionManager } from "./reversionManager.js";
4
+ import type { PermissionMode } from "../types/index.js";
5
+ import { Container } from "../utils/container.js";
9
6
  export interface ToolManagerOptions {
10
- mcpManager: McpManager;
11
- lspManager?: ILspManager;
12
- logger?: Logger;
13
- /** Permission manager for handling tool permission checks */
14
- permissionManager?: PermissionManager;
15
- /** Foreground task manager for backgrounding tasks */
16
- foregroundTaskManager?: import("../types/processes.js").IForegroundTaskManager;
17
- /** Task manager for task management */
18
- taskManager?: import("../services/taskManager.js").TaskManager;
19
- /** Reversion manager for file snapshots */
20
- reversionManager?: ReversionManager;
21
- /** Background task manager for background execution */
22
- backgroundTaskManager?: import("./backgroundTaskManager.js").BackgroundTaskManager;
23
- /** Permission mode for tool execution (defaults to "default") */
24
- permissionMode?: PermissionMode;
25
- /** Custom permission callback for tool usage */
26
- canUseToolCallback?: PermissionCallback;
7
+ container: Container;
8
+ /** Optional list of tool names to enable */
9
+ tools?: string[];
27
10
  }
28
11
  /**
29
12
  * Tool Manager
@@ -32,18 +15,11 @@ export interface ToolManagerOptions {
32
15
  * Supports both built-in tools and MCP (Model Context Protocol) tools.
33
16
  */
34
17
  declare class ToolManager {
35
- private tools;
36
- private mcpManager;
37
- private lspManager?;
38
- private logger?;
39
- private permissionManager?;
40
- private foregroundTaskManager?;
41
- private reversionManager?;
42
- private taskManager?;
43
- private backgroundTaskManager?;
44
- private permissionMode?;
45
- private canUseToolCallback?;
18
+ private toolsRegistry;
19
+ private tools?;
20
+ private container;
46
21
  constructor(options: ToolManagerOptions);
22
+ private get mcpManager();
47
23
  /**
48
24
  * Register a new tool
49
25
  */
@@ -52,7 +28,7 @@ declare class ToolManager {
52
28
  * Initialize built-in tools. Can be called with dependencies for tools that require them.
53
29
  *
54
30
  * This method can be called multiple times safely. When called without dependencies,
55
- * it registers basic tools (Bash, Read, Write, TodoWrite, etc.). When called with
31
+ * it registers basic tools (Bash, Read, Write, TaskCreate, etc.). When called with
56
32
  * dependencies, it also registers tools that require managers (Task, Skill).
57
33
  *
58
34
  * @param deps Optional dependencies for advanced tools
@@ -71,10 +47,11 @@ declare class ToolManager {
71
47
  * });
72
48
  * ```
73
49
  */
74
- initializeBuiltInTools(deps?: {
75
- subagentManager?: SubagentManager;
76
- skillManager?: SkillManager;
77
- }): void;
50
+ initializeBuiltInTools(): void;
51
+ /**
52
+ * Check if a tool should be enabled based on tools configuration
53
+ */
54
+ private shouldEnableTool;
78
55
  /**
79
56
  * Execute a tool by name with the provided arguments and context
80
57
  *
@@ -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;AAwB7E,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,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,OAAO,uBAAuB,EAAE,sBAAsB,CAAC;IAC/E,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,4BAA4B,EAAE,WAAW,CAAC;IAC/D,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,OAAO,4BAA4B,EAAE,qBAAqB,CAAC;IACnF,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,qBAAqB,CAAC,CAAyD;IACvF,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,WAAW,CAAC,CAAmD;IACvE,OAAO,CAAC,qBAAqB,CAAC,CAA6D;IAC3F,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAcvC;;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;IAsCR;;;;;;;;;;;;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;IAgEtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;IAmB9C;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAS1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAGd;AAGD,OAAO,EAAE,WAAW,EAAE,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;AAuB7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,SAAS,CAAY;gBAEjB,OAAO,EAAE,kBAAkB;IAKvC,OAAO,KAAK,UAAU,GAErB;IAED;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,IAAI,IAAI;IA6BrC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;;;;;;;;;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;IAqFtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;IAmB9C;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAa1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAKd;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}