wave-agent-sdk 0.6.5 → 0.7.1

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 (190) 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/core/session.d.ts +3 -0
  11. package/dist/core/session.d.ts.map +1 -0
  12. package/dist/core/session.js +1 -0
  13. package/dist/index.d.ts +2 -9
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -10
  16. package/dist/managers/MemoryRuleManager.d.ts +3 -1
  17. package/dist/managers/MemoryRuleManager.d.ts.map +1 -1
  18. package/dist/managers/MemoryRuleManager.js +2 -1
  19. package/dist/managers/aiManager.d.ts +13 -23
  20. package/dist/managers/aiManager.d.ts.map +1 -1
  21. package/dist/managers/aiManager.js +60 -32
  22. package/dist/managers/backgroundTaskManager.d.ts +3 -1
  23. package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
  24. package/dist/managers/backgroundTaskManager.js +2 -1
  25. package/dist/managers/bashManager.d.ts +4 -4
  26. package/dist/managers/bashManager.d.ts.map +1 -1
  27. package/dist/managers/bashManager.js +5 -2
  28. package/dist/managers/foregroundTaskManager.d.ts +3 -0
  29. package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
  30. package/dist/managers/foregroundTaskManager.js +2 -1
  31. package/dist/managers/hookManager.d.ts +3 -3
  32. package/dist/managers/hookManager.d.ts.map +1 -1
  33. package/dist/managers/hookManager.js +20 -19
  34. package/dist/managers/liveConfigManager.d.ts +6 -13
  35. package/dist/managers/liveConfigManager.d.ts.map +1 -1
  36. package/dist/managers/liveConfigManager.js +50 -45
  37. package/dist/managers/lspManager.d.ts +4 -5
  38. package/dist/managers/lspManager.d.ts.map +1 -1
  39. package/dist/managers/lspManager.js +13 -12
  40. package/dist/managers/mcpManager.d.ts +3 -2
  41. package/dist/managers/mcpManager.d.ts.map +1 -1
  42. package/dist/managers/mcpManager.js +16 -15
  43. package/dist/managers/messageManager.d.ts +5 -7
  44. package/dist/managers/messageManager.d.ts.map +1 -1
  45. package/dist/managers/messageManager.js +12 -7
  46. package/dist/managers/permissionManager.d.ts +6 -4
  47. package/dist/managers/permissionManager.d.ts.map +1 -1
  48. package/dist/managers/permissionManager.js +39 -63
  49. package/dist/managers/planManager.d.ts +4 -6
  50. package/dist/managers/planManager.d.ts.map +1 -1
  51. package/dist/managers/planManager.js +18 -4
  52. package/dist/managers/pluginManager.d.ts +10 -22
  53. package/dist/managers/pluginManager.d.ts.map +1 -1
  54. package/dist/managers/pluginManager.js +27 -14
  55. package/dist/managers/reversionManager.d.ts +4 -3
  56. package/dist/managers/reversionManager.d.ts.map +1 -1
  57. package/dist/managers/reversionManager.js +5 -2
  58. package/dist/managers/skillManager.d.ts +3 -2
  59. package/dist/managers/skillManager.d.ts.map +1 -1
  60. package/dist/managers/skillManager.js +15 -14
  61. package/dist/managers/slashCommandManager.d.ts +9 -16
  62. package/dist/managers/slashCommandManager.d.ts.map +1 -1
  63. package/dist/managers/slashCommandManager.js +21 -10
  64. package/dist/managers/subagentManager.d.ts +7 -17
  65. package/dist/managers/subagentManager.d.ts.map +1 -1
  66. package/dist/managers/subagentManager.js +41 -34
  67. package/dist/managers/toolManager.d.ts +15 -38
  68. package/dist/managers/toolManager.d.ts.map +1 -1
  69. package/dist/managers/toolManager.js +67 -56
  70. package/dist/prompts/index.d.ts +6 -2
  71. package/dist/prompts/index.d.ts.map +1 -1
  72. package/dist/prompts/index.js +8 -4
  73. package/dist/services/MarketplaceService.d.ts.map +1 -1
  74. package/dist/services/MarketplaceService.js +13 -0
  75. package/dist/services/aiService.d.ts +4 -0
  76. package/dist/services/aiService.d.ts.map +1 -1
  77. package/dist/services/aiService.js +47 -7
  78. package/dist/services/configurationService.d.ts.map +1 -1
  79. package/dist/services/configurationService.js +30 -11
  80. package/dist/services/taskManager.d.ts +3 -1
  81. package/dist/services/taskManager.d.ts.map +1 -1
  82. package/dist/services/taskManager.js +3 -2
  83. package/dist/tools/bashTool.d.ts.map +1 -1
  84. package/dist/tools/bashTool.js +19 -4
  85. package/dist/tools/editTool.d.ts.map +1 -1
  86. package/dist/tools/editTool.js +16 -4
  87. package/dist/tools/readTool.d.ts.map +1 -1
  88. package/dist/tools/readTool.js +2 -2
  89. package/dist/tools/skillTool.d.ts +2 -4
  90. package/dist/tools/skillTool.d.ts.map +1 -1
  91. package/dist/tools/skillTool.js +61 -61
  92. package/dist/tools/taskOutputTool.d.ts.map +1 -1
  93. package/dist/tools/taskOutputTool.js +3 -2
  94. package/dist/tools/taskTool.d.ts +2 -4
  95. package/dist/tools/taskTool.d.ts.map +1 -1
  96. package/dist/tools/taskTool.js +192 -187
  97. package/dist/tools/types.d.ts +12 -1
  98. package/dist/tools/types.d.ts.map +1 -1
  99. package/dist/tools/writeTool.d.ts.map +1 -1
  100. package/dist/tools/writeTool.js +5 -2
  101. package/dist/types/core.d.ts +2 -0
  102. package/dist/types/core.d.ts.map +1 -1
  103. package/dist/types/marketplace.d.ts +8 -0
  104. package/dist/types/marketplace.d.ts.map +1 -1
  105. package/dist/types/messaging.d.ts +1 -0
  106. package/dist/types/messaging.d.ts.map +1 -1
  107. package/dist/types/permissions.d.ts +3 -1
  108. package/dist/types/permissions.d.ts.map +1 -1
  109. package/dist/types/permissions.js +1 -3
  110. package/dist/types/skills.d.ts +0 -2
  111. package/dist/types/skills.d.ts.map +1 -1
  112. package/dist/types/tools.d.ts +0 -15
  113. package/dist/types/tools.d.ts.map +1 -1
  114. package/dist/utils/container.d.ts +31 -0
  115. package/dist/utils/container.d.ts.map +1 -0
  116. package/dist/utils/container.js +79 -0
  117. package/dist/utils/containerSetup.d.ts +26 -0
  118. package/dist/utils/containerSetup.d.ts.map +1 -0
  119. package/dist/utils/containerSetup.js +187 -0
  120. package/dist/utils/editUtils.d.ts +0 -3
  121. package/dist/utils/editUtils.d.ts.map +1 -1
  122. package/dist/utils/editUtils.js +4 -3
  123. package/dist/utils/hookMatcher.d.ts +1 -1
  124. package/dist/utils/hookMatcher.d.ts.map +1 -1
  125. package/dist/utils/hookMatcher.js +2 -2
  126. package/dist/utils/messageOperations.d.ts +2 -1
  127. package/dist/utils/messageOperations.d.ts.map +1 -1
  128. package/dist/utils/messageOperations.js +4 -1
  129. package/dist/utils/openaiClient.js +2 -2
  130. package/dist/utils/stringUtils.d.ts +6 -0
  131. package/dist/utils/stringUtils.d.ts.map +1 -1
  132. package/dist/utils/stringUtils.js +8 -0
  133. package/package.json +1 -1
  134. package/src/agent.ts +60 -282
  135. package/src/constants/tools.ts +0 -2
  136. package/src/core/plugin.ts +224 -0
  137. package/src/core/session.ts +6 -0
  138. package/src/index.ts +2 -11
  139. package/src/managers/MemoryRuleManager.ts +6 -1
  140. package/src/managers/aiManager.ts +84 -58
  141. package/src/managers/backgroundTaskManager.ts +5 -1
  142. package/src/managers/bashManager.ts +9 -4
  143. package/src/managers/foregroundTaskManager.ts +3 -0
  144. package/src/managers/hookManager.ts +21 -23
  145. package/src/managers/liveConfigManager.ts +57 -53
  146. package/src/managers/lspManager.ts +14 -19
  147. package/src/managers/mcpManager.ts +20 -20
  148. package/src/managers/messageManager.ts +19 -12
  149. package/src/managers/permissionManager.ts +45 -70
  150. package/src/managers/planManager.ts +26 -7
  151. package/src/managers/pluginManager.ts +37 -33
  152. package/src/managers/reversionManager.ts +5 -3
  153. package/src/managers/skillManager.ts +19 -20
  154. package/src/managers/slashCommandManager.ts +30 -25
  155. package/src/managers/subagentManager.ts +53 -53
  156. package/src/managers/toolManager.ts +93 -90
  157. package/src/prompts/index.ts +13 -5
  158. package/src/services/MarketplaceService.ts +13 -0
  159. package/src/services/aiService.ts +61 -15
  160. package/src/services/configurationService.ts +34 -13
  161. package/src/services/taskManager.ts +6 -2
  162. package/src/tools/bashTool.ts +19 -4
  163. package/src/tools/editTool.ts +17 -4
  164. package/src/tools/readTool.ts +2 -2
  165. package/src/tools/skillTool.ts +75 -71
  166. package/src/tools/taskOutputTool.ts +3 -2
  167. package/src/tools/taskTool.ts +224 -225
  168. package/src/tools/types.ts +14 -1
  169. package/src/tools/writeTool.ts +5 -2
  170. package/src/types/core.ts +2 -0
  171. package/src/types/marketplace.ts +9 -0
  172. package/src/types/messaging.ts +1 -0
  173. package/src/types/permissions.ts +2 -4
  174. package/src/types/skills.ts +0 -3
  175. package/src/types/tools.ts +0 -17
  176. package/src/utils/container.ts +92 -0
  177. package/src/utils/containerSetup.ts +279 -0
  178. package/src/utils/editUtils.ts +4 -3
  179. package/src/utils/hookMatcher.ts +2 -2
  180. package/src/utils/messageOperations.ts +5 -0
  181. package/src/utils/openaiClient.ts +2 -2
  182. package/src/utils/stringUtils.ts +9 -0
  183. package/dist/tools/deleteFileTool.d.ts +0 -6
  184. package/dist/tools/deleteFileTool.d.ts.map +0 -1
  185. package/dist/tools/deleteFileTool.js +0 -100
  186. package/dist/tools/multiEditTool.d.ts +0 -6
  187. package/dist/tools/multiEditTool.d.ts.map +0 -1
  188. package/dist/tools/multiEditTool.js +0 -246
  189. package/src/tools/deleteFileTool.ts +0 -127
  190. package/src/tools/multiEditTool.ts +0 -306
