wave-agent-sdk 0.4.0 → 0.5.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 +28 -5
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +59 -37
- package/dist/constants/tools.d.ts +2 -2
- package/dist/constants/tools.js +2 -2
- package/dist/managers/MemoryRuleManager.js +1 -1
- package/dist/managers/aiManager.d.ts +8 -3
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +35 -9
- package/dist/managers/backgroundBashManager.d.ts.map +1 -1
- package/dist/managers/backgroundBashManager.js +1 -0
- package/dist/managers/backgroundTaskManager.d.ts +35 -0
- package/dist/managers/backgroundTaskManager.d.ts.map +1 -0
- package/dist/managers/backgroundTaskManager.js +249 -0
- package/dist/managers/foregroundTaskManager.d.ts +9 -0
- package/dist/managers/foregroundTaskManager.d.ts.map +1 -0
- package/dist/managers/foregroundTaskManager.js +20 -0
- package/dist/managers/liveConfigManager.d.ts +1 -1
- package/dist/managers/lspManager.d.ts.map +1 -1
- package/dist/managers/lspManager.js +3 -1
- package/dist/managers/messageManager.d.ts +12 -2
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +36 -2
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +1 -7
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +3 -2
- package/dist/managers/slashCommandManager.d.ts +3 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +1 -0
- package/dist/managers/subagentManager.d.ts +11 -2
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +141 -35
- package/dist/managers/toolManager.d.ts +7 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +9 -3
- package/dist/services/GitService.d.ts.map +1 -1
- package/dist/services/GitService.js +6 -2
- package/dist/services/MarketplaceService.d.ts +2 -2
- package/dist/services/MarketplaceService.d.ts.map +1 -1
- package/dist/services/MarketplaceService.js +18 -11
- package/dist/services/MemoryRuleService.d.ts +1 -1
- package/dist/services/MemoryRuleService.d.ts.map +1 -1
- package/dist/services/MemoryRuleService.js +13 -2
- package/dist/services/memory.js +1 -1
- package/dist/tools/bashTool.d.ts +0 -8
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +52 -174
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +6 -5
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +7 -6
- package/dist/tools/taskOutputTool.d.ts +3 -0
- package/dist/tools/taskOutputTool.d.ts.map +1 -0
- package/dist/tools/taskOutputTool.js +149 -0
- package/dist/tools/taskStopTool.d.ts +3 -0
- package/dist/tools/taskStopTool.d.ts.map +1 -0
- package/dist/tools/taskStopTool.js +65 -0
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +105 -63
- package/dist/tools/types.d.ts +3 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/types/marketplace.d.ts +1 -0
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/messaging.d.ts +1 -0
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/processes.d.ts +24 -4
- package/dist/types/processes.d.ts.map +1 -1
- package/dist/utils/editUtils.d.ts +2 -11
- package/dist/utils/editUtils.d.ts.map +1 -1
- package/dist/utils/editUtils.js +52 -79
- package/dist/utils/messageOperations.d.ts +3 -1
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +5 -1
- package/package.json +5 -5
- package/src/agent.ts +79 -45
- package/src/constants/tools.ts +2 -2
- package/src/managers/MemoryRuleManager.ts +1 -1
- package/src/managers/aiManager.ts +50 -17
- package/src/managers/backgroundBashManager.ts +1 -0
- package/src/managers/backgroundTaskManager.ts +306 -0
- package/src/managers/foregroundTaskManager.ts +26 -0
- package/src/managers/lspManager.ts +3 -1
- package/src/managers/messageManager.ts +48 -2
- package/src/managers/permissionManager.ts +1 -7
- package/src/managers/pluginManager.ts +4 -3
- package/src/managers/slashCommandManager.ts +4 -0
- package/src/managers/subagentManager.ts +171 -31
- package/src/managers/toolManager.ts +16 -4
- package/src/services/GitService.ts +6 -2
- package/src/services/MarketplaceService.ts +30 -12
- package/src/services/MemoryRuleService.ts +18 -6
- package/src/services/memory.ts +1 -1
- package/src/tools/bashTool.ts +73 -200
- package/src/tools/editTool.ts +6 -17
- package/src/tools/multiEditTool.ts +7 -18
- package/src/tools/taskOutputTool.ts +174 -0
- package/src/tools/taskStopTool.ts +72 -0
- package/src/tools/taskTool.ts +130 -74
- package/src/tools/types.ts +3 -0
- package/src/types/marketplace.ts +1 -0
- package/src/types/messaging.ts +1 -0
- package/src/types/processes.ts +33 -4
- package/src/utils/editUtils.ts +65 -103
- package/src/utils/messageOperations.ts +7 -0
package/dist/agent.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type MessageManagerCallbacks } from "./managers/messageManager.js";
|
|
2
2
|
import { type SubagentManagerCallbacks } from "./managers/subagentManager.js";
|
|
3
3
|
import { type McpManagerCallbacks } from "./managers/mcpManager.js";
|
|
4
|
-
import { type
|
|
4
|
+
import { type BackgroundTaskManagerCallbacks } from "./managers/backgroundTaskManager.js";
|
|
5
5
|
import type { SlashCommand, CustomSlashCommand, ILspManager, PluginConfig } from "./types/index.js";
|
|
6
|
-
import type { Message, Logger, McpServerStatus, GatewayConfig, ModelConfig, Usage, PermissionMode, PermissionCallback } from "./types/index.js";
|
|
6
|
+
import type { Message, Logger, McpServerStatus, GatewayConfig, ModelConfig, Usage, PermissionMode, PermissionCallback, BackgroundTask, ForegroundTask } from "./types/index.js";
|
|
7
7
|
import { ClientOptions } from "openai";
|
|
8
8
|
/**
|
|
9
9
|
* Configuration options for Agent instances
|
|
@@ -44,14 +44,16 @@ export interface AgentOptions {
|
|
|
44
44
|
/**Optional local plugins to load */
|
|
45
45
|
plugins?: PluginConfig[];
|
|
46
46
|
}
|
|
47
|
-
export interface AgentCallbacks extends MessageManagerCallbacks,
|
|
47
|
+
export interface AgentCallbacks extends MessageManagerCallbacks, BackgroundTaskManagerCallbacks, McpManagerCallbacks, SubagentManagerCallbacks {
|
|
48
|
+
onTasksChange?: (tasks: BackgroundTask[]) => void;
|
|
48
49
|
onPermissionModeChange?: (mode: PermissionMode) => void;
|
|
50
|
+
onBackgroundCurrentTask?: () => void;
|
|
49
51
|
}
|
|
50
52
|
export declare class Agent {
|
|
51
53
|
private messageManager;
|
|
52
54
|
private aiManager;
|
|
53
55
|
private bashManager;
|
|
54
|
-
private
|
|
56
|
+
private backgroundTaskManager;
|
|
55
57
|
private logger?;
|
|
56
58
|
private toolManager;
|
|
57
59
|
private mcpManager;
|
|
@@ -66,6 +68,7 @@ export declare class Agent {
|
|
|
66
68
|
private reversionManager;
|
|
67
69
|
private memoryRuleManager;
|
|
68
70
|
private liveConfigManager;
|
|
71
|
+
private foregroundTaskManager;
|
|
69
72
|
private configurationService;
|
|
70
73
|
private workdir;
|
|
71
74
|
private systemPrompt?;
|
|
@@ -111,7 +114,7 @@ export declare class Agent {
|
|
|
111
114
|
/** Get user memory content */
|
|
112
115
|
get userMemory(): string;
|
|
113
116
|
/** Get combined memory content (project + user + modular rules) */
|
|
114
|
-
|
|
117
|
+
getCombinedMemory(): Promise<string>;
|
|
115
118
|
/** Get AI loading status */
|
|
116
119
|
get isLoading(): boolean;
|
|
117
120
|
/** Get message compression status */
|
|
@@ -126,6 +129,14 @@ export declare class Agent {
|
|
|
126
129
|
} | null;
|
|
127
130
|
/** Kill background bash shell */
|
|
128
131
|
killBackgroundShell(id: string): boolean;
|
|
132
|
+
/** Get background task output */
|
|
133
|
+
getBackgroundTaskOutput(id: string, filter?: string): {
|
|
134
|
+
stdout: string;
|
|
135
|
+
stderr: string;
|
|
136
|
+
status: string;
|
|
137
|
+
} | null;
|
|
138
|
+
/** Stop background task */
|
|
139
|
+
stopBackgroundTask(id: string): boolean;
|
|
129
140
|
/**
|
|
130
141
|
* Static async factory method for creating Agent instances
|
|
131
142
|
*
|
|
@@ -198,6 +209,18 @@ export declare class Agent {
|
|
|
198
209
|
abortBashCommand(): void;
|
|
199
210
|
/** Interrupt slash command execution */
|
|
200
211
|
abortSlashCommand(): void;
|
|
212
|
+
/**
|
|
213
|
+
* Register a foreground task that can be backgrounded
|
|
214
|
+
*/
|
|
215
|
+
registerForegroundTask(task: ForegroundTask): void;
|
|
216
|
+
/**
|
|
217
|
+
* Unregister a foreground task
|
|
218
|
+
*/
|
|
219
|
+
unregisterForegroundTask(id: string): void;
|
|
220
|
+
/**
|
|
221
|
+
* Background the current foreground task
|
|
222
|
+
*/
|
|
223
|
+
backgroundCurrentTask(): Promise<void>;
|
|
201
224
|
/** Destroy managers, clean up resources */
|
|
202
225
|
destroy(): Promise<void>;
|
|
203
226
|
/**
|
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ForegroundTaskManager } from "./managers/foregroundTaskManager.js";
|
|
1
2
|
import { MessageManager, } from "./managers/messageManager.js";
|
|
2
3
|
import { AIManager } from "./managers/aiManager.js";
|
|
3
4
|
import { ToolManager } from "./managers/toolManager.js";
|
|
@@ -6,7 +7,7 @@ import * as memory from "./services/memory.js";
|
|
|
6
7
|
import { McpManager } from "./managers/mcpManager.js";
|
|
7
8
|
import { LspManager } from "./managers/lspManager.js";
|
|
8
9
|
import { BashManager } from "./managers/bashManager.js";
|
|
9
|
-
import {
|
|
10
|
+
import { BackgroundTaskManager, } from "./managers/backgroundTaskManager.js";
|
|
10
11
|
import { SlashCommandManager } from "./managers/slashCommandManager.js";
|
|
11
12
|
import { PluginManager } from "./managers/pluginManager.js";
|
|
12
13
|
import { HookManager } from "./managers/hookManager.js";
|
|
@@ -63,8 +64,14 @@ export class Agent {
|
|
|
63
64
|
this.stream = stream; // Save streaming mode flag
|
|
64
65
|
// Store options for dynamic configuration resolution
|
|
65
66
|
this.options = options;
|
|
66
|
-
this.
|
|
67
|
-
|
|
67
|
+
this.foregroundTaskManager = new ForegroundTaskManager();
|
|
68
|
+
this.backgroundTaskManager = new BackgroundTaskManager({
|
|
69
|
+
callbacks: {
|
|
70
|
+
...callbacks,
|
|
71
|
+
onTasksChange: (tasks) => {
|
|
72
|
+
callbacks.onTasksChange?.(tasks);
|
|
73
|
+
},
|
|
74
|
+
},
|
|
68
75
|
workdir: this.workdir,
|
|
69
76
|
});
|
|
70
77
|
this.mcpManager = new McpManager({ callbacks, logger: this.logger }); // Initialize MCP manager
|
|
@@ -88,18 +95,19 @@ export class Agent {
|
|
|
88
95
|
logger: this.logger,
|
|
89
96
|
workdir: this.workdir,
|
|
90
97
|
});
|
|
98
|
+
// Initialize memory rule manager
|
|
99
|
+
this.memoryRuleManager = new MemoryRuleManager({
|
|
100
|
+
workdir: this.workdir,
|
|
101
|
+
});
|
|
91
102
|
// Initialize MessageManager
|
|
92
103
|
this.messageManager = new MessageManager({
|
|
93
104
|
callbacks,
|
|
94
105
|
workdir: this.workdir,
|
|
95
106
|
logger: this.logger,
|
|
107
|
+
memoryRuleManager: this.memoryRuleManager,
|
|
96
108
|
});
|
|
97
109
|
// Initialize ReversionManager
|
|
98
110
|
this.reversionManager = new ReversionManager(new ReversionService(this.messageManager.getTranscriptPath()));
|
|
99
|
-
// Initialize memory rule manager
|
|
100
|
-
this.memoryRuleManager = new MemoryRuleManager({
|
|
101
|
-
workdir: this.workdir,
|
|
102
|
-
});
|
|
103
111
|
// Create a wrapper for canUseTool that triggers notification hooks
|
|
104
112
|
const canUseToolWithNotification = options.canUseTool
|
|
105
113
|
? async (context) => {
|
|
@@ -146,6 +154,8 @@ export class Agent {
|
|
|
146
154
|
reversionManager: this.reversionManager,
|
|
147
155
|
permissionMode: options.permissionMode, // Let PermissionManager handle defaultMode resolution
|
|
148
156
|
canUseToolCallback: canUseToolWithNotification,
|
|
157
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
158
|
+
foregroundTaskManager: this.foregroundTaskManager,
|
|
149
159
|
}); // Initialize tool registry with permission support
|
|
150
160
|
this.liveConfigManager = new LiveConfigManager({
|
|
151
161
|
workdir: this.workdir,
|
|
@@ -175,13 +185,15 @@ export class Agent {
|
|
|
175
185
|
getLanguage: () => this.getLanguage(),
|
|
176
186
|
hookManager: this.hookManager,
|
|
177
187
|
onUsageAdded: (usage) => this.addUsage(usage),
|
|
188
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
189
|
+
memoryRuleManager: this.memoryRuleManager,
|
|
178
190
|
});
|
|
179
191
|
// Initialize AI manager with resolved configuration
|
|
180
192
|
this.aiManager = new AIManager({
|
|
181
193
|
messageManager: this.messageManager,
|
|
182
194
|
toolManager: this.toolManager,
|
|
183
195
|
logger: this.logger,
|
|
184
|
-
|
|
196
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
185
197
|
hookManager: this.hookManager,
|
|
186
198
|
permissionManager: this.permissionManager,
|
|
187
199
|
callbacks: {
|
|
@@ -204,6 +216,7 @@ export class Agent {
|
|
|
204
216
|
this.slashCommandManager = new SlashCommandManager({
|
|
205
217
|
messageManager: this.messageManager,
|
|
206
218
|
aiManager: this.aiManager,
|
|
219
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
207
220
|
workdir: this.workdir,
|
|
208
221
|
logger: this.logger,
|
|
209
222
|
});
|
|
@@ -282,31 +295,8 @@ export class Agent {
|
|
|
282
295
|
return this._userMemoryContent;
|
|
283
296
|
}
|
|
284
297
|
/** Get combined memory content (project + user + modular rules) */
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (this._projectMemoryContent.trim()) {
|
|
288
|
-
combined += this._projectMemoryContent;
|
|
289
|
-
}
|
|
290
|
-
if (this._userMemoryContent.trim()) {
|
|
291
|
-
if (combined) {
|
|
292
|
-
combined += "\n\n";
|
|
293
|
-
}
|
|
294
|
-
combined += this._userMemoryContent;
|
|
295
|
-
}
|
|
296
|
-
// Add modular memory rules
|
|
297
|
-
const filesInContext = this.messageManager.getFilesInContext();
|
|
298
|
-
const activeRules = this.memoryRuleManager.getActiveRules(filesInContext);
|
|
299
|
-
if (activeRules.length > 0) {
|
|
300
|
-
this.logger?.debug(`Active modular rules (${activeRules.length}): ${activeRules.map((r) => r.id).join(", ")}`);
|
|
301
|
-
if (combined) {
|
|
302
|
-
combined += "\n\n";
|
|
303
|
-
}
|
|
304
|
-
combined += activeRules.map((r) => r.content).join("\n\n");
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
this.logger?.debug("No active modular rules for current context");
|
|
308
|
-
}
|
|
309
|
-
return combined;
|
|
298
|
+
async getCombinedMemory() {
|
|
299
|
+
return this.messageManager.getCombinedMemory();
|
|
310
300
|
}
|
|
311
301
|
/** Get AI loading status */
|
|
312
302
|
get isLoading() {
|
|
@@ -322,11 +312,19 @@ export class Agent {
|
|
|
322
312
|
}
|
|
323
313
|
/** Get background bash shell output */
|
|
324
314
|
getBackgroundShellOutput(id, filter) {
|
|
325
|
-
return this.
|
|
315
|
+
return this.backgroundTaskManager.getOutput(id, filter);
|
|
326
316
|
}
|
|
327
317
|
/** Kill background bash shell */
|
|
328
318
|
killBackgroundShell(id) {
|
|
329
|
-
return this.
|
|
319
|
+
return this.backgroundTaskManager.stopTask(id);
|
|
320
|
+
}
|
|
321
|
+
/** Get background task output */
|
|
322
|
+
getBackgroundTaskOutput(id, filter) {
|
|
323
|
+
return this.backgroundTaskManager.getOutput(id, filter);
|
|
324
|
+
}
|
|
325
|
+
/** Stop background task */
|
|
326
|
+
stopBackgroundTask(id) {
|
|
327
|
+
return this.backgroundTaskManager.stopTask(id);
|
|
330
328
|
}
|
|
331
329
|
/**
|
|
332
330
|
* Static async factory method for creating Agent instances
|
|
@@ -654,14 +652,38 @@ export class Agent {
|
|
|
654
652
|
abortSlashCommand() {
|
|
655
653
|
this.slashCommandManager.abortCurrentCommand();
|
|
656
654
|
}
|
|
655
|
+
/**
|
|
656
|
+
* Register a foreground task that can be backgrounded
|
|
657
|
+
*/
|
|
658
|
+
registerForegroundTask(task) {
|
|
659
|
+
this.foregroundTaskManager.registerForegroundTask(task);
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Unregister a foreground task
|
|
663
|
+
*/
|
|
664
|
+
unregisterForegroundTask(id) {
|
|
665
|
+
this.foregroundTaskManager.unregisterForegroundTask(id);
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Background the current foreground task
|
|
669
|
+
*/
|
|
670
|
+
async backgroundCurrentTask() {
|
|
671
|
+
await this.foregroundTaskManager.backgroundCurrentTask();
|
|
672
|
+
this.options.callbacks?.onBackgroundCurrentTask?.();
|
|
673
|
+
// If there was no foreground task (e.g. a tool that doesn't register one),
|
|
674
|
+
// or even if there was, we should stop the AI recursion loop.
|
|
675
|
+
if (!this.foregroundTaskManager.hasActiveTasks()) {
|
|
676
|
+
this.aiManager.abortRecursion();
|
|
677
|
+
}
|
|
678
|
+
}
|
|
657
679
|
/** Destroy managers, clean up resources */
|
|
658
680
|
async destroy() {
|
|
659
681
|
await this.messageManager.saveSession();
|
|
660
682
|
this.abortAIMessage(); // This will abort tools including Task tool (subagents)
|
|
661
683
|
this.abortBashCommand();
|
|
662
684
|
this.abortSlashCommand();
|
|
663
|
-
// Cleanup background
|
|
664
|
-
this.
|
|
685
|
+
// Cleanup background task manager
|
|
686
|
+
this.backgroundTaskManager.cleanup();
|
|
665
687
|
// Cleanup MCP connections
|
|
666
688
|
await this.mcpManager.cleanup();
|
|
667
689
|
// Cleanup LSP connections
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion";
|
|
2
2
|
export declare const BASH_TOOL_NAME = "Bash";
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
3
|
+
export declare const TASK_OUTPUT_TOOL_NAME = "TaskOutput";
|
|
4
|
+
export declare const TASK_STOP_TOOL_NAME = "TaskStop";
|
|
5
5
|
export declare const DELETE_FILE_TOOL_NAME = "Delete";
|
|
6
6
|
export declare const EDIT_TOOL_NAME = "Edit";
|
|
7
7
|
export declare const EXIT_PLAN_MODE_TOOL_NAME = "ExitPlanMode";
|
package/dist/constants/tools.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const ASK_USER_QUESTION_TOOL_NAME = "AskUserQuestion";
|
|
2
2
|
export const BASH_TOOL_NAME = "Bash";
|
|
3
|
-
export const
|
|
4
|
-
export const
|
|
3
|
+
export const TASK_OUTPUT_TOOL_NAME = "TaskOutput";
|
|
4
|
+
export const TASK_STOP_TOOL_NAME = "TaskStop";
|
|
5
5
|
export const DELETE_FILE_TOOL_NAME = "Delete";
|
|
6
6
|
export const EDIT_TOOL_NAME = "Edit";
|
|
7
7
|
export const EXIT_PLAN_MODE_TOOL_NAME = "ExitPlanMode";
|
|
@@ -109,7 +109,7 @@ export class MemoryRuleManager {
|
|
|
109
109
|
getActiveRules(filesInContext) {
|
|
110
110
|
const activeRules = [];
|
|
111
111
|
for (const rule of Object.values(this.state.rules)) {
|
|
112
|
-
if (this.service.isRuleActive(rule, filesInContext)) {
|
|
112
|
+
if (this.service.isRuleActive(rule, filesInContext, this.workdir)) {
|
|
113
113
|
activeRules.push(rule);
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
|
|
2
2
|
import type { ToolManager } from "./toolManager.js";
|
|
3
3
|
import type { MessageManager } from "./messageManager.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { BackgroundTaskManager } from "./backgroundTaskManager.js";
|
|
5
5
|
import type { HookManager } from "./hookManager.js";
|
|
6
6
|
import type { PermissionManager } from "./permissionManager.js";
|
|
7
7
|
export interface AIManagerCallbacks {
|
|
@@ -12,7 +12,7 @@ export interface AIManagerOptions {
|
|
|
12
12
|
messageManager: MessageManager;
|
|
13
13
|
toolManager: ToolManager;
|
|
14
14
|
logger?: Logger;
|
|
15
|
-
|
|
15
|
+
backgroundTaskManager?: BackgroundTaskManager;
|
|
16
16
|
hookManager?: HookManager;
|
|
17
17
|
permissionManager?: PermissionManager;
|
|
18
18
|
callbacks?: AIManagerCallbacks;
|
|
@@ -35,7 +35,7 @@ export declare class AIManager {
|
|
|
35
35
|
private logger?;
|
|
36
36
|
private toolManager;
|
|
37
37
|
private messageManager;
|
|
38
|
-
private
|
|
38
|
+
private backgroundTaskManager?;
|
|
39
39
|
private hookManager?;
|
|
40
40
|
private reversionManager?;
|
|
41
41
|
private permissionManager?;
|
|
@@ -61,6 +61,11 @@ export declare class AIManager {
|
|
|
61
61
|
private getFilteredToolsConfig;
|
|
62
62
|
setIsLoading(isLoading: boolean): void;
|
|
63
63
|
abortAIMessage(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Abort the AI recursion loop immediately.
|
|
66
|
+
* This is used when a tool is backgrounded via Ctrl-B, even if no foreground task was active.
|
|
67
|
+
*/
|
|
68
|
+
abortRecursion(): void;
|
|
64
69
|
private generateCompactParams;
|
|
65
70
|
private handleTokenUsageAndCompression;
|
|
66
71
|
getIsCompressing(): boolean;
|
|
@@ -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":"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"}
|
|
@@ -2,7 +2,6 @@ import { callAgent, compressMessages, } from "../services/aiService.js";
|
|
|
2
2
|
import { getMessagesToCompress } from "../utils/messageOperations.js";
|
|
3
3
|
import { convertMessagesForAPI } from "../utils/convertMessagesForAPI.js";
|
|
4
4
|
import { calculateComprehensiveTotalTokens } from "../utils/tokenCalculation.js";
|
|
5
|
-
import * as memory from "../services/memory.js";
|
|
6
5
|
import * as fs from "node:fs/promises";
|
|
7
6
|
import { DEFAULT_SYSTEM_PROMPT, buildSystemPrompt, } from "../constants/prompts.js";
|
|
8
7
|
export class AIManager {
|
|
@@ -13,7 +12,7 @@ export class AIManager {
|
|
|
13
12
|
this.isCompressing = false;
|
|
14
13
|
this.messageManager = options.messageManager;
|
|
15
14
|
this.toolManager = options.toolManager;
|
|
16
|
-
this.
|
|
15
|
+
this.backgroundTaskManager = options.backgroundTaskManager;
|
|
17
16
|
this.hookManager = options.hookManager;
|
|
18
17
|
this.reversionManager = options.reversionManager;
|
|
19
18
|
this.permissionManager = options.permissionManager;
|
|
@@ -79,6 +78,14 @@ export class AIManager {
|
|
|
79
78
|
}
|
|
80
79
|
this.setIsLoading(false);
|
|
81
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Abort the AI recursion loop immediately.
|
|
83
|
+
* This is used when a tool is backgrounded via Ctrl-B, even if no foreground task was active.
|
|
84
|
+
*/
|
|
85
|
+
abortRecursion() {
|
|
86
|
+
this.logger?.info("Aborting AI recursion loop");
|
|
87
|
+
this.abortAIMessage();
|
|
88
|
+
}
|
|
82
89
|
// Helper method to generate compactParams
|
|
83
90
|
generateCompactParams(toolName, toolArgs) {
|
|
84
91
|
try {
|
|
@@ -169,8 +176,6 @@ export class AIManager {
|
|
|
169
176
|
if (recursionDepth === 0 && this.isLoading) {
|
|
170
177
|
return;
|
|
171
178
|
}
|
|
172
|
-
// Save session in each recursion to ensure message persistence
|
|
173
|
-
await this.messageManager.saveSession();
|
|
174
179
|
// Only create new AbortControllers for the initial call (recursionDepth === 0)
|
|
175
180
|
// For recursive calls, reuse existing controllers to maintain abort signal
|
|
176
181
|
let abortController;
|
|
@@ -184,9 +189,12 @@ export class AIManager {
|
|
|
184
189
|
}
|
|
185
190
|
else {
|
|
186
191
|
// Reuse existing controllers for recursive calls
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
// Fallback to new controllers if they were cleared (should not happen in normal flow but good for tests)
|
|
193
|
+
abortController = this.abortController || new AbortController();
|
|
194
|
+
toolAbortController = this.toolAbortController || new AbortController();
|
|
189
195
|
}
|
|
196
|
+
// Save session in each recursion to ensure message persistence
|
|
197
|
+
await this.messageManager.saveSession();
|
|
190
198
|
// Only set loading state for the initial call
|
|
191
199
|
if (recursionDepth === 0) {
|
|
192
200
|
this.setIsLoading(true);
|
|
@@ -198,7 +206,7 @@ export class AIManager {
|
|
|
198
206
|
const recentMessages = convertMessagesForAPI(this.messageManager.getMessages());
|
|
199
207
|
try {
|
|
200
208
|
// Get combined memory content
|
|
201
|
-
const combinedMemory = await
|
|
209
|
+
const combinedMemory = await this.messageManager.getCombinedMemory();
|
|
202
210
|
// Track if assistant message has been created
|
|
203
211
|
let assistantMessageCreated = false;
|
|
204
212
|
this.logger?.debug("modelConfig in sendAIMessage", this.getModelConfig());
|
|
@@ -420,12 +428,22 @@ export class AIManager {
|
|
|
420
428
|
// Create tool execution context
|
|
421
429
|
const context = {
|
|
422
430
|
abortSignal: toolAbortController.signal,
|
|
423
|
-
|
|
431
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
424
432
|
workdir: this.workdir,
|
|
425
433
|
messageId: this.messageManager.getMessages().slice(-1)[0]?.id,
|
|
426
434
|
};
|
|
427
435
|
// Execute tool
|
|
428
436
|
const toolResult = await this.toolManager.execute(functionToolCall.function?.name || "", toolArgs, context);
|
|
437
|
+
// Check if the tool was backgrounded via Ctrl-B
|
|
438
|
+
// If it was backgrounded, we should abort the AI recursion
|
|
439
|
+
if (toolResult.success &&
|
|
440
|
+
toolResult.content.includes("Command was manually backgrounded by user")) {
|
|
441
|
+
this.logger?.info(`Tool ${toolName} was backgrounded via Ctrl-B, aborting AI recursion`);
|
|
442
|
+
// Use abortAIMessage directly instead of abortRecursion to avoid double logging
|
|
443
|
+
// and ensure we don't trigger the "Request was aborted" error block
|
|
444
|
+
this.abortAIMessage();
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
429
447
|
// Update message state - tool execution completed
|
|
430
448
|
this.messageManager.updateToolBlock({
|
|
431
449
|
id: toolId,
|
|
@@ -486,7 +504,15 @@ export class AIManager {
|
|
|
486
504
|
}
|
|
487
505
|
}
|
|
488
506
|
catch (error) {
|
|
489
|
-
|
|
507
|
+
// Check if the error is an abort error
|
|
508
|
+
// Use the local variables to avoid null reference if this.abortController was cleared
|
|
509
|
+
const isCurrentlyAborted = abortController.signal.aborted || toolAbortController.signal.aborted;
|
|
510
|
+
if (isCurrentlyAborted) {
|
|
511
|
+
this.logger?.info("AI message processing was aborted");
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
this.messageManager.addErrorBlock(error instanceof Error ? error.message : "Unknown error occurred");
|
|
515
|
+
}
|
|
490
516
|
}
|
|
491
517
|
finally {
|
|
492
518
|
// Only execute cleanup and hooks for the initial call
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundBashManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundBashManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,4BAA4B;IAKjD,OAAO,CAAC,kBAAkB;IAInB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"backgroundBashManager.d.ts","sourceRoot":"","sources":["../../src/managers/backgroundBashManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,8BAA8B;IAC7C,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,EAAE,8BAA8B,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,4BAA4B;IAKjD,OAAO,CAAC,kBAAkB;IAInB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAuErD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIjD,YAAY,IAAI,eAAe,EAAE;IAIjC,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,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmD9B,OAAO,IAAI,IAAI;CAUvB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ChildProcess } from "child_process";
|
|
2
|
+
import { BackgroundTask } from "../types/processes.js";
|
|
3
|
+
export interface BackgroundTaskManagerCallbacks {
|
|
4
|
+
onTasksChange?: (tasks: BackgroundTask[]) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface BackgroundTaskManagerOptions {
|
|
7
|
+
callbacks?: BackgroundTaskManagerCallbacks;
|
|
8
|
+
workdir: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class BackgroundTaskManager {
|
|
11
|
+
private tasks;
|
|
12
|
+
private nextId;
|
|
13
|
+
private callbacks;
|
|
14
|
+
private workdir;
|
|
15
|
+
constructor(options: BackgroundTaskManagerOptions);
|
|
16
|
+
private notifyTasksChange;
|
|
17
|
+
generateId(): string;
|
|
18
|
+
addTask(task: BackgroundTask): void;
|
|
19
|
+
getTask(id: string): BackgroundTask | undefined;
|
|
20
|
+
getAllTasks(): BackgroundTask[];
|
|
21
|
+
startShell(command: string, timeout?: number): {
|
|
22
|
+
id: string;
|
|
23
|
+
child: ChildProcess;
|
|
24
|
+
detach: () => void;
|
|
25
|
+
};
|
|
26
|
+
adoptProcess(child: ChildProcess, command: string, initialStdout?: string, initialStderr?: string): string;
|
|
27
|
+
getOutput(id: string, filter?: string): {
|
|
28
|
+
stdout: string;
|
|
29
|
+
stderr: string;
|
|
30
|
+
status: string;
|
|
31
|
+
} | null;
|
|
32
|
+
stopTask(id: string): boolean;
|
|
33
|
+
cleanup(): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=backgroundTaskManager.d.ts.map
|
|
@@ -0,0 +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;IA0FnD,YAAY,CACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAW,EAC1B,aAAa,GAAE,MAAW,GACzB,MAAM;IAgDF,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;IAmE7B,OAAO,IAAI,IAAI;CAUvB"}
|