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.
- package/dist/agent.d.ts +8 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +49 -240
- package/dist/constants/tools.d.ts +0 -2
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +0 -2
- package/dist/core/plugin.d.ts +86 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +164 -0
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/managers/MemoryRuleManager.d.ts +3 -1
- package/dist/managers/MemoryRuleManager.d.ts.map +1 -1
- package/dist/managers/MemoryRuleManager.js +2 -1
- package/dist/managers/aiManager.d.ts +13 -23
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +59 -32
- package/dist/managers/backgroundTaskManager.d.ts +3 -1
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -1
- package/dist/managers/backgroundTaskManager.js +2 -1
- package/dist/managers/bashManager.d.ts +4 -4
- package/dist/managers/bashManager.d.ts.map +1 -1
- package/dist/managers/bashManager.js +5 -2
- package/dist/managers/foregroundTaskManager.d.ts +3 -0
- package/dist/managers/foregroundTaskManager.d.ts.map +1 -1
- package/dist/managers/foregroundTaskManager.js +2 -1
- package/dist/managers/hookManager.d.ts +3 -3
- package/dist/managers/hookManager.d.ts.map +1 -1
- package/dist/managers/hookManager.js +20 -19
- package/dist/managers/liveConfigManager.d.ts +6 -13
- package/dist/managers/liveConfigManager.d.ts.map +1 -1
- package/dist/managers/liveConfigManager.js +50 -45
- package/dist/managers/lspManager.d.ts +4 -5
- package/dist/managers/lspManager.d.ts.map +1 -1
- package/dist/managers/lspManager.js +13 -12
- package/dist/managers/mcpManager.d.ts +3 -2
- package/dist/managers/mcpManager.d.ts.map +1 -1
- package/dist/managers/mcpManager.js +16 -15
- package/dist/managers/messageManager.d.ts +5 -7
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +12 -7
- package/dist/managers/permissionManager.d.ts +6 -4
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +39 -63
- package/dist/managers/planManager.d.ts +4 -6
- package/dist/managers/planManager.d.ts.map +1 -1
- package/dist/managers/planManager.js +18 -4
- package/dist/managers/pluginManager.d.ts +10 -22
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +27 -14
- package/dist/managers/reversionManager.d.ts +4 -3
- package/dist/managers/reversionManager.d.ts.map +1 -1
- package/dist/managers/reversionManager.js +5 -2
- package/dist/managers/skillManager.d.ts +3 -2
- package/dist/managers/skillManager.d.ts.map +1 -1
- package/dist/managers/skillManager.js +15 -14
- package/dist/managers/slashCommandManager.d.ts +9 -16
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +21 -10
- package/dist/managers/subagentManager.d.ts +7 -17
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +41 -34
- package/dist/managers/toolManager.d.ts +15 -38
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +66 -56
- package/dist/prompts/index.d.ts +6 -3
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +8 -16
- package/dist/services/MarketplaceService.d.ts.map +1 -1
- package/dist/services/MarketplaceService.js +13 -0
- package/dist/services/aiService.d.ts +4 -0
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +47 -7
- package/dist/services/configurationService.d.ts.map +1 -1
- package/dist/services/configurationService.js +30 -11
- package/dist/services/taskManager.d.ts +3 -1
- package/dist/services/taskManager.d.ts.map +1 -1
- package/dist/services/taskManager.js +2 -1
- package/dist/tools/bashTool.js +2 -2
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +9 -1
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +2 -2
- package/dist/tools/skillTool.d.ts +2 -4
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +61 -61
- package/dist/tools/taskOutputTool.js +1 -1
- package/dist/tools/taskTool.d.ts +2 -4
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +192 -187
- package/dist/tools/types.d.ts +11 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +4 -2
- package/dist/types/marketplace.d.ts +8 -0
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/permissions.d.ts +1 -1
- package/dist/types/permissions.d.ts.map +1 -1
- package/dist/types/permissions.js +1 -3
- package/dist/types/skills.d.ts +0 -2
- package/dist/types/skills.d.ts.map +1 -1
- package/dist/types/tools.d.ts +0 -15
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/container.d.ts +31 -0
- package/dist/utils/container.d.ts.map +1 -0
- package/dist/utils/container.js +79 -0
- package/dist/utils/containerSetup.d.ts +26 -0
- package/dist/utils/containerSetup.d.ts.map +1 -0
- package/dist/utils/containerSetup.js +165 -0
- package/dist/utils/editUtils.d.ts +0 -3
- package/dist/utils/editUtils.d.ts.map +1 -1
- package/dist/utils/editUtils.js +4 -3
- package/dist/utils/hookMatcher.d.ts +1 -1
- package/dist/utils/hookMatcher.d.ts.map +1 -1
- package/dist/utils/hookMatcher.js +2 -2
- package/dist/utils/openaiClient.js +2 -2
- package/dist/utils/stringUtils.d.ts +6 -0
- package/dist/utils/stringUtils.d.ts.map +1 -1
- package/dist/utils/stringUtils.js +8 -0
- package/package.json +1 -1
- package/src/agent.ts +60 -282
- package/src/constants/tools.ts +0 -2
- package/src/core/plugin.ts +224 -0
- package/src/index.ts +1 -6
- package/src/managers/MemoryRuleManager.ts +6 -1
- package/src/managers/aiManager.ts +83 -58
- package/src/managers/backgroundTaskManager.ts +5 -1
- package/src/managers/bashManager.ts +9 -4
- package/src/managers/foregroundTaskManager.ts +3 -0
- package/src/managers/hookManager.ts +21 -23
- package/src/managers/liveConfigManager.ts +57 -53
- package/src/managers/lspManager.ts +14 -19
- package/src/managers/mcpManager.ts +20 -20
- package/src/managers/messageManager.ts +19 -12
- package/src/managers/permissionManager.ts +45 -70
- package/src/managers/planManager.ts +26 -7
- package/src/managers/pluginManager.ts +37 -33
- package/src/managers/reversionManager.ts +5 -3
- package/src/managers/skillManager.ts +19 -20
- package/src/managers/slashCommandManager.ts +30 -25
- package/src/managers/subagentManager.ts +53 -53
- package/src/managers/toolManager.ts +91 -90
- package/src/prompts/index.ts +12 -24
- package/src/services/MarketplaceService.ts +13 -0
- package/src/services/aiService.ts +61 -15
- package/src/services/configurationService.ts +34 -13
- package/src/services/taskManager.ts +5 -1
- package/src/tools/bashTool.ts +2 -2
- package/src/tools/editTool.ts +9 -1
- package/src/tools/readTool.ts +2 -2
- package/src/tools/skillTool.ts +75 -71
- package/src/tools/taskOutputTool.ts +1 -1
- package/src/tools/taskTool.ts +224 -225
- package/src/tools/types.ts +12 -1
- package/src/tools/writeTool.ts +4 -2
- package/src/types/marketplace.ts +9 -0
- package/src/types/permissions.ts +0 -4
- package/src/types/skills.ts +0 -3
- package/src/types/tools.ts +0 -17
- package/src/utils/container.ts +92 -0
- package/src/utils/containerSetup.ts +256 -0
- package/src/utils/editUtils.ts +4 -3
- package/src/utils/hookMatcher.ts +2 -2
- package/src/utils/openaiClient.ts +2 -2
- package/src/utils/stringUtils.ts +9 -0
- package/dist/tools/deleteFileTool.d.ts +0 -6
- package/dist/tools/deleteFileTool.d.ts.map +0 -1
- package/dist/tools/deleteFileTool.js +0 -100
- package/dist/tools/multiEditTool.d.ts +0 -6
- package/dist/tools/multiEditTool.d.ts.map +0 -1
- package/dist/tools/multiEditTool.js +0 -246
- package/src/tools/deleteFileTool.ts +0 -127
- 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
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,9 @@ export * from "./services/memory.js";
|
|
|
3
3
|
export * from "./services/session.js";
|
|
4
4
|
export * from "./services/hook.js";
|
|
5
5
|
export * from "./services/jsonlHandler.js";
|
|
6
|
-
export * from "./services/configurationService.js";
|
|
7
|
-
export * from "./services/MarketplaceService.js";
|
|
8
6
|
export * from "./constants/tools.js";
|
|
9
|
-
export * from "./managers/pluginManager.js";
|
|
10
|
-
export * from "./managers/pluginScopeManager.js";
|
|
11
7
|
export * from "./agent.js";
|
|
8
|
+
export * from "./core/plugin.js";
|
|
12
9
|
export * from "./utils/bashParser.js";
|
|
13
10
|
export * from "./utils/convertMessagesForAPI.js";
|
|
14
11
|
export * from "./utils/fileFilter.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAG3C,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
|
@@ -4,15 +4,11 @@ export * from "./services/memory.js";
|
|
|
4
4
|
export * from "./services/session.js";
|
|
5
5
|
export * from "./services/hook.js";
|
|
6
6
|
export * from "./services/jsonlHandler.js";
|
|
7
|
-
export * from "./services/configurationService.js"; // New configuration management service
|
|
8
|
-
export * from "./services/MarketplaceService.js";
|
|
9
7
|
// Export constants
|
|
10
8
|
export * from "./constants/tools.js";
|
|
11
|
-
// Export managers
|
|
12
|
-
export * from "./managers/pluginManager.js";
|
|
13
|
-
export * from "./managers/pluginScopeManager.js";
|
|
14
9
|
// Export main agent
|
|
15
10
|
export * from "./agent.js";
|
|
11
|
+
export * from "./core/plugin.js";
|
|
16
12
|
// Export all utilities
|
|
17
13
|
export * from "./utils/bashParser.js";
|
|
18
14
|
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;
|
|
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 {
|
|
2
|
-
import
|
|
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":"
|
|
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;IAsgBhB;;;;OAIG;YACW,gBAAgB;IAiE9B;;;OAGG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,uBAAuB;CAwDtC"}
|
|
@@ -1,22 +1,17 @@
|
|
|
1
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
162
|
+
logger?.debug(`Successfully compressed ${messagesToCompress.length} messages and updated session`);
|
|
147
163
|
}
|
|
148
164
|
catch (compressError) {
|
|
149
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -492,7 +519,7 @@ export class AIManager {
|
|
|
492
519
|
const hasBackgrounded = toolBlocks.length > 0 &&
|
|
493
520
|
toolBlocks.some((block) => block.isManuallyBackgrounded);
|
|
494
521
|
if (hasBackgrounded) {
|
|
495
|
-
|
|
522
|
+
logger?.info("Some tools were manually backgrounded, stopping recursion.");
|
|
496
523
|
}
|
|
497
524
|
else if (!isCurrentlyAborted) {
|
|
498
525
|
// Recursively call AI service, increment recursion depth, and pass same configuration
|
|
@@ -535,7 +562,7 @@ export class AIManager {
|
|
|
535
562
|
// If Stop/SubagentStop hooks indicate we should continue (due to blocking errors),
|
|
536
563
|
// restart the AI conversation cycle
|
|
537
564
|
if (shouldContinue) {
|
|
538
|
-
|
|
565
|
+
logger?.info(`${this.subagentType ? "SubagentStop" : "Stop"} hooks indicate issues need fixing, continuing conversation...`);
|
|
539
566
|
// Restart the conversation to let AI fix the issues
|
|
540
567
|
// Use recursionDepth = 0 to set loading false again for continuation
|
|
541
568
|
await this.sendAIMessage({
|
|
@@ -579,13 +606,13 @@ export class AIManager {
|
|
|
579
606
|
const processResult = this.hookManager.processHookResults(hookName, results, this.messageManager);
|
|
580
607
|
// If hook processing indicates we should block (exit code 2), continue conversation
|
|
581
608
|
if (processResult.shouldBlock) {
|
|
582
|
-
|
|
609
|
+
logger?.info(`${hookName} hook blocked stopping with error:`, processResult.errorMessage);
|
|
583
610
|
shouldContinue = true;
|
|
584
611
|
}
|
|
585
612
|
}
|
|
586
613
|
// Log hook execution results for debugging
|
|
587
614
|
if (results.length > 0) {
|
|
588
|
-
|
|
615
|
+
logger?.debug(`Executed ${results.length} ${hookName} hook(s):`, results.map((r) => ({
|
|
589
616
|
success: r.success,
|
|
590
617
|
duration: r.duration,
|
|
591
618
|
exitCode: r.exitCode,
|
|
@@ -597,7 +624,7 @@ export class AIManager {
|
|
|
597
624
|
}
|
|
598
625
|
catch (error) {
|
|
599
626
|
// Hook execution errors should not interrupt the main workflow
|
|
600
|
-
|
|
627
|
+
logger?.error(`${this.subagentType ? "SubagentStop" : "Stop"} hook execution failed:`, error);
|
|
601
628
|
return false;
|
|
602
629
|
}
|
|
603
630
|
}
|
|
@@ -631,7 +658,7 @@ export class AIManager {
|
|
|
631
658
|
}
|
|
632
659
|
// Log hook execution results for debugging
|
|
633
660
|
if (results.length > 0) {
|
|
634
|
-
|
|
661
|
+
logger?.debug(`Executed ${results.length} PreToolUse hook(s) for ${toolName}:`, results.map((r) => ({
|
|
635
662
|
success: r.success,
|
|
636
663
|
duration: r.duration,
|
|
637
664
|
exitCode: r.exitCode,
|
|
@@ -643,7 +670,7 @@ export class AIManager {
|
|
|
643
670
|
}
|
|
644
671
|
catch (error) {
|
|
645
672
|
// Hook execution errors should not interrupt the main workflow
|
|
646
|
-
|
|
673
|
+
logger?.error("PreToolUse hook execution failed:", error);
|
|
647
674
|
return true; // Allow tool execution on hook errors
|
|
648
675
|
}
|
|
649
676
|
}
|
|
@@ -674,7 +701,7 @@ export class AIManager {
|
|
|
674
701
|
}
|
|
675
702
|
// Log hook execution results for debugging
|
|
676
703
|
if (results.length > 0) {
|
|
677
|
-
|
|
704
|
+
logger?.debug(`Executed ${results.length} PostToolUse hook(s) for ${toolName}:`, results.map((r) => ({
|
|
678
705
|
success: r.success,
|
|
679
706
|
duration: r.duration,
|
|
680
707
|
exitCode: r.exitCode,
|
|
@@ -685,7 +712,7 @@ export class AIManager {
|
|
|
685
712
|
}
|
|
686
713
|
catch (error) {
|
|
687
714
|
// Hook execution errors should not interrupt the main workflow
|
|
688
|
-
|
|
715
|
+
logger?.error("PostToolUse hook execution failed:", error);
|
|
689
716
|
}
|
|
690
717
|
}
|
|
691
718
|
}
|
|
@@ -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;
|
|
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"}
|
|
@@ -2,7 +2,8 @@ import { spawn } from "child_process";
|
|
|
2
2
|
import { stripAnsiColors } from "../utils/stringUtils.js";
|
|
3
3
|
import { logger } from "../utils/globalLogger.js";
|
|
4
4
|
export class BackgroundTaskManager {
|
|
5
|
-
constructor(options) {
|
|
5
|
+
constructor(container, options) {
|
|
6
|
+
this.container = container;
|
|
6
7
|
this.tasks = new Map();
|
|
7
8
|
this.nextId = 1;
|
|
8
9
|
this.callbacks = options.callbacks || {};
|