@@ -0,0 +1,164 @@
1
+ import { Container } from "../utils/container.js";
2
+ import { PluginManager } from "../managers/pluginManager.js";
3
+ import { PluginScopeManager } from "../managers/pluginScopeManager.js";
4
+ import { MarketplaceService } from "../services/MarketplaceService.js";
5
+ import { ConfigurationService } from "../services/configurationService.js";
6
+ /**
7
+ * PluginCore
8
+ *
9
+ * Encapsulates plugin management logic, providing a high-level API for
10
+ * installing, uninstalling, enabling, and disabling plugins.
11
+ */
12
+ export class PluginCore {
13
+ constructor(workdir = process.cwd()) {
14
+ this.workdir = workdir;
15
+ this.container = new Container();
16
+ this.configurationService = new ConfigurationService();
17
+ this.marketplaceService = new MarketplaceService();
18
+ // Wire up ConfigurationService in the container for PluginManager to use
19
+ this.container.register("ConfigurationService", this.configurationService);
20
+ this.pluginManager = new PluginManager(this.container, {
21
+ workdir: this.workdir,
22
+ });
23
+ this.pluginScopeManager = new PluginScopeManager({
24
+ workdir: this.workdir,
25
+ configurationService: this.configurationService,
26
+ pluginManager: this.pluginManager,
27
+ });
28
+ }
29
+ /**
30
+ * Installs a plugin from a marketplace
31
+ */
32
+ async installPlugin(pluginId, scope) {
33
+ const installedPlugin = await this.marketplaceService.installPlugin(pluginId);
34
+ if (scope) {
35
+ await this.enablePlugin(pluginId, scope);
36
+ }
37
+ return installedPlugin;
38
+ }
39
+ /**
40
+ * Uninstalls a plugin and removes it from all configuration scopes
41
+ */
42
+ async uninstallPlugin(pluginId) {
43
+ await this.marketplaceService.uninstallPlugin(pluginId);
44
+ await this.pluginScopeManager.removePluginFromAllScopes(pluginId);
45
+ }
46
+ /**
47
+ * Enables a plugin in the specified scope. If no scope is provided, it tries to find
48
+ * the scope where the plugin is already configured, or defaults to "user".
49
+ */
50
+ async enablePlugin(pluginId, scope) {
51
+ const targetScope = scope || this.findPluginScope(pluginId) || "user";
52
+ await this.pluginScopeManager.enablePlugin(targetScope, pluginId);
53
+ return targetScope;
54
+ }
55
+ /**
56
+ * Disables a plugin in the specified scope. If no scope is provided, it tries to find
57
+ * the scope where the plugin is already configured, or defaults to "user".
58
+ */
59
+ async disablePlugin(pluginId, scope) {
60
+ const targetScope = scope || this.findPluginScope(pluginId) || "user";
61
+ await this.pluginScopeManager.disablePlugin(targetScope, pluginId);
62
+ return targetScope;
63
+ }
64
+ /**
65
+ * Updates an installed plugin to the latest version from its marketplace
66
+ */
67
+ async updatePlugin(pluginId) {
68
+ return await this.marketplaceService.updatePlugin(pluginId);
69
+ }
70
+ /**
71
+ * Lists all plugins from all registered marketplaces with their installation and enabled status
72
+ */
73
+ async listPlugins() {
74
+ const installedPlugins = await this.marketplaceService.getInstalledPlugins();
75
+ const marketplaces = await this.marketplaceService.listMarketplaces();
76
+ const mergedEnabled = this.configurationService.getMergedEnabledPlugins(this.workdir);
77
+ const allMarketplacePlugins = [];
78
+ for (const m of marketplaces) {
79
+ try {
80
+ const manifest = await this.marketplaceService.loadMarketplaceManifest(this.marketplaceService.getMarketplacePath(m));
81
+ manifest.plugins.forEach((p) => {
82
+ const pluginId = `${p.name}@${m.name}`;
83
+ const installed = installedPlugins.plugins.find((ip) => ip.name === p.name && ip.marketplace === m.name);
84
+ allMarketplacePlugins.push({
85
+ ...p,
86
+ marketplace: m.name,
87
+ installed: !!installed,
88
+ version: installed?.version,
89
+ cachePath: installed?.cachePath,
90
+ projectPath: installed?.projectPath,
91
+ scope: this.pluginScopeManager.findPluginScope(pluginId) || undefined,
92
+ });
93
+ });
94
+ }
95
+ catch {
96
+ // Skip marketplaces that fail to load
97
+ }
98
+ }
99
+ return {
100
+ plugins: allMarketplacePlugins,
101
+ mergedEnabled,
102
+ };
103
+ }
104
+ /**
105
+ * Adds a new marketplace
106
+ */
107
+ async addMarketplace(input) {
108
+ return await this.marketplaceService.addMarketplace(input);
109
+ }
110
+ /**
111
+ * Removes a marketplace by name
112
+ */
113
+ async removeMarketplace(name) {
114
+ await this.marketplaceService.removeMarketplace(name);
115
+ }
116
+ /**
117
+ * Updates a specific marketplace or all marketplaces
118
+ */
119
+ async updateMarketplace(name) {
120
+ await this.marketplaceService.updateMarketplace(name);
121
+ }
122
+ /**
123
+ * Lists all registered marketplaces
124
+ */
125
+ async listMarketplaces() {
126
+ return await this.marketplaceService.listMarketplaces();
127
+ }
128
+ /**
129
+ * Gets the registry of all installed plugins
130
+ */
131
+ async getInstalledPlugins() {
132
+ return await this.marketplaceService.getInstalledPlugins();
133
+ }
134
+ /**
135
+ * Gets the merged enabled state of all plugins across all scopes
136
+ */
137
+ getMergedEnabledPlugins() {
138
+ return this.configurationService.getMergedEnabledPlugins(this.workdir);
139
+ }
140
+ /**
141
+ * Loads a marketplace manifest from a local path
142
+ */
143
+ async loadMarketplaceManifest(marketplacePath) {
144
+ return await this.marketplaceService.loadMarketplaceManifest(marketplacePath);
145
+ }
146
+ /**
147
+ * Resolves the local path for a marketplace
148
+ */
149
+ getMarketplacePath(marketplace) {
150
+ return this.marketplaceService.getMarketplacePath(marketplace);
151
+ }
152
+ /**
153
+ * Finds the scope where a plugin is currently enabled/disabled
154
+ */
155
+ findPluginScope(pluginId) {
156
+ return this.pluginScopeManager.findPluginScope(pluginId);
157
+ }
158
+ /**
159
+ * Removes a plugin from the enabled plugins in the specified scope
160
+ */
161
+ async removeEnabledPlugin(scope, pluginId) {
162
+ await this.configurationService.removeEnabledPlugin(this.workdir, scope, pluginId);
163
+ }
164
+ }
@@ -0,0 +1,3 @@
1
+ export { listSessions, truncateContent, loadSessionFromJsonl, } from "../services/session.js";
2
+ export type { SessionMetadata, SessionData } from "../services/session.js";
3
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1 @@
1
+ export { listSessions, truncateContent, loadSessionFromJsonl, } from "../services/session.js";
package/dist/index.d.ts CHANGED
@@ -1,14 +1,7 @@
1
- export * from "./services/aiService.js";
2
- export * from "./services/memory.js";
3
- export * from "./services/session.js";
4
- export * from "./services/hook.js";
5
- export * from "./services/jsonlHandler.js";
6
- export * from "./services/configurationService.js";
7
- export * from "./services/MarketplaceService.js";
1
+ export * from "./core/session.js";
8
2
  export * from "./constants/tools.js";
