wave-agent-sdk 0.0.8 → 0.0.11

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 (236) hide show
  1. package/dist/agent.d.ts +92 -23
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +351 -137
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +3 -0
  7. package/dist/managers/aiManager.d.ts +14 -36
  8. package/dist/managers/aiManager.d.ts.map +1 -1
  9. package/dist/managers/aiManager.js +74 -77
  10. package/dist/managers/backgroundBashManager.d.ts.map +1 -1
  11. package/dist/managers/backgroundBashManager.js +4 -3
  12. package/dist/managers/hookManager.d.ts +3 -8
  13. package/dist/managers/hookManager.d.ts.map +1 -1
  14. package/dist/managers/hookManager.js +39 -29
  15. package/dist/managers/liveConfigManager.d.ts +55 -18
  16. package/dist/managers/liveConfigManager.d.ts.map +1 -1
  17. package/dist/managers/liveConfigManager.js +372 -90
  18. package/dist/managers/lspManager.d.ts +43 -0
  19. package/dist/managers/lspManager.d.ts.map +1 -0
  20. package/dist/managers/lspManager.js +326 -0
  21. package/dist/managers/messageManager.d.ts +8 -16
  22. package/dist/managers/messageManager.d.ts.map +1 -1
  23. package/dist/managers/messageManager.js +52 -74
  24. package/dist/managers/permissionManager.d.ts +75 -0
  25. package/dist/managers/permissionManager.d.ts.map +1 -0
  26. package/dist/managers/permissionManager.js +368 -0
  27. package/dist/managers/skillManager.d.ts +1 -0
  28. package/dist/managers/skillManager.d.ts.map +1 -1
  29. package/dist/managers/skillManager.js +2 -1
  30. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  31. package/dist/managers/slashCommandManager.js +0 -1
  32. package/dist/managers/subagentManager.d.ts +8 -23
  33. package/dist/managers/subagentManager.d.ts.map +1 -1
  34. package/dist/managers/subagentManager.js +97 -117
  35. package/dist/managers/toolManager.d.ts +38 -1
  36. package/dist/managers/toolManager.d.ts.map +1 -1
  37. package/dist/managers/toolManager.js +66 -2
  38. package/dist/services/aiService.d.ts +3 -1
  39. package/dist/services/aiService.d.ts.map +1 -1
  40. package/dist/services/aiService.js +123 -30
  41. package/dist/services/configurationService.d.ts +116 -0
  42. package/dist/services/configurationService.d.ts.map +1 -0
  43. package/dist/services/configurationService.js +585 -0
  44. package/dist/services/fileWatcher.d.ts.map +1 -1
  45. package/dist/services/fileWatcher.js +5 -6
  46. package/dist/services/hook.d.ts +7 -124
  47. package/dist/services/hook.d.ts.map +1 -1
  48. package/dist/services/hook.js +46 -458
  49. package/dist/services/jsonlHandler.d.ts +24 -15
  50. package/dist/services/jsonlHandler.d.ts.map +1 -1
  51. package/dist/services/jsonlHandler.js +67 -88
  52. package/dist/services/memory.d.ts +0 -9
  53. package/dist/services/memory.d.ts.map +1 -1
  54. package/dist/services/memory.js +2 -49
  55. package/dist/services/session.d.ts +82 -33
  56. package/dist/services/session.d.ts.map +1 -1
  57. package/dist/services/session.js +275 -181
  58. package/dist/tools/bashTool.d.ts.map +1 -1
  59. package/dist/tools/bashTool.js +109 -11
  60. package/dist/tools/deleteFileTool.d.ts.map +1 -1
  61. package/dist/tools/deleteFileTool.js +25 -0
  62. package/dist/tools/editTool.d.ts.map +1 -1
  63. package/dist/tools/editTool.js +30 -6
  64. package/dist/tools/lspTool.d.ts +6 -0
  65. package/dist/tools/lspTool.d.ts.map +1 -0
  66. package/dist/tools/lspTool.js +589 -0
  67. package/dist/tools/multiEditTool.d.ts.map +1 -1
  68. package/dist/tools/multiEditTool.js +26 -7
  69. package/dist/tools/readTool.d.ts.map +1 -1
  70. package/dist/tools/readTool.js +111 -2
  71. package/dist/tools/skillTool.js +2 -2
  72. package/dist/tools/todoWriteTool.d.ts.map +1 -1
  73. package/dist/tools/todoWriteTool.js +23 -0
  74. package/dist/tools/types.d.ts +11 -8
  75. package/dist/tools/types.d.ts.map +1 -1
  76. package/dist/tools/writeTool.d.ts.map +1 -1
  77. package/dist/tools/writeTool.js +25 -9
  78. package/dist/types/commands.d.ts +0 -1
  79. package/dist/types/commands.d.ts.map +1 -1
  80. package/dist/types/config.d.ts +4 -0
  81. package/dist/types/config.d.ts.map +1 -1
  82. package/dist/types/configuration.d.ts +69 -0
  83. package/dist/types/configuration.d.ts.map +1 -0
  84. package/dist/types/configuration.js +8 -0
  85. package/dist/types/core.d.ts +10 -0
  86. package/dist/types/core.d.ts.map +1 -1
  87. package/dist/types/environment.d.ts +41 -0
  88. package/dist/types/environment.d.ts.map +1 -1
  89. package/dist/types/fileSearch.d.ts +5 -0
  90. package/dist/types/fileSearch.d.ts.map +1 -0
  91. package/dist/types/fileSearch.js +1 -0
  92. package/dist/types/hooks.d.ts +11 -2
  93. package/dist/types/hooks.d.ts.map +1 -1
  94. package/dist/types/hooks.js +1 -7
  95. package/dist/types/index.d.ts +5 -0
  96. package/dist/types/index.d.ts.map +1 -1
  97. package/dist/types/index.js +5 -0
  98. package/dist/types/lsp.d.ts +90 -0
  99. package/dist/types/lsp.d.ts.map +1 -0
  100. package/dist/types/lsp.js +4 -0
  101. package/dist/types/messaging.d.ts +6 -11
  102. package/dist/types/messaging.d.ts.map +1 -1
  103. package/dist/types/permissions.d.ts +39 -0
  104. package/dist/types/permissions.d.ts.map +1 -0
  105. package/dist/types/permissions.js +12 -0
  106. package/dist/types/session.d.ts +1 -6
  107. package/dist/types/session.d.ts.map +1 -1
  108. package/dist/types/skills.d.ts +1 -0
  109. package/dist/types/skills.d.ts.map +1 -1
  110. package/dist/types/tools.d.ts +35 -0
  111. package/dist/types/tools.d.ts.map +1 -0
  112. package/dist/types/tools.js +4 -0
  113. package/dist/utils/abortUtils.d.ts +34 -0
  114. package/dist/utils/abortUtils.d.ts.map +1 -0
  115. package/dist/utils/abortUtils.js +92 -0
  116. package/dist/utils/bashHistory.d.ts +4 -0
  117. package/dist/utils/bashHistory.d.ts.map +1 -1
  118. package/dist/utils/bashHistory.js +21 -4
  119. package/dist/utils/bashParser.d.ts +24 -0
  120. package/dist/utils/bashParser.d.ts.map +1 -0
  121. package/dist/utils/bashParser.js +413 -0
  122. package/dist/utils/builtinSubagents.d.ts +7 -0
  123. package/dist/utils/builtinSubagents.d.ts.map +1 -0
  124. package/dist/utils/builtinSubagents.js +65 -0
  125. package/dist/utils/cacheControlUtils.d.ts +8 -33
  126. package/dist/utils/cacheControlUtils.d.ts.map +1 -1
  127. package/dist/utils/cacheControlUtils.js +83 -126
  128. package/dist/utils/constants.d.ts +0 -12
  129. package/dist/utils/constants.d.ts.map +1 -1
  130. package/dist/utils/constants.js +1 -13
  131. package/dist/utils/convertMessagesForAPI.d.ts +2 -1
  132. package/dist/utils/convertMessagesForAPI.d.ts.map +1 -1
  133. package/dist/utils/convertMessagesForAPI.js +33 -14
  134. package/dist/utils/fileSearch.d.ts +14 -0
  135. package/dist/utils/fileSearch.d.ts.map +1 -0
  136. package/dist/utils/fileSearch.js +88 -0
  137. package/dist/utils/fileUtils.d.ts +14 -2
  138. package/dist/utils/fileUtils.d.ts.map +1 -1
  139. package/dist/utils/fileUtils.js +101 -17
  140. package/dist/utils/globalLogger.d.ts +0 -14
  141. package/dist/utils/globalLogger.d.ts.map +1 -1
  142. package/dist/utils/globalLogger.js +0 -16
  143. package/dist/utils/markdownParser.d.ts.map +1 -1
  144. package/dist/utils/markdownParser.js +1 -17
  145. package/dist/utils/messageOperations.d.ts +1 -11
  146. package/dist/utils/messageOperations.d.ts.map +1 -1
  147. package/dist/utils/messageOperations.js +7 -24
  148. package/dist/utils/pathEncoder.d.ts +4 -0
  149. package/dist/utils/pathEncoder.d.ts.map +1 -1
  150. package/dist/utils/pathEncoder.js +16 -9
  151. package/dist/utils/pathSafety.d.ts +10 -0
  152. package/dist/utils/pathSafety.d.ts.map +1 -0
  153. package/dist/utils/pathSafety.js +23 -0
  154. package/dist/utils/subagentParser.d.ts +2 -2
  155. package/dist/utils/subagentParser.d.ts.map +1 -1
  156. package/dist/utils/subagentParser.js +10 -7
  157. package/package.json +9 -9
  158. package/src/agent.ts +475 -216
  159. package/src/index.ts +3 -0
  160. package/src/managers/aiManager.ts +107 -111
  161. package/src/managers/backgroundBashManager.ts +4 -3
  162. package/src/managers/hookManager.ts +44 -39
  163. package/src/managers/liveConfigManager.ts +524 -138
  164. package/src/managers/lspManager.ts +434 -0
  165. package/src/managers/messageManager.ts +73 -103
  166. package/src/managers/permissionManager.ts +480 -0
  167. package/src/managers/skillManager.ts +3 -1
  168. package/src/managers/slashCommandManager.ts +1 -2
  169. package/src/managers/subagentManager.ts +116 -159
  170. package/src/managers/toolManager.ts +95 -3
  171. package/src/services/aiService.ts +207 -26
  172. package/src/services/configurationService.ts +762 -0
  173. package/src/services/fileWatcher.ts +5 -6
  174. package/src/services/hook.ts +50 -631
  175. package/src/services/jsonlHandler.ts +84 -100
  176. package/src/services/memory.ts +2 -59
  177. package/src/services/session.ts +338 -213
  178. package/src/tools/bashTool.ts +126 -13
  179. package/src/tools/deleteFileTool.ts +36 -0
  180. package/src/tools/editTool.ts +41 -7
  181. package/src/tools/lspTool.ts +760 -0
  182. package/src/tools/multiEditTool.ts +37 -8
  183. package/src/tools/readTool.ts +125 -2
  184. package/src/tools/skillTool.ts +2 -2
  185. package/src/tools/todoWriteTool.ts +33 -1
  186. package/src/tools/types.ts +15 -9
  187. package/src/tools/writeTool.ts +36 -10
  188. package/src/types/commands.ts +0 -1
  189. package/src/types/config.ts +5 -0
  190. package/src/types/configuration.ts +73 -0
  191. package/src/types/core.ts +11 -0
  192. package/src/types/environment.ts +44 -0
  193. package/src/types/fileSearch.ts +4 -0
  194. package/src/types/hooks.ts +14 -11
  195. package/src/types/index.ts +5 -0
  196. package/src/types/lsp.ts +96 -0
  197. package/src/types/messaging.ts +8 -13
  198. package/src/types/permissions.ts +52 -0
  199. package/src/types/session.ts +3 -8
  200. package/src/types/skills.ts +1 -0
  201. package/src/types/tools.ts +38 -0
  202. package/src/utils/abortUtils.ts +118 -0
  203. package/src/utils/bashHistory.ts +28 -4
  204. package/src/utils/bashParser.ts +444 -0
  205. package/src/utils/builtinSubagents.ts +71 -0
  206. package/src/utils/cacheControlUtils.ts +106 -171
  207. package/src/utils/constants.ts +1 -16
  208. package/src/utils/convertMessagesForAPI.ts +38 -14
  209. package/src/utils/fileSearch.ts +107 -0
  210. package/src/utils/fileUtils.ts +114 -19
  211. package/src/utils/globalLogger.ts +0 -17
  212. package/src/utils/markdownParser.ts +1 -19
  213. package/src/utils/messageOperations.ts +7 -35
  214. package/src/utils/pathEncoder.ts +24 -9
  215. package/src/utils/pathSafety.ts +26 -0
  216. package/src/utils/subagentParser.ts +11 -8
  217. package/dist/constants/events.d.ts +0 -28
  218. package/dist/constants/events.d.ts.map +0 -1
  219. package/dist/constants/events.js +0 -27
  220. package/dist/services/configurationWatcher.d.ts +0 -120
  221. package/dist/services/configurationWatcher.d.ts.map +0 -1
  222. package/dist/services/configurationWatcher.js +0 -439
  223. package/dist/services/memoryStore.d.ts +0 -81
  224. package/dist/services/memoryStore.d.ts.map +0 -1
  225. package/dist/services/memoryStore.js +0 -200
  226. package/dist/types/memoryStore.d.ts +0 -82
  227. package/dist/types/memoryStore.d.ts.map +0 -1
  228. package/dist/types/memoryStore.js +0 -7
  229. package/dist/utils/configResolver.d.ts +0 -65
  230. package/dist/utils/configResolver.d.ts.map +0 -1
  231. package/dist/utils/configResolver.js +0 -210
  232. package/src/constants/events.ts +0 -38
  233. package/src/services/configurationWatcher.ts +0 -622
  234. package/src/services/memoryStore.ts +0 -279
  235. package/src/types/memoryStore.ts +0 -94
  236. package/src/utils/configResolver.ts +0 -302
