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
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import { stripAnsiColors } from "../utils/stringUtils.js";
|
|
3
|
+
import { logger } from "../utils/globalLogger.js";
|
|
4
|
+
export class BackgroundTaskManager {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.tasks = new Map();
|
|
7
|
+
this.nextId = 1;
|
|
8
|
+
this.callbacks = options.callbacks || {};
|
|
9
|
+
this.workdir = options.workdir;
|
|
10
|
+
}
|
|
11
|
+
notifyTasksChange() {
|
|
12
|
+
this.callbacks.onTasksChange?.(Array.from(this.tasks.values()));
|
|
13
|
+
}
|
|
14
|
+
generateId() {
|
|
15
|
+
return `task_${this.nextId++}`;
|
|
16
|
+
}
|
|
17
|
+
addTask(task) {
|
|
18
|
+
this.tasks.set(task.id, task);
|
|
19
|
+
this.notifyTasksChange();
|
|
20
|
+
}
|
|
21
|
+
getTask(id) {
|
|
22
|
+
return this.tasks.get(id);
|
|
23
|
+
}
|
|
24
|
+
getAllTasks() {
|
|
25
|
+
return Array.from(this.tasks.values());
|
|
26
|
+
}
|
|
27
|
+
startShell(command, timeout) {
|
|
28
|
+
const id = this.generateId();
|
|
29
|
+
const startTime = Date.now();
|
|
30
|
+
const child = spawn(command, {
|
|
31
|
+
shell: true,
|
|
32
|
+
stdio: "pipe",
|
|
33
|
+
cwd: this.workdir,
|
|
34
|
+
env: {
|
|
35
|
+
...process.env,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
const shell = {
|
|
39
|
+
id,
|
|
40
|
+
type: "shell",
|
|
41
|
+
process: child,
|
|
42
|
+
command,
|
|
43
|
+
startTime,
|
|
44
|
+
status: "running",
|
|
45
|
+
stdout: "",
|
|
46
|
+
stderr: "",
|
|
47
|
+
};
|
|
48
|
+
this.tasks.set(id, shell);
|
|
49
|
+
this.notifyTasksChange();
|
|
50
|
+
// Set up timeout if specified
|
|
51
|
+
let timeoutHandle;
|
|
52
|
+
if (timeout && timeout > 0) {
|
|
53
|
+
timeoutHandle = setTimeout(() => {
|
|
54
|
+
if (shell.status === "running") {
|
|
55
|
+
this.stopTask(id);
|
|
56
|
+
}
|
|
57
|
+
}, timeout);
|
|
58
|
+
}
|
|
59
|
+
const onStdout = (data) => {
|
|
60
|
+
shell.stdout += stripAnsiColors(data.toString());
|
|
61
|
+
this.notifyTasksChange();
|
|
62
|
+
};
|
|
63
|
+
const onStderr = (data) => {
|
|
64
|
+
shell.stderr += stripAnsiColors(data.toString());
|
|
65
|
+
this.notifyTasksChange();
|
|
66
|
+
};
|
|
67
|
+
const onExit = (code) => {
|
|
68
|
+
if (timeoutHandle) {
|
|
69
|
+
clearTimeout(timeoutHandle);
|
|
70
|
+
}
|
|
71
|
+
shell.status = code === 0 ? "completed" : "failed";
|
|
72
|
+
shell.exitCode = code ?? 0;
|
|
73
|
+
shell.endTime = Date.now();
|
|
74
|
+
shell.runtime = shell.endTime - startTime;
|
|
75
|
+
this.notifyTasksChange();
|
|
76
|
+
};
|
|
77
|
+
const onError = (error) => {
|
|
78
|
+
if (timeoutHandle) {
|
|
79
|
+
clearTimeout(timeoutHandle);
|
|
80
|
+
}
|
|
81
|
+
shell.status = "failed";
|
|
82
|
+
shell.stderr += `\nProcess error: ${stripAnsiColors(error.message)}`;
|
|
83
|
+
shell.exitCode = 1;
|
|
84
|
+
shell.endTime = Date.now();
|
|
85
|
+
shell.runtime = shell.endTime - startTime;
|
|
86
|
+
this.notifyTasksChange();
|
|
87
|
+
};
|
|
88
|
+
child.stdout?.on("data", onStdout);
|
|
89
|
+
child.stderr?.on("data", onStderr);
|
|
90
|
+
child.on("exit", onExit);
|
|
91
|
+
child.on("error", onError);
|
|
92
|
+
const detach = () => {
|
|
93
|
+
child.stdout?.off("data", onStdout);
|
|
94
|
+
child.stderr?.off("data", onStderr);
|
|
95
|
+
child.off("exit", onExit);
|
|
96
|
+
child.off("error", onError);
|
|
97
|
+
if (timeoutHandle) {
|
|
98
|
+
clearTimeout(timeoutHandle);
|
|
99
|
+
}
|
|
100
|
+
this.tasks.delete(id);
|
|
101
|
+
this.notifyTasksChange();
|
|
102
|
+
};
|
|
103
|
+
return { id, child, detach };
|
|
104
|
+
}
|
|
105
|
+
adoptProcess(child, command, initialStdout = "", initialStderr = "") {
|
|
106
|
+
const id = this.generateId();
|
|
107
|
+
const startTime = Date.now();
|
|
108
|
+
const shell = {
|
|
109
|
+
id,
|
|
110
|
+
type: "shell",
|
|
111
|
+
process: child,
|
|
112
|
+
command,
|
|
113
|
+
startTime,
|
|
114
|
+
status: "running",
|
|
115
|
+
stdout: initialStdout,
|
|
116
|
+
stderr: initialStderr,
|
|
117
|
+
};
|
|
118
|
+
this.tasks.set(id, shell);
|
|
119
|
+
this.notifyTasksChange();
|
|
120
|
+
child.stdout?.on("data", (data) => {
|
|
121
|
+
shell.stdout += stripAnsiColors(data.toString());
|
|
122
|
+
this.notifyTasksChange();
|
|
123
|
+
});
|
|
124
|
+
child.stderr?.on("data", (data) => {
|
|
125
|
+
shell.stderr += stripAnsiColors(data.toString());
|
|
126
|
+
this.notifyTasksChange();
|
|
127
|
+
});
|
|
128
|
+
child.on("exit", (code) => {
|
|
129
|
+
shell.status = code === 0 ? "completed" : "failed";
|
|
130
|
+
shell.exitCode = code ?? 0;
|
|
131
|
+
shell.endTime = Date.now();
|
|
132
|
+
shell.runtime = shell.endTime - startTime;
|
|
133
|
+
this.notifyTasksChange();
|
|
134
|
+
});
|
|
135
|
+
child.on("error", (error) => {
|
|
136
|
+
shell.status = "failed";
|
|
137
|
+
shell.stderr += `\nProcess error: ${stripAnsiColors(error.message)}`;
|
|
138
|
+
shell.exitCode = 1;
|
|
139
|
+
shell.endTime = Date.now();
|
|
140
|
+
shell.runtime = shell.endTime - startTime;
|
|
141
|
+
this.notifyTasksChange();
|
|
142
|
+
});
|
|
143
|
+
return id;
|
|
144
|
+
}
|
|
145
|
+
getOutput(id, filter) {
|
|
146
|
+
const task = this.tasks.get(id);
|
|
147
|
+
if (!task) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
let stdout = task.stdout;
|
|
151
|
+
let stderr = task.stderr;
|
|
152
|
+
// Apply regex filter if provided
|
|
153
|
+
if (filter) {
|
|
154
|
+
try {
|
|
155
|
+
const regex = new RegExp(filter);
|
|
156
|
+
stdout = stdout
|
|
157
|
+
.split("\n")
|
|
158
|
+
.filter((line) => regex.test(line))
|
|
159
|
+
.join("\n");
|
|
160
|
+
stderr = stderr
|
|
161
|
+
.split("\n")
|
|
162
|
+
.filter((line) => regex.test(line))
|
|
163
|
+
.join("\n");
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
logger.warn(`Invalid filter regex: ${filter}`, error);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
stdout,
|
|
171
|
+
stderr,
|
|
172
|
+
status: task.status,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
stopTask(id) {
|
|
176
|
+
const task = this.tasks.get(id);
|
|
177
|
+
if (!task || task.status !== "running") {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
if (task.type === "shell") {
|
|
181
|
+
const shell = task;
|
|
182
|
+
try {
|
|
183
|
+
// Try to kill process group first
|
|
184
|
+
if (shell.process.pid) {
|
|
185
|
+
process.kill(-shell.process.pid, "SIGTERM");
|
|
186
|
+
// Force kill after timeout
|
|
187
|
+
setTimeout(() => {
|
|
188
|
+
if (shell.status === "running" &&
|
|
189
|
+
shell.process.pid &&
|
|
190
|
+
!shell.process.killed) {
|
|
191
|
+
try {
|
|
192
|
+
process.kill(-shell.process.pid, "SIGKILL");
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
logger.error("Failed to force kill process:", error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}, 1000);
|
|
199
|
+
}
|
|
200
|
+
shell.status = "killed";
|
|
201
|
+
shell.endTime = Date.now();
|
|
202
|
+
shell.runtime = shell.endTime - shell.startTime;
|
|
203
|
+
this.notifyTasksChange();
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Fallback to direct process kill
|
|
208
|
+
try {
|
|
209
|
+
shell.process.kill("SIGTERM");
|
|
210
|
+
setTimeout(() => {
|
|
211
|
+
if (!shell.process.killed) {
|
|
212
|
+
shell.process.kill("SIGKILL");
|
|
213
|
+
}
|
|
214
|
+
}, 1000);
|
|
215
|
+
shell.status = "killed";
|
|
216
|
+
shell.endTime = Date.now();
|
|
217
|
+
shell.runtime = shell.endTime - shell.startTime;
|
|
218
|
+
this.notifyTasksChange();
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
catch (directKillError) {
|
|
222
|
+
logger.error("Failed to kill child process:", directKillError);
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else if (task.type === "subagent") {
|
|
228
|
+
// Subagent termination logic will be handled by aborting the AI loop
|
|
229
|
+
// which is already managed by the SubagentManager and AIManager.
|
|
230
|
+
// Here we just update the status.
|
|
231
|
+
task.status = "killed";
|
|
232
|
+
task.endTime = Date.now();
|
|
233
|
+
task.runtime = task.endTime - task.startTime;
|
|
234
|
+
this.notifyTasksChange();
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
cleanup() {
|
|
240
|
+
// Kill all running tasks
|
|
241
|
+
for (const [id, task] of this.tasks) {
|
|
242
|
+
if (task.status === "running") {
|
|
243
|
+
this.stopTask(id);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
this.tasks.clear();
|
|
247
|
+
this.notifyTasksChange();
|
|
248
|
+
}
|
|
249
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ForegroundTask, IForegroundTaskManager } from "../types/processes.js";
|
|
2
|
+
export declare class ForegroundTaskManager implements IForegroundTaskManager {
|
|
3
|
+
private activeForegroundTasks;
|
|
4
|
+
registerForegroundTask(task: ForegroundTask): void;
|
|
5
|
+
unregisterForegroundTask(id: string): void;
|
|
6
|
+
backgroundCurrentTask(): Promise<void>;
|
|
7
|
+
hasActiveTasks(): boolean;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=foregroundTaskManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foregroundTaskManager.d.ts","sourceRoot":"","sources":["../../src/managers/foregroundTaskManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,qBAAqB,CAAwB;IAE9C,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIlD,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMpC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5C,cAAc,IAAI,OAAO;CAGjC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class ForegroundTaskManager {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.activeForegroundTasks = [];
|
|
4
|
+
}
|
|
5
|
+
registerForegroundTask(task) {
|
|
6
|
+
this.activeForegroundTasks.push(task);
|
|
7
|
+
}
|
|
8
|
+
unregisterForegroundTask(id) {
|
|
9
|
+
this.activeForegroundTasks = this.activeForegroundTasks.filter((t) => t.id !== id);
|
|
10
|
+
}
|
|
11
|
+
async backgroundCurrentTask() {
|
|
12
|
+
const task = this.activeForegroundTasks.pop();
|
|
13
|
+
if (task) {
|
|
14
|
+
await task.backgroundHandler();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
hasActiveTasks() {
|
|
18
|
+
return this.activeForegroundTasks.length > 0;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lspManager.d.ts","sourceRoot":"","sources":["../../src/managers/lspManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,MAAM,EAEN,eAAe,EACf,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAI3B,UAAU,UAAU;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAC1E,CAAC;IACF,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAIvC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;YAKjD,UAAU;IAclB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YA0BvD,WAAW;IAoGzB,OAAO,CAAC,aAAa;YAiBP,WAAW;YA0CX,gBAAgB;IAgBxB,OAAO,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoJ5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"lspManager.d.ts","sourceRoot":"","sources":["../../src/managers/lspManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,eAAe,CAAC;AACpD,OAAO,EACL,MAAM,EAEN,eAAe,EACf,WAAW,EAEZ,MAAM,mBAAmB,CAAC;AAI3B,UAAU,UAAU;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,GAAG,CAClB,MAAM,EACN;QAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAC1E,CAAC;IACF,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,MAAM,CAAiB;gBAEnB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO;IAIvC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;YAKjD,UAAU;IAclB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YA0BvD,WAAW;IAoGzB,OAAO,CAAC,aAAa;YAiBP,WAAW;YA0CX,gBAAgB;IAgBxB,OAAO,CAAC,IAAI,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoJ5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAuB/B"}
|
|
@@ -310,7 +310,9 @@ export class LspManager {
|
|
|
310
310
|
await this.sendRequest(lspProc, "shutdown", {}, timeout);
|
|
311
311
|
await this.sendNotification(lspProc, "exit", {});
|
|
312
312
|
// Give it a moment to exit
|
|
313
|
-
|
|
313
|
+
if (timeout > 100) {
|
|
314
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
315
|
+
}
|
|
314
316
|
}
|
|
315
317
|
catch (error) {
|
|
316
318
|
this.logger?.debug(`Failed to gracefully shutdown LSP for ${language}: ${error}`);
|
|
@@ -3,6 +3,7 @@ import type { SubagentConfiguration } from "../utils/subagentParser.js";
|
|
|
3
3
|
import type { Logger, Message, Usage, SlashCommand } from "../types/index.js";
|
|
4
4
|
import { SessionData } from "../services/session.js";
|
|
5
5
|
import { ChatCompletionMessageFunctionToolCall } from "openai/resources.js";
|
|
6
|
+
import type { MemoryRuleManager } from "./MemoryRuleManager.js";
|
|
6
7
|
export interface MessageManagerCallbacks {
|
|
7
8
|
onMessagesChange?: (messages: Message[]) => void;
|
|
8
9
|
onSessionIdChange?: (sessionId: string) => void;
|
|
@@ -22,6 +23,7 @@ export interface MessageManagerCallbacks {
|
|
|
22
23
|
onUpdateCommandOutputMessage?: (command: string, output: string) => void;
|
|
23
24
|
onCompleteCommandMessage?: (command: string, exitCode: number) => void;
|
|
24
25
|
onSlashCommandsChange?: (commands: SlashCommand[]) => void;
|
|
26
|
+
onInfoBlockAdded?: (content: string) => void;
|
|
25
27
|
onShowRewind?: () => void;
|
|
26
28
|
onSubAgentBlockAdded?: (subagentId: string, parameters: {
|
|
27
29
|
description: string;
|
|
@@ -36,6 +38,7 @@ export interface MessageManagerOptions {
|
|
|
36
38
|
logger?: Logger;
|
|
37
39
|
sessionType?: "main" | "subagent";
|
|
38
40
|
subagentType?: string;
|
|
41
|
+
memoryRuleManager?: MemoryRuleManager;
|
|
39
42
|
}
|
|
40
43
|
export declare class MessageManager {
|
|
41
44
|
private sessionId;
|
|
@@ -49,6 +52,7 @@ export declare class MessageManager {
|
|
|
49
52
|
private transcriptPath;
|
|
50
53
|
private savedMessageCount;
|
|
51
54
|
private filesInContext;
|
|
55
|
+
private memoryRuleManager?;
|
|
52
56
|
private sessionType;
|
|
53
57
|
private subagentType?;
|
|
54
58
|
constructor(options: MessageManagerOptions);
|
|
@@ -63,6 +67,10 @@ export declare class MessageManager {
|
|
|
63
67
|
getFilesInContext(): string[];
|
|
64
68
|
getSessionDir(): string;
|
|
65
69
|
getTranscriptPath(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Get combined memory content (project memory + user memory + modular rules)
|
|
72
|
+
*/
|
|
73
|
+
getCombinedMemory(): Promise<string>;
|
|
66
74
|
/**
|
|
67
75
|
* Compute the transcript path using cached encoded workdir
|
|
68
76
|
* Called during construction and when sessionId changes
|
|
@@ -100,6 +108,7 @@ export declare class MessageManager {
|
|
|
100
108
|
mergeAssistantAdditionalFields(additionalFields: Record<string, unknown>): void;
|
|
101
109
|
updateToolBlock(params: AgentToolBlockUpdateParams): void;
|
|
102
110
|
addErrorBlock(error: string): void;
|
|
111
|
+
addInfoBlock(content: string): void;
|
|
103
112
|
/**
|
|
104
113
|
* Compress messages and update session, delete compressed messages, only keep compressed messages and subsequent messages
|
|
105
114
|
*/
|
|
@@ -108,14 +117,15 @@ export declare class MessageManager {
|
|
|
108
117
|
addCommandOutputMessage(command: string): void;
|
|
109
118
|
updateCommandOutputMessage(command: string, output: string): void;
|
|
110
119
|
completeCommandMessage(command: string, exitCode: number): void;
|
|
111
|
-
addSubagentBlock(subagentId: string, subagentName: string, sessionId: string, configuration: SubagentConfiguration, status: "active" | "completed" | "error" | undefined, parameters: {
|
|
120
|
+
addSubagentBlock(subagentId: string, subagentName: string, sessionId: string, configuration: SubagentConfiguration, status: "active" | "completed" | "error" | "aborted" | undefined, parameters: {
|
|
112
121
|
description: string;
|
|
113
122
|
prompt: string;
|
|
114
123
|
subagent_type: string;
|
|
115
|
-
}): void;
|
|
124
|
+
}, runInBackground?: boolean): void;
|
|
116
125
|
updateSubagentBlock(subagentId: string, updates: Partial<{
|
|
117
126
|
status: "active" | "completed" | "error" | "aborted";
|
|
118
127
|
sessionId: string;
|
|
128
|
+
runInBackground: boolean;
|
|
119
129
|
}>): void;
|
|
120
130
|
/**
|
|
121
131
|
* Trigger usage change callback with all usage data from assistant messages
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,iBAAiB,EAGjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAIL,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"messageManager.d.ts","sourceRoot":"","sources":["../../src/managers/messageManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ export class MessageManager {
|
|
|
16
16
|
this.savedMessageCount = 0; // Initialize saved message count tracker
|
|
17
17
|
this.sessionType = options.sessionType || "main";
|
|
18
18
|
this.subagentType = options.subagentType;
|
|
19
|
+
this.memoryRuleManager = options.memoryRuleManager;
|
|
19
20
|
// Compute and cache the transcript path
|
|
20
21
|
this.transcriptPath = this.computeTranscriptPath();
|
|
21
22
|
}
|
|
@@ -47,6 +48,25 @@ export class MessageManager {
|
|
|
47
48
|
getTranscriptPath() {
|
|
48
49
|
return this.transcriptPath;
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Get combined memory content (project memory + user memory + modular rules)
|
|
53
|
+
*/
|
|
54
|
+
async getCombinedMemory() {
|
|
55
|
+
const memory = await import("../services/memory.js");
|
|
56
|
+
let combined = await memory.getCombinedMemoryContent(this.workdir);
|
|
57
|
+
if (this.memoryRuleManager) {
|
|
58
|
+
const filesInContext = this.getFilesInContext();
|
|
59
|
+
const activeRules = this.memoryRuleManager.getActiveRules(filesInContext);
|
|
60
|
+
if (activeRules.length > 0) {
|
|
61
|
+
this.logger?.debug(`Active modular rules (${activeRules.length}): ${activeRules.map((r) => r.id).join(", ")}`);
|
|
62
|
+
if (combined) {
|
|
63
|
+
combined += "\n\n";
|
|
64
|
+
}
|
|
65
|
+
combined += activeRules.map((r) => r.content).join("\n\n");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return combined;
|
|
69
|
+
}
|
|
50
70
|
/**
|
|
51
71
|
* Compute the transcript path using cached encoded workdir
|
|
52
72
|
* Called during construction and when sessionId changes
|
|
@@ -240,6 +260,17 @@ export class MessageManager {
|
|
|
240
260
|
this.setMessages(newMessages);
|
|
241
261
|
this.callbacks.onErrorBlockAdded?.(error);
|
|
242
262
|
}
|
|
263
|
+
addInfoBlock(content) {
|
|
264
|
+
const lastMessage = this.messages[this.messages.length - 1];
|
|
265
|
+
if (lastMessage && lastMessage.role === "assistant") {
|
|
266
|
+
lastMessage.blocks.push({
|
|
267
|
+
type: "info",
|
|
268
|
+
content,
|
|
269
|
+
});
|
|
270
|
+
this.setMessages([...this.messages]);
|
|
271
|
+
this.callbacks.onInfoBlockAdded?.(content);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
243
274
|
/**
|
|
244
275
|
* Compress messages and update session, delete compressed messages, only keep compressed messages and subsequent messages
|
|
245
276
|
*/
|
|
@@ -311,7 +342,7 @@ export class MessageManager {
|
|
|
311
342
|
this.callbacks.onCompleteCommandMessage?.(command, exitCode);
|
|
312
343
|
}
|
|
313
344
|
// Subagent block methods
|
|
314
|
-
addSubagentBlock(subagentId, subagentName, sessionId, configuration, status = "active", parameters) {
|
|
345
|
+
addSubagentBlock(subagentId, subagentName, sessionId, configuration, status = "active", parameters, runInBackground) {
|
|
315
346
|
const params = {
|
|
316
347
|
messages: this.messages,
|
|
317
348
|
subagentId,
|
|
@@ -319,6 +350,7 @@ export class MessageManager {
|
|
|
319
350
|
sessionId,
|
|
320
351
|
status,
|
|
321
352
|
configuration,
|
|
353
|
+
runInBackground,
|
|
322
354
|
};
|
|
323
355
|
const updatedMessages = addSubagentBlockToMessage(params);
|
|
324
356
|
this.setMessages(updatedMessages);
|
|
@@ -332,7 +364,9 @@ export class MessageManager {
|
|
|
332
364
|
subagentId,
|
|
333
365
|
status: updates.status || "active",
|
|
334
366
|
};
|
|
335
|
-
|
|
367
|
+
if (updates.status) {
|
|
368
|
+
this.callbacks.onSubAgentBlockUpdated?.(params.subagentId, params.status);
|
|
369
|
+
}
|
|
336
370
|
}
|
|
337
371
|
/**
|
|
338
372
|
* Trigger usage change callback with all usage data from assistant messages
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAqBhD,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,cAAc,CAAC;IACvC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,6BAA6B,CAAC,CAAiC;gBAE3D,OAAO,GAAE,wBAA6B;IAUlD;;OAEG;IACI,gCAAgC,CACrC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,GACvC,IAAI;IAIP;;OAEG;IACH,2BAA2B,CAAC,WAAW,CAAC,EAAE,cAAc,GAAG,IAAI;IAyB/D;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOzC;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOxC;;OAEG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ/C;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;OAEG;IACH,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAYxD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOpC;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKtD;;OAEG;IACI,eAAe,IAAI,MAAM,GAAG,SAAS;IAI5C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,uBAAuB,CAAC,iBAAiB,CAAC,EAAE,cAAc,GAAG,cAAc;
|
|
1
|
+
{"version":3,"file":"permissionManager.d.ts","sourceRoot":"","sources":["../../src/managers/permissionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -159,13 +159,7 @@ export class PermissionManager {
|
|
|
159
159
|
* Get the current effective permission mode for tool execution context
|
|
160
160
|
*/
|
|
161
161
|
getCurrentEffectiveMode(cliPermissionMode) {
|
|
162
|
-
|
|
163
|
-
this.logger?.debug("getCurrentEffectiveMode", {
|
|
164
|
-
cliPermissionMode,
|
|
165
|
-
configuredDefaultMode: this.configuredDefaultMode,
|
|
166
|
-
resolvedMode: mode,
|
|
167
|
-
});
|
|
168
|
-
return mode;
|
|
162
|
+
return this.resolveEffectivePermissionMode(cliPermissionMode);
|
|
169
163
|
}
|
|
170
164
|
/**
|
|
171
165
|
* Resolve the effective permission mode based on CLI override and configured default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,oBAAoB,CAAC,CAAuB;gBAExC,OAAO,EAAE,oBAAoB;IAYzC;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;IA2BlC;;OAEG;YACW,gBAAgB;IA2D9B;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"pluginManager.d.ts","sourceRoot":"","sources":["../../src/managers/pluginManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,oBAAoB,CAAC,CAAuB;gBAExC,OAAO,EAAE,oBAAoB;IAYzC;;OAEG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAInE;;OAEG;YACW,oBAAoB;IA2BlC;;OAEG;YACW,gBAAgB;IA2D9B;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzD;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAG5C"}
|
|
@@ -96,8 +96,7 @@ export class PluginManager {
|
|
|
96
96
|
* @param configs Array of plugin configurations
|
|
97
97
|
*/
|
|
98
98
|
async loadPlugins(configs) {
|
|
99
|
-
// Load
|
|
100
|
-
await this.loadInstalledPlugins();
|
|
99
|
+
// Load plugins from configuration (e.g. --plugin-dir) first to give them higher priority
|
|
101
100
|
for (const config of configs) {
|
|
102
101
|
if (config.type !== "local") {
|
|
103
102
|
this.logger?.warn(`Unsupported plugin type: ${config.type}`);
|
|
@@ -108,6 +107,8 @@ export class PluginManager {
|
|
|
108
107
|
: path.resolve(this.workdir, config.path);
|
|
109
108
|
await this.loadSinglePlugin(absolutePath);
|
|
110
109
|
}
|
|
110
|
+
// Load installed plugins from marketplace
|
|
111
|
+
await this.loadInstalledPlugins();
|
|
111
112
|
}
|
|
112
113
|
/**
|
|
113
114
|
* Get all loaded plugins
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { MessageManager } from "./messageManager.js";
|
|
2
2
|
import type { AIManager } from "./aiManager.js";
|
|
3
|
+
import type { BackgroundTaskManager } from "./backgroundTaskManager.js";
|
|
3
4
|
import type { SlashCommand, CustomSlashCommand, Logger } from "../types/index.js";
|
|
4
5
|
export interface SlashCommandManagerOptions {
|
|
5
6
|
messageManager: MessageManager;
|
|
6
7
|
aiManager: AIManager;
|
|
8
|
+
backgroundTaskManager: BackgroundTaskManager;
|
|
7
9
|
workdir: string;
|
|
8
10
|
logger?: Logger;
|
|
9
11
|
}
|
|
@@ -12,6 +14,7 @@ export declare class SlashCommandManager {
|
|
|
12
14
|
private customCommands;
|
|
13
15
|
private messageManager;
|
|
14
16
|
private aiManager;
|
|
17
|
+
private backgroundTaskManager;
|
|
15
18
|
private workdir;
|
|
16
19
|
private logger?;
|
|
17
20
|
constructor(options: SlashCommandManagerOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;
|
|
1
|
+
{"version":3,"file":"slashCommandManager.d.ts","sourceRoot":"","sources":["../../src/managers/slashCommandManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,MAAM,EACP,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,OAAO,EAAE,0BAA0B;IAW/C,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;OAEG;IACI,sBAAsB,CAC3B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,IAAI;IAwDP;;OAEG;IACI,oBAAoB,IAAI,IAAI;IAWnC;;OAEG;IACI,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAKnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACI,WAAW,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9D;;OAEG;IACU,cAAc,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;IAenB;;;OAGG;IACI,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf;IAeD;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI7C;;OAEG;IACI,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI1E;;OAEG;IACI,iBAAiB,IAAI,kBAAkB,EAAE;IAIhD;;OAEG;YACW,+BAA+B;IA0E7C;;OAEG;IACI,mBAAmB,IAAI,IAAI;CAInC"}
|
|
@@ -11,6 +11,7 @@ export class SlashCommandManager {
|
|
|
11
11
|
this.customCommands = new Map();
|
|
12
12
|
this.messageManager = options.messageManager;
|
|
13
13
|
this.aiManager = options.aiManager;
|
|
14
|
+
this.backgroundTaskManager = options.backgroundTaskManager;
|
|
14
15
|
this.workdir = options.workdir;
|
|
15
16
|
this.logger = options.logger;
|
|
16
17
|
this.initializeBuiltinCommands();
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MemoryRuleManager } from "./MemoryRuleManager.js";
|
|
1
2
|
import type { SubagentConfiguration } from "../utils/subagentParser.js";
|
|
2
3
|
import type { Message, Logger, GatewayConfig, ModelConfig, Usage } from "../types/index.js";
|
|
3
4
|
import type { SessionData } from "../services/session.js";
|
|
@@ -6,6 +7,7 @@ import { MessageManager } from "./messageManager.js";
|
|
|
6
7
|
import { ToolManager } from "./toolManager.js";
|
|
7
8
|
import { HookManager } from "./hookManager.js";
|
|
8
9
|
import { UserMessageParams, type AgentToolBlockUpdateParams } from "../utils/messageOperations.js";
|
|
10
|
+
import { BackgroundTaskManager } from "./backgroundTaskManager.js";
|
|
9
11
|
export interface SubagentManagerCallbacks {
|
|
10
12
|
/** Triggered when subagent adds user message */
|
|
11
13
|
onSubagentUserMessageAdded?: (subagentId: string, params: UserMessageParams) => void;
|
|
@@ -29,6 +31,7 @@ export interface SubagentInstance {
|
|
|
29
31
|
status: "initializing" | "active" | "completed" | "error" | "aborted";
|
|
30
32
|
messages: Message[];
|
|
31
33
|
subagentType: string;
|
|
34
|
+
backgroundTaskId?: string;
|
|
32
35
|
}
|
|
33
36
|
export interface SubagentManagerOptions {
|
|
34
37
|
workdir: string;
|
|
@@ -42,6 +45,8 @@ export interface SubagentManagerOptions {
|
|
|
42
45
|
getLanguage: () => string | undefined;
|
|
43
46
|
hookManager?: HookManager;
|
|
44
47
|
onUsageAdded?: (usage: Usage) => void;
|
|
48
|
+
backgroundTaskManager?: BackgroundTaskManager;
|
|
49
|
+
memoryRuleManager?: MemoryRuleManager;
|
|
45
50
|
}
|
|
46
51
|
export declare class SubagentManager {
|
|
47
52
|
private instances;
|
|
@@ -57,6 +62,8 @@ export declare class SubagentManager {
|
|
|
57
62
|
private getLanguage;
|
|
58
63
|
private hookManager?;
|
|
59
64
|
private onUsageAdded?;
|
|
65
|
+
private backgroundTaskManager?;
|
|
66
|
+
private memoryRuleManager?;
|
|
60
67
|
constructor(options: SubagentManagerOptions);
|
|
61
68
|
/**
|
|
62
69
|
* Initialize the SubagentManager by loading and caching configurations
|
|
@@ -81,14 +88,16 @@ export declare class SubagentManager {
|
|
|
81
88
|
description: string;
|
|
82
89
|
prompt: string;
|
|
83
90
|
subagent_type: string;
|
|
84
|
-
}): Promise<SubagentInstance>;
|
|
91
|
+
}, runInBackground?: boolean): Promise<SubagentInstance>;
|
|
85
92
|
/**
|
|
86
93
|
* Execute task using subagent instance
|
|
87
94
|
*
|
|
88
95
|
* IMPORTANT: This method automatically filters out the Task tool from allowedTools
|
|
89
96
|
* to prevent subagents from spawning other subagents (infinite recursion protection)
|
|
90
97
|
*/
|
|
91
|
-
executeTask(instance: SubagentInstance, prompt: string, abortSignal?: AbortSignal): Promise<string>;
|
|
98
|
+
executeTask(instance: SubagentInstance, prompt: string, abortSignal?: AbortSignal, runInBackground?: boolean): Promise<string>;
|
|
99
|
+
backgroundInstance(subagentId: string): Promise<string>;
|
|
100
|
+
private internalExecute;
|
|
92
101
|
/**
|
|
93
102
|
* Get instance by subagent ID
|
|
94
103
|
*/
|