9
- export * from "./managers/pluginManager.js";
10
- export * from "./managers/pluginScopeManager.js";
11
3
  export * from "./agent.js";
4
+ export * from "./core/plugin.js";
12
5
  export * from "./utils/bashParser.js";
13
6
  export * from "./utils/convertMessagesForAPI.js";
14
7
  export * from "./utils/fileFilter.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,sBAAsB,CAAC;AAGrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,YAAY,CAAC;AAG3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAGlC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,10 @@
1
1
  // Export all services
2
- export * from "./services/aiService.js";
3
- export * from "./services/memory.js";
4
- export * from "./services/session.js";
5
- export * from "./services/hook.js";
6
- export * from "./services/jsonlHandler.js";
7
- export * from "./services/configurationService.js"; // New configuration management service
8
- export * from "./services/MarketplaceService.js";
2
+ export * from "./core/session.js";
9
3
  // Export constants
10
4
  export * from "./constants/tools.js";
11
- // Export managers
12
- export * from "./managers/pluginManager.js";
13
- export * from "./managers/pluginScopeManager.js";
14
5
  // Export main agent
15
6
  export * from "./agent.js";
7
+ export * from "./core/plugin.js";
16
8
  // Export all utilities
17
9
  export * from "./utils/bashParser.js";
18
10
  export * from "./utils/convertMessagesForAPI.js";