@@ -6,6 +6,7 @@ export declare class SkillManager {
6
6
  private personalSkillsPath;
7
7
  private scanTimeout;
8
8
  private logger?;
9
+ private workdir;
9
10
  private skillMetadata;
10
11
  private skillContent;
11
12
  private initialized;
@@ -1 +1 @@
1
- {"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;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"}
1
+ {"version":3,"file":"skillManager.d.ts","sourceRoot":"","sources":["../../src/managers/skillManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,KAAK,EAGL,aAAa,EACb,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAG3B;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAQ7C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCjC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAQrC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgBzD;;OAEG;YACW,cAAc;IAkB5B;;OAEG;YACW,uBAAuB;IAiFrC;;OAEG;YACW,oBAAoB;IAkBlC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,CAAA;KAAE,CAAC;IAqCjE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B"}
@@ -14,6 +14,7 @@ export class SkillManager {
14
14
  options.personalSkillsPath || join(homedir(), ".wave", "skills");
15
15
  this.scanTimeout = options.scanTimeout || 5000;
16
16
  this.logger = options.logger;
17
+ this.workdir = options.workdir || process.cwd();
17
18
  }
18
19
  /**
19
20
  * Initialize the skill manager by discovering available skills
@@ -84,7 +85,7 @@ export class SkillManager {
84
85
  */
85
86
  async discoverSkills() {
86
87
  const personalCollection = await this.discoverSkillCollection(this.personalSkillsPath, "personal");
87
- const projectCollection = await this.discoverSkillCollection(process.cwd(), "project");
88
+ const projectCollection = await this.discoverSkillCollection(this.workdir, "project");
88
89
  return {
89
90
  personalSkills: personalCollection.skills,
90
91
  projectSkills: projectCollection.skills,
@@ -1 +1 @@
1
- {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAkB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAU/C,OAAO,CAAC,yBAAyB;IAejC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
1
+ {"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,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"}
@@ -195,7 +195,6 @@ export class SlashCommandManager {
195
195
  // Execute the AI conversation with custom configuration
196
196
  await this.aiManager.sendAIMessage({
197
197
  model: config?.model,
198
- allowedTools: config?.allowedTools,
199
198
  });
200
199
  }
201
200
  catch (error) {
@@ -13,6 +13,8 @@ export interface SubagentManagerCallbacks {
13
13
  onSubagentAssistantMessageAdded?: (subagentId: string) => void;
14
14
  /** Triggered during subagent content streaming updates */
15
15
  onSubagentAssistantContentUpdated?: (subagentId: string, chunk: string, accumulated: string) => void;
16
+ /** Triggered during subagent reasoning streaming updates */
17
+ onSubagentAssistantReasoningUpdated?: (subagentId: string, chunk: string, accumulated: string) => void;
16
18
  /** Triggered when subagent tool block is updated */
17
19
  onSubagentToolBlockUpdated?: (subagentId: string, params: AgentToolBlockUpdateParams) => void;
18
20
  /** Triggered when subagent messages change */
@@ -34,9 +36,9 @@ export interface SubagentManagerOptions {
34
36
  parentMessageManager: MessageManager;
35
37
  callbacks?: SubagentManagerCallbacks;
36
38
  logger?: Logger;
37
- gatewayConfig: GatewayConfig;
38
- modelConfig: ModelConfig;
39
- tokenLimit: number;
39
+ getGatewayConfig: () => GatewayConfig;
40
+ getModelConfig: () => ModelConfig;
41
+ getTokenLimit: () => number;
40
42
  hookManager?: HookManager;
41
43
  onUsageAdded?: (usage: Usage) => void;
42
44
  }
@@ -48,9 +50,9 @@ export declare class SubagentManager {
48
50
  private parentMessageManager;
49
51
  private callbacks?;
50
52
  private logger?;
51
- private gatewayConfig;
52
- private modelConfig;
53
- private tokenLimit;
53
+ private getGatewayConfig;
54
+ private getModelConfig;
55
+ private getTokenLimit;
54
56
  private hookManager?;
55
57
  private onUsageAdded?;
56
58
  constructor(options: SubagentManagerOptions);
@@ -123,22 +125,5 @@ export declare class SubagentManager {
123
125
  * Extracted to reuse in both create and restore flows
124
126
  */
125
127
  private createSubagentCallbacks;
126
- /**
127
- * Update configuration for SubagentManager and all active subagents
128
- * This method updates configuration for live config reload support
129
- * @param newGatewayConfig - New gateway configuration
130
- * @param newModelConfig - New model configuration
131
- * @param newTokenLimit - New token limit
132
- */
133
- updateConfiguration(newGatewayConfig: GatewayConfig, newModelConfig: ModelConfig, newTokenLimit: number): void;
134
- /**
135
- * Get current configuration for debugging
136
- */
137
- getCurrentConfiguration(): {
138
- gatewayConfig: GatewayConfig;
139
- modelConfig: ModelConfig;
140
- tokenLimit: number;
141
- activeSubagents: number;
142
- };
143
128
  }
144
129
  //# sourceMappingURL=subagentManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
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
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();
@@ -10,9 +11,9 @@ export class SubagentManager {
10
11
  this.parentMessageManager = options.parentMessageManager;
11
12
  this.callbacks = options.callbacks; // Store SubagentManagerCallbacks
12
13
  this.logger = options.logger;
13
- this.gatewayConfig = options.gatewayConfig;
14
- this.modelConfig = options.modelConfig;
15
- this.tokenLimit = options.tokenLimit;
14
+ this.getGatewayConfig = options.getGatewayConfig;
15
+ this.getModelConfig = options.getModelConfig;
16
+ this.getTokenLimit = options.getTokenLimit;
16
17
  this.hookManager = options.hookManager;
17
18
  this.onUsageAdded = options.onUsageAdded;
18
19
  }
@@ -52,10 +53,7 @@ export class SubagentManager {
52
53
  * Create a new subagent instance with isolated managers
53
54
  */
54
55
  async createInstance(configuration, parameters) {
55
- if (!this.parentToolManager ||
56
- !this.gatewayConfig ||
57
- !this.modelConfig ||
58
- !this.tokenLimit) {
56
+ if (!this.parentToolManager) {
59
57
  throw new Error("SubagentManager not properly initialized - call initialize() first");
60
58
  }
61
59
  const subagentId = randomUUID();
@@ -66,15 +64,10 @@ export class SubagentManager {
66
64
  workdir: this.workdir,
67
65
  logger: this.logger,
68
66
  sessionType: "subagent",
69
- parentSessionId: this.parentMessageManager.getSessionId(),
70
67
  subagentType: parameters.subagent_type,
71
68
  });
72
69
  // Use the parent tool manager directly - tool restrictions will be handled by allowedTools parameter
73
70
  const toolManager = this.parentToolManager;
74
- // Determine model to use
75
- const modelToUse = configuration.model && configuration.model !== "inherit"
76
- ? configuration.model
77
- : this.modelConfig.agentModel;
78
71
  // Create isolated AIManager for the subagent
79
72
  const aiManager = new AIManager({
80
73
  messageManager,
@@ -84,12 +77,29 @@ export class SubagentManager {
84
77
  systemPrompt: configuration.systemPrompt,
85
78
  subagentType: parameters.subagent_type, // Pass subagent type for hook context
86
79
  hookManager: this.hookManager,
87
- gatewayConfig: this.gatewayConfig,
88
- modelConfig: {
89
- ...this.modelConfig,
90
- agentModel: modelToUse,
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
+ };
91
101
  },
92
- tokenLimit: this.tokenLimit,
102
+ getTokenLimit: this.getTokenLimit,
93
103
  callbacks: {
94
104
  onUsageAdded: this.onUsageAdded,
95
105
  },
@@ -126,14 +136,22 @@ export class SubagentManager {
126
136
  this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
127
137
  status: "active",
128
138
  });
129
- // Set up abort handler
139
+ // Set up consolidated abort handler to prevent listener accumulation
140
+ let abortCleanup;
130
141
  if (abortSignal) {
131
- abortSignal.addEventListener("abort", () => {
132
- this.updateInstanceStatus(instance.subagentId, "aborted");
133
- this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
134
- status: "aborted",
135
- });
136
- });
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
+ ]);
137
155
  }
138
156
  // Add the user's prompt as a message
139
157
  instance.messageManager.addUserMessage({ content: prompt });
@@ -150,31 +168,42 @@ export class SubagentManager {
150
168
  }
151
169
  // Execute the AI request with tool restrictions
152
170
  // The AIManager will handle abort signals through its own abort controllers
153
- // We need to abort the AI execution if the external abort signal is triggered
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)
154
186
  const executeAI = instance.aiManager.sendAIMessage({
155
187
  allowedTools,
156
- model: instance.configuration.model !== "inherit"
157
- ? instance.configuration.model
158
- : undefined,
188
+ model: resolvedModel,
159
189
  });
160
- // If we have an abort signal, race against it
161
- if (abortSignal) {
162
- await Promise.race([
163
- executeAI,
164
- new Promise((_, reject) => {
165
- if (abortSignal.aborted) {
166
- reject(new Error("Task was aborted"));
167
- }
168
- abortSignal.addEventListener("abort", () => {
169
- // Abort the AI execution
170
- instance.aiManager.abortAIMessage();
171
- reject(new Error("Task was aborted"));
172
- });
173
- }),
174
- ]);
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
+ }
175
201
  }
176
- else {
177
- await executeAI;
202
+ finally {
203
+ // Clean up abort listeners to prevent memory leaks
204
+ if (abortCleanup) {
205
+ abortCleanup();
206
+ }
178
207
  }
179
208
  // Get the latest messages to extract the response
180
209
  const messages = instance.messageManager.getMessages();
@@ -266,15 +295,22 @@ export class SubagentManager {
266
295
  workdir: this.workdir,
267
296
  logger: this.logger,
268
297
  sessionType: "subagent",
269
- parentSessionId: this.parentMessageManager.getSessionId(),
270
298
  subagentType: configuration.name, // Use configuration name for restored sessions
271
299
  });
272
300
  // Use the parent tool manager
273
301
  const toolManager = this.parentToolManager;
274
302
  // Determine model to use
275
- const modelToUse = configuration.model && configuration.model !== "inherit"
276
- ? configuration.model
277
- : this.modelConfig.agentModel;
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
+ }
278
314
  // Create AIManager for the restored subagent
279
315
  const aiManager = new AIManager({
280
316
  messageManager,
@@ -284,12 +320,12 @@ export class SubagentManager {
284
320
  systemPrompt: configuration.systemPrompt,
285
321
  subagentType: configuration.name, // Use configuration name as subagent type for restored instances
286
322
  hookManager: this.hookManager,
287
- gatewayConfig: this.gatewayConfig,
288
- modelConfig: {
289
- ...this.modelConfig,
323
+ getGatewayConfig: this.getGatewayConfig,
324
+ getModelConfig: () => ({
325
+ ...parentModelConfig,
290
326
  agentModel: modelToUse,
291
- },
292
- tokenLimit: this.tokenLimit,
327
+ }),
328
+ getTokenLimit: this.getTokenLimit,
293
329
  callbacks: {
294
330
  onUsageAdded: this.onUsageAdded,
295
331
  },
@@ -308,19 +344,7 @@ export class SubagentManager {
308
344
  // IMPORTANT: Store instance in map BEFORE calling setMessages
309
345
  // This ensures the callback can find the instance
310
346
  this.instances.set(subagentId, instance);
311
- // Now restore the session data including sessionId, which will trigger the callback chain
312
- const sessionDataObj = {
313
- id: sessionData.id,
314
- messages: sessionData.messages,
315
- version: "1.0.0",
316
- metadata: {
317
- workdir: this.workdir,
318
- startedAt: new Date().toISOString(),
319
- lastActiveAt: new Date().toISOString(),
320
- latestTotalTokens: 0,
321
- },
322
- };
323
- messageManager.initializeFromSession(sessionDataObj);
347
+ messageManager.initializeFromSession(sessionData);
324
348
  }
325
349
  catch (error) {
326
350
  this.logger?.warn(`Failed to restore subagent session ${subagentId}:`, error);
@@ -352,6 +376,12 @@ export class SubagentManager {
352
376
  this.callbacks.onSubagentAssistantContentUpdated(subagentId, chunk, accumulated);
353
377
  }
354
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
+ },
355
385
  onToolBlockUpdated: (params) => {
356
386
  // Forward tool block updates to parent via SubagentManager callbacks
357
387
  if (this.callbacks?.onSubagentToolBlockUpdated) {
@@ -377,54 +407,4 @@ export class SubagentManager {
377
407
  },
378
408
  };
379
409
  }
380
- /**
381
- * Update configuration for SubagentManager and all active subagents
382
- * This method updates configuration for live config reload support
383
- * @param newGatewayConfig - New gateway configuration
384
- * @param newModelConfig - New model configuration
385
- * @param newTokenLimit - New token limit
386
- */
387
- updateConfiguration(newGatewayConfig, newModelConfig, newTokenLimit) {
388
- this.logger?.info("Live Config: Updating SubagentManager configuration");
389
- // Update stored configuration
390
- this.gatewayConfig = newGatewayConfig;
391
- this.modelConfig = newModelConfig;
392
- this.tokenLimit = newTokenLimit;
393
- // Update all active subagent AIManager instances
394
- let updatedCount = 0;
395
- for (const [subagentId, instance] of this.instances.entries()) {
396
- if (instance.status === "active" || instance.status === "initializing") {
397
- try {
398
- // For subagents, we need to preserve their model if it was explicitly set
399
- const subagentModelConfig = {
400
- ...newModelConfig,
401
- // If subagent has its own model configured, preserve it
402
- agentModel: instance.configuration.model &&
403
- instance.configuration.model !== "inherit"
404
- ? instance.configuration.model
405
- : newModelConfig.agentModel,
406
- };
407
- instance.aiManager.updateConfiguration(newGatewayConfig, subagentModelConfig, newTokenLimit);
408
- updatedCount++;
409
- this.logger?.debug(`Live Config: Updated configuration for subagent ${subagentId}`);
410
- }
411
- catch (error) {
412
- this.logger?.error(`Live Config: Failed to update configuration for subagent ${subagentId}: ${error.message}`);
413
- }
414
- }
415
- }
416
- this.logger?.info(`Live Config: SubagentManager configuration updated - ${updatedCount} active subagents updated`);
417
- }
418
- /**
419
- * Get current configuration for debugging
420
- */
421
- getCurrentConfiguration() {
422
- const activeSubagents = Array.from(this.instances.values()).filter((instance) => instance.status === "active" || instance.status === "initializing").length;
423
- return {
424
- gatewayConfig: { ...this.gatewayConfig },
425
- modelConfig: { ...this.modelConfig },
426
- tokenLimit: this.tokenLimit,
427
- activeSubagents,
428
- };
429
- }
430
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;AAc7E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,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,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,kBAAkB;IAKvC;;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;IAgCF,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IA2BtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;CAO/C;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;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"}
@@ -9,16 +9,25 @@ import { grepTool } from "../tools/grepTool.js";
9
9
  import { lsTool } from "../tools/lsTool.js";
10
10
  import { readTool } from "../tools/readTool.js";
11
11
  import { todoWriteTool } from "../tools/todoWriteTool.js";
12
+ import { lspTool } from "../tools/lspTool.js";
12
13
  import { createTaskTool } from "../tools/taskTool.js";
13
14
  import { createSkillTool } from "../tools/skillTool.js";
14
15
  /**
15
16
  * Tool Manager
17
+ *
18
+ * Manages tool registration and execution with optional permission system integration.
19
+ * Supports both built-in tools and MCP (Model Context Protocol) tools.
16
20
  */
17
21
  class ToolManager {
18
22
  constructor(options) {
19
23
  this.tools = new Map();
20
24
  this.mcpManager = options.mcpManager;
25
+ this.lspManager = options.lspManager;
21
26
  this.logger = options.logger;
27
+ this.permissionManager = options.permissionManager;
28
+ // Store CLI permission mode, let PermissionManager resolve effective mode
29
+ this.permissionMode = options.permissionMode;
30
+ this.canUseToolCallback = options.canUseToolCallback;
22
31
  }
23
32
  /**
24
33
  * Register a new tool
@@ -63,6 +72,7 @@ class ToolManager {
63
72
  lsTool,
64
73
  readTool,
65
74
  todoWriteTool,
75
+ lspTool,
66
76
  ];
67
77
  for (const tool of builtInTools) {
68
78
  this.tools.set(tool.name, tool);
@@ -77,18 +87,55 @@ class ToolManager {
77
87
  this.tools.set(skillTool.name, skillTool);
78
88
  }
79
89
  }
90
+ /**
91
+ * Execute a tool by name with the provided arguments and context
92
+ *
93
+ * Enhances the context with permission-related fields before execution:
94
+ * - permissionMode: The current permission mode (default or bypassPermissions)
95
+ * - canUseToolCallback: Custom permission callback if provided
96
+ * - permissionManager: The PermissionManager instance for permission checks
97
+ *
98
+ * @param name - Name of the tool to execute
99
+ * @param args - Arguments to pass to the tool
100
+ * @param context - Execution context for the tool
101
+ * @returns Promise resolving to the tool execution result
102
+ */
80
103
  async execute(name, args, context) {
104
+ // Resolve effective permission mode (CLI override > configuration > default)
105
+ const effectivePermissionMode = this.permissionManager
106
+ ? this.permissionManager.getCurrentEffectiveMode(this.permissionMode)
107
+ : this.permissionMode || "default";
108
+ // Enhance context with permission-related fields
109
+ const enhancedContext = {
110
+ ...context,
111
+ permissionMode: effectivePermissionMode,
112
+ canUseToolCallback: this.canUseToolCallback,
113
+ permissionManager: this.permissionManager,
114
+ mcpManager: this.mcpManager,
115
+ lspManager: this.lspManager,
116
+ };
117
+ this.logger?.debug("Executing tool with enhanced context", {
118
+ toolName: name,
119
+ cliPermissionMode: this.permissionMode,
120
+ effectivePermissionMode,
121
+ hasPermissionManager: !!this.permissionManager,
122
+ hasPermissionCallback: !!this.canUseToolCallback,
123
+ });
81
124
  // Check if it's an MCP tool first
82
125
  if (this.mcpManager.isMcpTool(name)) {
83
- return this.mcpManager.executeMcpToolByRegistry(name, args, context);
126
+ return this.mcpManager.executeMcpToolByRegistry(name, args, enhancedContext);
84
127
  }
85
128
  // Check built-in tools
86
129
  const plugin = this.tools.get(name);
87
130
  if (plugin) {
88
131
  try {
89
- return await plugin.execute(args, context);
132
+ return await plugin.execute(args, enhancedContext);
90
133
  }
91
134
  catch (error) {
135
+ this.logger?.error("Tool execution failed", {
136
+ toolName: name,
137
+ error: error instanceof Error ? error.message : String(error),
138
+ });
92
139
  return {
93
140
  success: false,
94
141
  content: "",
@@ -96,6 +143,7 @@ class ToolManager {
96
143
  };
97
144
  }
98
145
  }
146
+ this.logger?.warn("Tool not found", { toolName: name });
99
147
  return {
100
148
  success: false,
101
149
  content: "",
@@ -112,6 +160,22 @@ class ToolManager {
112
160
  const mcpToolsConfig = this.mcpManager.getMcpToolsConfig();
113
161
  return [...builtInToolsConfig, ...mcpToolsConfig];
114
162
  }
163
+ /**
164
+ * Get the current permission mode
165
+ */
166
+ getPermissionMode() {
167
+ if (this.permissionManager) {
168
+ return this.permissionManager.getCurrentEffectiveMode(this.permissionMode);
169
+ }
170
+ return this.permissionMode || "default";
171
+ }
172
+ /**
173
+ * Set the permission mode
174
+ * @param mode - The new permission mode
175
+ */
176
+ setPermissionMode(mode) {
177
+ this.permissionMode = mode;
178
+ }
115
179
  }
116
180
  // Export tool registry class and types
117
181
  export { ToolManager };
@@ -21,14 +21,16 @@ export interface CallAgentOptions {
21
21
  parametersChunk?: string;
22
22
  stage?: "start" | "streaming" | "running" | "end";
23
23
  }) => void;
24
+ onReasoningUpdate?: (content: string) => void;
24
25
  }
25
26
  export interface CallAgentResult {
26
27
  content?: string;
27
28
  tool_calls?: ChatCompletionMessageToolCall[];
29
+ reasoning_content?: string;
28
30
  usage?: ClaudeUsage;
29
31
  finish_reason?: "stop" | "length" | "tool_calls" | "content_filter" | "function_call" | null;
30
32
  response_headers?: Record<string, string>;
31
- metadata?: Record<string, unknown>;
33
+ additionalFields?: Record<string, unknown>;
32
34
  }
33
35
  export declare function callAgent(options: CallAgentOptions): Promise<CallAgentResult>;
34
36
  export interface CompressMessagesOptions {