@@ -1,4 +1,5 @@
1
1
  import type { MemoryRule } from "../types/memoryRule.js";
2
+ import { Container } from "../utils/container.js";
2
3
  export interface MemoryRuleRegistryState {
3
4
  /** All discovered rules, indexed by ID */
4
5
  rules: Record<string, MemoryRule>;
@@ -9,10 +10,11 @@ export interface MemoryRuleManagerOptions {
9
10
  workdir: string;
10
11
  }
11
12
  export declare class MemoryRuleManager {
13
+ private container;
12
14
  private state;
13
15
  private workdir;
14
16
  private service;
15
- constructor(options: MemoryRuleManagerOptions);
17
+ constructor(container: Container, options: MemoryRuleManagerOptions);
16
18
  /**
17
19
  * Scans .wave/rules and ~/.wave/rules for memory rule files.
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryRuleManager.d.ts","sourceRoot":"","sources":["../../src/managers/MemoryRuleManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOzD,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,0DAA0D;IAC1D,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAGX;IAEF,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,wBAAwB;IAK7C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YA8BtB,aAAa;YAyDb,YAAY;IAsB1B;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE;IAUtD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
1
+ {"version":3,"file":"MemoryRuleManager.d.ts","sourceRoot":"","sources":["../../src/managers/MemoryRuleManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOzD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,0DAA0D;IAC1D,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,SAAS;IATnB,OAAO,CAAC,KAAK,CAGX;IAEF,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAoB;gBAGzB,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,wBAAwB;IAMnC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YA8BtB,aAAa;YAyDb,YAAY;IAsB1B;;OAEG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE;IAUtD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
@@ -4,7 +4,8 @@ import * as path from "node:path";
4
4
  import * as os from "node:os";
5
5
  import { logger } from "../utils/globalLogger.js";
6
6
  export class MemoryRuleManager {
7
- constructor(options) {
7
+ constructor(container, options) {
8
+ this.container = container;
8
9
  this.state = {
9
10
  rules: {},
10
11
  activeRuleIds: new Set(),
@@ -1,26 +1,14 @@
1
- import type { Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
2
- import type { ToolManager } from "./toolManager.js";
3
- import type { MessageManager } from "./messageManager.js";
4
- import type { BackgroundTaskManager } from "./backgroundTaskManager.js";
5
- import type { HookManager } from "./hookManager.js";
6
- import type { PermissionManager } from "./permissionManager.js";
1
+ import type { GatewayConfig, ModelConfig, Usage } from "../types/index.js";
2
+ import { Container } from "../utils/container.js";
7
3
  export interface AIManagerCallbacks {
8
4
  onCompressionStateChange?: (isCompressing: boolean) => void;
9
5
  onUsageAdded?: (usage: Usage) => void;
10
6
  }
11
7
  export interface AIManagerOptions {
12
- messageManager: MessageManager;
13
- toolManager: ToolManager;
14
- taskManager: import("../services/taskManager.js").TaskManager;
15
- logger?: Logger;
16
- backgroundTaskManager?: BackgroundTaskManager;
17
- hookManager?: HookManager;
18
- permissionManager?: PermissionManager;
19
8
  callbacks?: AIManagerCallbacks;
20
9
  workdir: string;
21
10
  systemPrompt?: string;
22
11
  subagentType?: string;
23
- reversionManager?: import("./reversionManager.js").ReversionManager;
24
12
  /**Whether to use streaming mode for AI responses - defaults to true */
25
13
  stream?: boolean;
26
14
  getGatewayConfig: () => GatewayConfig;
@@ -30,17 +18,10 @@ export interface AIManagerOptions {
30
18
  getEnvironmentVars?: () => Record<string, string>;
31
19
  }
32
20
  export declare class AIManager {
21
+ private container;
33
22
  isLoading: boolean;
34
23
  private abortController;
35
24
  private toolAbortController;
36
- private logger?;
37
- private toolManager;
38
- private messageManager;
39
- private taskManager;
40
- private backgroundTaskManager?;
41
- private hookManager?;
42
- private reversionManager?;
43
- private permissionManager?;
44
25
  private workdir;
45
26
  private systemPrompt?;
46
27
  private subagentType?;
@@ -50,7 +31,14 @@ export declare class AIManager {
50
31
  private getMaxInputTokensFn;
51
32
  private getLanguageFn;
52
33
  private getEnvironmentVarsFn?;
53
- constructor(options: AIManagerOptions);
34
+ constructor(container: Container, options: AIManagerOptions);
35
+ private get toolManager();
36
+ private get messageManager();
37
+ private get taskManager();
38
+ private get backgroundTaskManager();
39
+ private get hookManager();
40
+ private get reversionManager();
41
+ private get permissionManager();
54
42
  getGatewayConfig(): GatewayConfig;
55
43
  getModelConfig(): ModelConfig;
56
44
  getMaxInputTokens(): number;
@@ -67,6 +55,8 @@ export declare class AIManager {
67
55
  private handleTokenUsageAndCompression;
68
56
  getIsCompressing(): boolean;
69
57
  setIsCompressing(isCompressing: boolean): void;
58
+ private get subagentManager();
59
+ private get skillManager();
70
60
  sendAIMessage(options?: {
71
61
  recursionDepth?: number;
72
62
  model?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aiManager.d.ts","sourceRoot":"","sources":["../../src/managers/aiManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAY3E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,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;CACnD;AAED,qBAAa,SAAS;IAkBlB,OAAO,CAAC,SAAS;IAjBZ,SAAS,EAAE,OAAO,CAAS;IAClC,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAU;IAGxB,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,mBAAmB,CAAe;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,oBAAoB,CAAC,CAA+B;gBAIlD,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,gBAAgB;IAgB3B,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,cAAc,GAEzB;IAED,OAAO,KAAK,WAAW,GAItB;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,gBAAgB,GAM3B;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAGM,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,WAAW;IAI7B,iBAAiB,IAAI,MAAM;IAI3B,WAAW,IAAI,MAAM,GAAG,SAAS;IAIxC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,SAAS,CAAqB;IAEtC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAYvB,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAItC,cAAc,IAAI,IAAI;IAuB7B,OAAO,CAAC,qBAAqB;YAsBf,8BAA8B;IA6ErC,gBAAgB,IAAI,OAAO;IAI3B,gBAAgB,CAAC,aAAa,EAAE,OAAO,GAAG,IAAI;IAOrD,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,YAAY,GAEvB;IAEY,aAAa,CACxB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,oEAAoE;QACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,iEAAiE;QACjE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GACL,OAAO,CAAC,IAAI,CAAC;IAugBhB;;;;OAIG;YACW,gBAAgB;IAiE9B;;;OAGG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,uBAAuB;CAwDtC"}
@@ -1,22 +1,17 @@
1
- import { callAgent, compressMessages, } from "../services/aiService.js";
1
+ import * as aiService from "../services/aiService.js";
2
2
  import { convertMessagesForAPI } from "../utils/convertMessagesForAPI.js";
3
3
  import { calculateComprehensiveTotalTokens } from "../utils/tokenCalculation.js";
4
4
  import * as fs from "node:fs/promises";
5
5
  import { buildSystemPrompt } from "../prompts/index.js";
6
+ import { logger } from "../utils/globalLogger.js";
6
7
  export class AIManager {
7
- constructor(options) {
8
+ // Service overrides
9
+ constructor(container, options) {
10
+ this.container = container;
8
11
  this.isLoading = false;
9
12
  this.abortController = null;
10
13
  this.toolAbortController = null;
11
14
  this.isCompressing = false;
12
- this.messageManager = options.messageManager;
13
- this.toolManager = options.toolManager;
14
- this.taskManager = options.taskManager;
15
- this.backgroundTaskManager = options.backgroundTaskManager;
16
- this.hookManager = options.hookManager;
17
- this.reversionManager = options.reversionManager;
18
- this.permissionManager = options.permissionManager;
19
- this.logger = options.logger;
20
15
  this.workdir = options.workdir;
21
16
  this.systemPrompt = options.systemPrompt;
22
17
  this.subagentType = options.subagentType; // Store subagent type
@@ -29,6 +24,27 @@ export class AIManager {
29
24
  this.getLanguageFn = options.getLanguage;
30
25
  this.getEnvironmentVarsFn = options.getEnvironmentVars;
31
26
  }
27
+ get toolManager() {
28
+ return this.container.get("ToolManager");
29
+ }
30
+ get messageManager() {
31
+ return this.container.get("MessageManager");
32
+ }
33
+ get taskManager() {
34
+ return this.container.get("TaskManager");
35
+ }
36
+ get backgroundTaskManager() {
37
+ return this.container.get("BackgroundTaskManager");
38
+ }
39
+ get hookManager() {
40
+ return this.container.get("HookManager");
41
+ }
42
+ get reversionManager() {
43
+ return this.container.get("ReversionManager");
44
+ }
45
+ get permissionManager() {
46
+ return this.container.get("PermissionManager");
47
+ }
32
48
  // Getter methods for accessing dynamic configuration
33
49
  getGatewayConfig() {
34
50
  return this.getGatewayConfigFn();
@@ -64,7 +80,7 @@ export class AIManager {
64
80
  this.abortController.abort();
65
81
  }
66
82
  catch (error) {
67
- this.logger?.error("Failed to abort AI service:", error);
83
+ logger?.error("Failed to abort AI service:", error);
68
84
  }
69
85
  }
70
86
  // Interrupt tool execution
@@ -73,7 +89,7 @@ export class AIManager {
73
89
  this.toolAbortController.abort();
74
90
  }
75
91
  catch (error) {
76
- this.logger?.error("Failed to abort tool execution:", error);
92
+ logger?.error("Failed to abort tool execution:", error);
77
93
  }
78
94
  }
79
95
  this.setIsLoading(false);
@@ -93,7 +109,7 @@ export class AIManager {
93
109
  }
94
110
  }
95
111
  catch (error) {
96
- this.logger?.warn("Failed to generate compactParams", error);
112
+ logger?.warn("Failed to generate compactParams", error);
97
113
  }
98
114
  return "";
99
115
  }
@@ -109,7 +125,7 @@ export class AIManager {
109
125
  (usage.cache_read_input_tokens || 0) +
110
126
  (usage.cache_creation_input_tokens || 0) >
111
127
  this.getMaxInputTokens()) {
112
- this.logger?.debug(`Token usage exceeded ${this.getMaxInputTokens()}, compressing messages...`);
128
+ logger?.debug(`Token usage exceeded ${this.getMaxInputTokens()}, compressing messages...`);
113
129
  // Check if messages need compression
114
130
  const messagesToCompress = this.messageManager.getMessages();
115
131
  // If there are messages to compress, perform compression
@@ -119,7 +135,7 @@ export class AIManager {
119
135
  await this.messageManager.saveSession();
120
136
  this.setIsCompressing(true);
121
137
  try {
122
- const compressionResult = await compressMessages({
138
+ const compressionResult = await aiService.compressMessages({
123
139
  gatewayConfig: this.getGatewayConfig(),
124
140
  modelConfig: this.getModelConfig(),
125
141
  messages: recentChatMessages,
@@ -143,10 +159,10 @@ export class AIManager {
143
159
  if (compressionUsage && this.callbacks?.onUsageAdded) {
144
160
  this.callbacks.onUsageAdded(compressionUsage);
145
161
  }
146
- this.logger?.debug(`Successfully compressed ${messagesToCompress.length} messages and updated session`);
162
+ logger?.debug(`Successfully compressed ${messagesToCompress.length} messages and updated session`);
147
163
  }
148
164
  catch (compressError) {
149
- this.logger?.error("Failed to compress messages:", compressError);
165
+ logger?.error("Failed to compress messages:", compressError);
150
166
  }
151
167
  finally {
152
168
  this.setIsCompressing(false);
@@ -163,6 +179,12 @@ export class AIManager {
163
179
  this.callbacks.onCompressionStateChange?.(isCompressing);
164
180
  }
165
181
  }
182
+ get subagentManager() {
183
+ return this.container.get("SubagentManager");
184
+ }
185
+ get skillManager() {
186
+ return this.container.get("SkillManager");
187
+ }
166
188
  async sendAIMessage(options = {}) {
167
189
  const { recursionDepth = 0, model, allowedRules, tools, maxTokens, } = options;
168
190
  // Only check isLoading for the initial call (recursionDepth === 0)
@@ -201,7 +223,7 @@ export class AIManager {
201
223
  const combinedMemory = await this.messageManager.getCombinedMemory();
202
224
  // Track if assistant message has been created
203
225
  let assistantMessageCreated = false;
204
- this.logger?.debug("modelConfig in sendAIMessage", this.getModelConfig());
226
+ logger?.debug("modelConfig in sendAIMessage", this.getModelConfig());
205
227
  // Get current permission mode and plan file path
206
228
  const currentMode = this.permissionManager?.getCurrentEffectiveMode(this.getModelConfig().permissionMode);
207
229
  const toolsConfig = this.getFilteredToolsConfig(tools);
@@ -224,6 +246,9 @@ export class AIManager {
224
246
  planModeOptions = { planFilePath, planExists };
225
247
  }
226
248
  }
249
+ // Get available subagents and skills for dynamic prompts
250
+ const availableSubagents = this.subagentManager?.getConfigurations();
251
+ const availableSkills = this.skillManager?.getAvailableSkills();
227
252
  // Call AI service with streaming callbacks if enabled
228
253
  const callAgentOptions = {
229
254
  gatewayConfig: this.getGatewayConfig(),
@@ -240,6 +265,8 @@ export class AIManager {
240
265
  language: this.getLanguage(),
241
266
  isSubagent: !!this.subagentType,
242
267
  planMode: planModeOptions,
268
+ availableSubagents,
269
+ availableSkills,
243
270
  }), // Pass custom system prompt
244
271
  maxTokens: maxTokens, // Pass max tokens override
245
272
  };
@@ -280,7 +307,7 @@ export class AIManager {
280
307
  this.messageManager.updateCurrentMessageReasoning(reasoning);
281
308
  };
282
309
  }
283
- const result = await callAgent(callAgentOptions);
310
+ const result = await aiService.callAgent(callAgentOptions);
284
311
  const createdByStreaming = assistantMessageCreated;
285
312
  // For non-streaming mode, create assistant message after callAgent returns
286
313
  // Also create if streaming mode but no streaming callbacks were called (e.g., when content comes directly in result)
@@ -294,12 +321,12 @@ export class AIManager {
294
321
  if (result.finish_reason) {
295
322
  // Log warning headers when finish reason is length
296
323
  if (result.finish_reason === "length") {
297
- this.logger?.warn("AI response truncated due to length limit. Response headers:", result.response_headers);
324
+ logger?.warn("AI response truncated due to length limit. Response headers:", result.response_headers);
298
325
  }
299
326
  }
300
327
  if (result.response_headers &&
301
328
  Object.keys(result.response_headers).length > 0) {
302
- this.logger?.debug("AI response headers:", result.response_headers);
329
+ logger?.debug("AI response headers:", result.response_headers);
303
330
  }
304
331
  if (result.additionalFields &&
305
332
  Object.keys(result.additionalFields).length > 0) {
@@ -387,7 +414,7 @@ export class AIManager {
387
414
  errorMessage +=
388
415
  " (output truncated, please reduce your output)";
389
416
  }
390
- this.logger?.error(errorMessage, parseError);
417
+ logger?.error(errorMessage, parseError);
391
418
  this.messageManager.updateToolBlock({
392
419
  id: toolId,
393
420
  parameters: argsString,
@@ -416,7 +443,7 @@ export class AIManager {
416
443
  const shouldExecuteTool = await this.executePreToolUseHooks(toolName, toolArgs, toolId);
417
444
  // If PreToolUse hooks blocked execution, skip tool execution
418
445
  if (!shouldExecuteTool) {
419
- this.logger?.info(`Tool ${toolName} execution blocked by PreToolUse hooks`);
446
+ logger?.info(`Tool ${toolName} execution blocked by PreToolUse hooks`);
420
447
  return; // Skip this tool and return from this map function
421
448
  }
422
449
  // Create tool execution context
@@ -449,6 +476,7 @@ export class AIManager {
449
476
  name: toolName,
450
477
  shortResult: toolResult.shortResult,
451
478
  isManuallyBackgrounded: toolResult.isManuallyBackgrounded,
479
+ startLineNumber: toolResult.startLineNumber,
452
480
  });
453
481
  // Execute PostToolUse hooks after successful tool completion
454
482
  await this.executePostToolUseHooks(toolId, toolName, toolArgs, toolResult);
@@ -492,7 +520,7 @@ export class AIManager {
492
520
  const hasBackgrounded = toolBlocks.length > 0 &&
493
521
  toolBlocks.some((block) => block.isManuallyBackgrounded);
494
522
  if (hasBackgrounded) {
495
- this.logger?.info("Some tools were manually backgrounded, stopping recursion.");
523
+ logger?.info("Some tools were manually backgrounded, stopping recursion.");
496
524
  }
497
525
  else if (!isCurrentlyAborted) {
498
526
  // Recursively call AI service, increment recursion depth, and pass same configuration
@@ -535,7 +563,7 @@ export class AIManager {
535
563
  // If Stop/SubagentStop hooks indicate we should continue (due to blocking errors),
536
564
  // restart the AI conversation cycle
537
565
  if (shouldContinue) {
538
- this.logger?.info(`${this.subagentType ? "SubagentStop" : "Stop"} hooks indicate issues need fixing, continuing conversation...`);
566
+ logger?.info(`${this.subagentType ? "SubagentStop" : "Stop"} hooks indicate issues need fixing, continuing conversation...`);
539
567
  // Restart the conversation to let AI fix the issues
540
568
  // Use recursionDepth = 0 to set loading false again for continuation
541
569
  await this.sendAIMessage({
@@ -579,13 +607,13 @@ export class AIManager {
579
607
  const processResult = this.hookManager.processHookResults(hookName, results, this.messageManager);
580
608
  // If hook processing indicates we should block (exit code 2), continue conversation
581
609
  if (processResult.shouldBlock) {
582
- this.logger?.info(`${hookName} hook blocked stopping with error:`, processResult.errorMessage);
610
+ logger?.info(`${hookName} hook blocked stopping with error:`, processResult.errorMessage);
583
611
  shouldContinue = true;
584
612
  }
585
613
  }
586
614
  // Log hook execution results for debugging
587
615
  if (results.length > 0) {
588
- this.logger?.debug(`Executed ${results.length} ${hookName} hook(s):`, results.map((r) => ({
616
+ logger?.debug(`Executed ${results.length} ${hookName} hook(s):`, results.map((r) => ({
589
617
  success: r.success,
590
618
  duration: r.duration,
591
619
  exitCode: r.exitCode,
@@ -597,7 +625,7 @@ export class AIManager {
597
625
  }
598
626
  catch (error) {
599
627
  // Hook execution errors should not interrupt the main workflow
600
- this.logger?.error(`${this.subagentType ? "SubagentStop" : "Stop"} hook execution failed:`, error);
628
+ logger?.error(`${this.subagentType ? "SubagentStop" : "Stop"} hook execution failed:`, error);
601
629
  return false;
602
630
  }
603
631
  }
@@ -631,7 +659,7 @@ export class AIManager {
631
659
  }
632
660
  // Log hook execution results for debugging
633
661
  if (results.length > 0) {
634
- this.logger?.debug(`Executed ${results.length} PreToolUse hook(s) for ${toolName}:`, results.map((r) => ({
662
+ logger?.debug(`Executed ${results.length} PreToolUse hook(s) for ${toolName}:`, results.map((r) => ({
635
663
  success: r.success,
636
664
  duration: r.duration,
637
665
  exitCode: r.exitCode,
@@ -643,7 +671,7 @@ export class AIManager {
643
671
  }
644
672
  catch (error) {
645
673
  // Hook execution errors should not interrupt the main workflow
646
- this.logger?.error("PreToolUse hook execution failed:", error);
674
+ logger?.error("PreToolUse hook execution failed:", error);
647
675
  return true; // Allow tool execution on hook errors
648
676
  }
649
677
  }
@@ -674,7 +702,7 @@ export class AIManager {
674
702
  }
675
703
  // Log hook execution results for debugging
676
704
  if (results.length > 0) {
677
- this.logger?.debug(`Executed ${results.length} PostToolUse hook(s) for ${toolName}:`, results.map((r) => ({
705
+ logger?.debug(`Executed ${results.length} PostToolUse hook(s) for ${toolName}:`, results.map((r) => ({
678
706
  success: r.success,
679
707
  duration: r.duration,
680
708
  exitCode: r.exitCode,
@@ -685,7 +713,7 @@ export class AIManager {
685
713
  }
686
714
  catch (error) {
687
715
  // Hook execution errors should not interrupt the main workflow
688
- this.logger?.error("PostToolUse hook execution failed:", error);
716
+ logger?.error("PostToolUse hook execution failed:", error);
689
717
  }
690
718
  }
691
719
  }
@@ -1,5 +1,6 @@
1
1
  import { type ChildProcess } from "child_process";
2
2
  import { BackgroundTask } from "../types/processes.js";
3
+ import { Container } from "../utils/container.js";
3
4
  export interface BackgroundTaskManagerCallbacks {
4
5
  onTasksChange?: (tasks: BackgroundTask[]) => void;
5
6
  }
@@ -8,11 +9,12 @@ export interface BackgroundTaskManagerOptions {
8
9
  workdir: string;
9
10
  }
10
11
  export declare class BackgroundTaskManager {
12
+ private container;
11
13
  private tasks;
12
14
  private nextId;
13
15
  private callbacks;
14
16
  private workdir;
15
- constructor(options: BackgroundTaskManagerOptions);
17
+ constructor(container: Container, options: BackgroundTaskManagerOptions);
16
18
  private notifyTasksChange;
17
19
  generateId(): string;
18
20
  addTask(task: BackgroundTask): void;
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAIxE,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,4BAA4B;IAKjD,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IA8GnD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAoEF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiCrD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA+B7B,OAAO,IAAI,IAAI;CAUvB"}
1
+ {"version":3,"file":"backgroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,WAAW,8BAA8B;IAC7C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,SAAS;IANnB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAGd,SAAS,EAAE,SAAS,EAC5B,OAAO,EAAE,4BAA4B;IAMvC,OAAO,CAAC,iBAAiB;IAIlB,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAKnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/C,WAAW,IAAI,cAAc,EAAE;IAI/B,UAAU,CACf,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,GACf;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE;IA8GnD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAoEF,SAAS,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,MAAM,GACd;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAiCrD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA+B7B,OAAO,IAAI,IAAI;CAUvB"}