wave-agent-sdk 0.4.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +42 -11
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +114 -115
- package/dist/constants/prompts.d.ts +18 -14
- package/dist/constants/prompts.d.ts.map +1 -1
- package/dist/constants/prompts.js +130 -54
- package/dist/constants/tools.d.ts +6 -3
- package/dist/constants/tools.d.ts.map +1 -1
- package/dist/constants/tools.js +6 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/managers/MemoryRuleManager.js +1 -1
- package/dist/managers/aiManager.d.ts +5 -3
- package/dist/managers/aiManager.d.ts.map +1 -1
- package/dist/managers/aiManager.js +57 -20
- 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 +255 -0
- package/dist/managers/foregroundTaskManager.d.ts +9 -0
- package/dist/managers/foregroundTaskManager.d.ts.map +1 -0
- package/dist/managers/foregroundTaskManager.js +21 -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/mcpManager.d.ts.map +1 -1
- package/dist/managers/messageManager.d.ts +26 -12
- package/dist/managers/messageManager.d.ts.map +1 -1
- package/dist/managers/messageManager.js +138 -64
- package/dist/managers/permissionManager.d.ts.map +1 -1
- package/dist/managers/permissionManager.js +26 -22
- package/dist/managers/planManager.d.ts +1 -1
- package/dist/managers/planManager.d.ts.map +1 -1
- package/dist/managers/planManager.js +2 -2
- package/dist/managers/pluginManager.d.ts.map +1 -1
- package/dist/managers/pluginManager.js +3 -2
- package/dist/managers/slashCommandManager.d.ts +6 -0
- package/dist/managers/slashCommandManager.d.ts.map +1 -1
- package/dist/managers/slashCommandManager.js +8 -2
- package/dist/managers/subagentManager.d.ts +15 -2
- package/dist/managers/subagentManager.d.ts.map +1 -1
- package/dist/managers/subagentManager.js +153 -39
- package/dist/managers/toolManager.d.ts +18 -1
- package/dist/managers/toolManager.d.ts.map +1 -1
- package/dist/managers/toolManager.js +29 -5
- 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/aiService.d.ts +0 -1
- package/dist/services/aiService.d.ts.map +1 -1
- package/dist/services/aiService.js +4 -140
- package/dist/services/memory.d.ts +0 -3
- package/dist/services/memory.d.ts.map +1 -1
- package/dist/services/memory.js +1 -60
- package/dist/services/session.d.ts +15 -1
- package/dist/services/session.d.ts.map +1 -1
- package/dist/services/session.js +57 -1
- package/dist/services/taskManager.d.ts +21 -0
- package/dist/services/taskManager.d.ts.map +1 -0
- package/dist/services/taskManager.js +158 -0
- package/dist/tools/askUserQuestion.d.ts.map +1 -1
- package/dist/tools/askUserQuestion.js +39 -25
- package/dist/tools/bashTool.d.ts +0 -8
- package/dist/tools/bashTool.d.ts.map +1 -1
- package/dist/tools/bashTool.js +48 -172
- package/dist/tools/editTool.d.ts.map +1 -1
- package/dist/tools/editTool.js +8 -6
- package/dist/tools/exitPlanMode.d.ts.map +1 -1
- package/dist/tools/exitPlanMode.js +25 -1
- package/dist/tools/globTool.d.ts.map +1 -1
- package/dist/tools/globTool.js +8 -2
- package/dist/tools/grepTool.d.ts.map +1 -1
- package/dist/tools/grepTool.js +17 -6
- package/dist/tools/lsTool.d.ts.map +1 -1
- package/dist/tools/lsTool.js +3 -1
- package/dist/tools/multiEditTool.d.ts.map +1 -1
- package/dist/tools/multiEditTool.js +7 -6
- package/dist/tools/readTool.d.ts.map +1 -1
- package/dist/tools/readTool.js +16 -1
- package/dist/tools/taskManagementTools.d.ts +6 -0
- package/dist/tools/taskManagementTools.d.ts.map +1 -0
- package/dist/tools/taskManagementTools.js +453 -0
- package/dist/tools/taskOutputTool.d.ts +3 -0
- package/dist/tools/taskOutputTool.d.ts.map +1 -0
- package/dist/tools/taskOutputTool.js +173 -0
- package/dist/tools/taskStopTool.d.ts +3 -0
- package/dist/tools/taskStopTool.d.ts.map +1 -0
- package/dist/tools/taskStopTool.js +71 -0
- package/dist/tools/taskTool.d.ts.map +1 -1
- package/dist/tools/taskTool.js +110 -63
- package/dist/tools/types.d.ts +12 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/writeTool.d.ts.map +1 -1
- package/dist/tools/writeTool.js +9 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/marketplace.d.ts +1 -0
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/messaging.d.ts +3 -8
- package/dist/types/messaging.d.ts.map +1 -1
- package/dist/types/processes.d.ts +29 -4
- package/dist/types/processes.d.ts.map +1 -1
- package/dist/types/tasks.d.ts +13 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +1 -0
- package/dist/types/tools.d.ts +4 -1
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/utils/builtinSubagents.d.ts.map +1 -1
- package/dist/utils/builtinSubagents.js +38 -1
- package/dist/utils/cacheControlUtils.d.ts.map +1 -1
- package/dist/utils/cacheControlUtils.js +18 -12
- package/dist/utils/constants.d.ts +0 -4
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +0 -4
- package/dist/utils/convertMessagesForAPI.js +2 -2
- 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 +5 -36
- package/dist/utils/messageOperations.d.ts.map +1 -1
- package/dist/utils/messageOperations.js +9 -98
- package/dist/utils/nameGenerator.d.ts +1 -1
- package/dist/utils/nameGenerator.d.ts.map +1 -1
- package/dist/utils/nameGenerator.js +19 -3
- package/package.json +5 -5
- package/src/agent.ts +157 -134
- package/src/constants/prompts.ts +156 -65
- package/src/constants/tools.ts +6 -3
- package/src/index.ts +1 -0
- package/src/managers/MemoryRuleManager.ts +1 -1
- package/src/managers/aiManager.ts +77 -35
- package/src/managers/backgroundBashManager.ts +1 -0
- package/src/managers/backgroundTaskManager.ts +305 -0
- package/src/managers/foregroundTaskManager.ts +27 -0
- package/src/managers/lspManager.ts +3 -1
- package/src/managers/mcpManager.ts +6 -3
- package/src/managers/messageManager.ts +185 -75
- package/src/managers/permissionManager.ts +33 -28
- package/src/managers/planManager.ts +2 -2
- package/src/managers/pluginManager.ts +4 -3
- package/src/managers/slashCommandManager.ts +15 -2
- package/src/managers/subagentManager.ts +194 -35
- package/src/managers/toolManager.ts +48 -6
- package/src/services/GitService.ts +6 -2
- package/src/services/MarketplaceService.ts +30 -12
- package/src/services/MemoryRuleService.ts +18 -6
- package/src/services/aiService.ts +3 -145
- package/src/services/memory.ts +1 -73
- package/src/services/session.ts +73 -0
- package/src/services/taskManager.ts +188 -0
- package/src/tools/askUserQuestion.ts +51 -29
- package/src/tools/bashTool.ts +63 -196
- package/src/tools/editTool.ts +9 -18
- package/src/tools/exitPlanMode.ts +26 -2
- package/src/tools/globTool.ts +10 -2
- package/src/tools/grepTool.ts +17 -6
- package/src/tools/lsTool.ts +3 -1
- package/src/tools/multiEditTool.ts +7 -18
- package/src/tools/readTool.ts +17 -1
- package/src/tools/taskManagementTools.ts +498 -0
- package/src/tools/taskOutputTool.ts +196 -0
- package/src/tools/taskStopTool.ts +78 -0
- package/src/tools/taskTool.ts +136 -74
- package/src/tools/types.ts +13 -0
- package/src/tools/writeTool.ts +9 -2
- package/src/types/index.ts +1 -0
- package/src/types/marketplace.ts +1 -0
- package/src/types/messaging.ts +2 -9
- package/src/types/processes.ts +39 -4
- package/src/types/tasks.ts +13 -0
- package/src/types/tools.ts +4 -1
- package/src/utils/builtinSubagents.ts +47 -1
- package/src/utils/cacheControlUtils.ts +26 -18
- package/src/utils/constants.ts +0 -5
- package/src/utils/convertMessagesForAPI.ts +2 -2
- package/src/utils/editUtils.ts +65 -103
- package/src/utils/messageOperations.ts +12 -136
- package/src/utils/nameGenerator.ts +20 -3
- package/dist/tools/todoWriteTool.d.ts +0 -6
- package/dist/tools/todoWriteTool.d.ts.map +0 -1
- package/dist/tools/todoWriteTool.js +0 -220
- package/src/tools/todoWriteTool.ts +0 -257
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,aAAa,EACb,WAAW,EACX,KAAK,EACN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"subagentManager.d.ts","sourceRoot":"","sources":["../../src/managers/subagentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export class SubagentManager {
|
|
|
9
9
|
this.workdir = options.workdir;
|
|
10
10
|
this.parentToolManager = options.parentToolManager;
|
|
11
11
|
this.parentMessageManager = options.parentMessageManager;
|
|
12
|
+
this.taskManager = options.taskManager;
|
|
12
13
|
this.callbacks = options.callbacks; // Store SubagentManagerCallbacks
|
|
13
14
|
this.logger = options.logger;
|
|
14
15
|
this.getGatewayConfig = options.getGatewayConfig;
|
|
@@ -17,6 +18,8 @@ export class SubagentManager {
|
|
|
17
18
|
this.getLanguage = options.getLanguage;
|
|
18
19
|
this.hookManager = options.hookManager;
|
|
19
20
|
this.onUsageAdded = options.onUsageAdded;
|
|
21
|
+
this.backgroundTaskManager = options.backgroundTaskManager;
|
|
22
|
+
this.memoryRuleManager = options.memoryRuleManager;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
25
|
* Initialize the SubagentManager by loading and caching configurations
|
|
@@ -53,7 +56,7 @@ export class SubagentManager {
|
|
|
53
56
|
/**
|
|
54
57
|
* Create a new subagent instance with isolated managers
|
|
55
58
|
*/
|
|
56
|
-
async createInstance(configuration, parameters) {
|
|
59
|
+
async createInstance(configuration, parameters, runInBackground) {
|
|
57
60
|
if (!this.parentToolManager) {
|
|
58
61
|
throw new Error("SubagentManager not properly initialized - call initialize() first");
|
|
59
62
|
}
|
|
@@ -66,6 +69,7 @@ export class SubagentManager {
|
|
|
66
69
|
logger: this.logger,
|
|
67
70
|
sessionType: "subagent",
|
|
68
71
|
subagentType: parameters.subagent_type,
|
|
72
|
+
memoryRuleManager: this.memoryRuleManager,
|
|
69
73
|
});
|
|
70
74
|
// Use the parent tool manager directly - tool restrictions will be handled by allowedTools parameter
|
|
71
75
|
const toolManager = this.parentToolManager;
|
|
@@ -73,6 +77,7 @@ export class SubagentManager {
|
|
|
73
77
|
const aiManager = new AIManager({
|
|
74
78
|
messageManager,
|
|
75
79
|
toolManager,
|
|
80
|
+
taskManager: this.taskManager,
|
|
76
81
|
logger: this.logger,
|
|
77
82
|
workdir: this.workdir,
|
|
78
83
|
systemPrompt: configuration.systemPrompt,
|
|
@@ -119,7 +124,7 @@ export class SubagentManager {
|
|
|
119
124
|
};
|
|
120
125
|
this.instances.set(subagentId, instance);
|
|
121
126
|
// Create subagent block in parent message manager
|
|
122
|
-
this.parentMessageManager.addSubagentBlock(subagentId, configuration.name, messageManager.getSessionId(), configuration, "active", parameters);
|
|
127
|
+
this.parentMessageManager.addSubagentBlock(subagentId, configuration.name, messageManager.getSessionId(), configuration, "active", parameters, runInBackground);
|
|
123
128
|
return instance;
|
|
124
129
|
}
|
|
125
130
|
/**
|
|
@@ -128,7 +133,7 @@ export class SubagentManager {
|
|
|
128
133
|
* IMPORTANT: This method automatically filters out the Task tool from allowedTools
|
|
129
134
|
* to prevent subagents from spawning other subagents (infinite recursion protection)
|
|
130
135
|
*/
|
|
131
|
-
async executeTask(instance, prompt, abortSignal) {
|
|
136
|
+
async executeTask(instance, prompt, abortSignal, runInBackground) {
|
|
132
137
|
try {
|
|
133
138
|
// Check if already aborted before starting
|
|
134
139
|
if (abortSignal?.aborted) {
|
|
@@ -139,23 +144,102 @@ export class SubagentManager {
|
|
|
139
144
|
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
140
145
|
status: "active",
|
|
141
146
|
});
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
() =>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
147
|
+
if (runInBackground && this.backgroundTaskManager) {
|
|
148
|
+
const taskId = this.backgroundTaskManager.generateId();
|
|
149
|
+
const startTime = Date.now();
|
|
150
|
+
this.backgroundTaskManager.addTask({
|
|
151
|
+
id: taskId,
|
|
152
|
+
type: "subagent",
|
|
153
|
+
status: "running",
|
|
154
|
+
startTime,
|
|
155
|
+
description: instance.configuration.description,
|
|
156
|
+
stdout: "",
|
|
157
|
+
stderr: "",
|
|
158
|
+
onStop: () => instance.aiManager.abortAIMessage(),
|
|
159
|
+
});
|
|
160
|
+
instance.backgroundTaskId = taskId;
|
|
161
|
+
// Execute in background
|
|
162
|
+
(async () => {
|
|
163
|
+
try {
|
|
164
|
+
const result = await this.internalExecute(instance, prompt, abortSignal);
|
|
165
|
+
const task = this.backgroundTaskManager?.getTask(taskId);
|
|
166
|
+
if (task) {
|
|
167
|
+
task.status = "completed";
|
|
168
|
+
task.stdout = result;
|
|
169
|
+
task.endTime = Date.now();
|
|
170
|
+
task.runtime = task.endTime - startTime;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
const task = this.backgroundTaskManager?.getTask(taskId);
|
|
175
|
+
if (task) {
|
|
176
|
+
task.status = "failed";
|
|
177
|
+
task.stderr =
|
|
178
|
+
error instanceof Error ? error.message : String(error);
|
|
179
|
+
task.endTime = Date.now();
|
|
180
|
+
task.runtime = task.endTime - startTime;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
})();
|
|
184
|
+
return taskId;
|
|
158
185
|
}
|
|
186
|
+
return await this.internalExecute(instance, prompt, abortSignal);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
this.updateInstanceStatus(instance.subagentId, "error");
|
|
190
|
+
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
191
|
+
status: "error",
|
|
192
|
+
});
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
async backgroundInstance(subagentId) {
|
|
197
|
+
const instance = this.instances.get(subagentId);
|
|
198
|
+
if (!instance) {
|
|
199
|
+
throw new Error(`Subagent instance ${subagentId} not found`);
|
|
200
|
+
}
|
|
201
|
+
if (!this.backgroundTaskManager) {
|
|
202
|
+
throw new Error("BackgroundTaskManager not available");
|
|
203
|
+
}
|
|
204
|
+
const taskId = this.backgroundTaskManager.generateId();
|
|
205
|
+
const startTime = Date.now();
|
|
206
|
+
this.backgroundTaskManager.addTask({
|
|
207
|
+
id: taskId,
|
|
208
|
+
type: "subagent",
|
|
209
|
+
status: "running",
|
|
210
|
+
startTime,
|
|
211
|
+
description: instance.configuration.description,
|
|
212
|
+
stdout: "",
|
|
213
|
+
stderr: "",
|
|
214
|
+
onStop: () => instance.aiManager.abortAIMessage(),
|
|
215
|
+
});
|
|
216
|
+
instance.backgroundTaskId = taskId;
|
|
217
|
+
// Update parent message manager to reflect background status
|
|
218
|
+
this.parentMessageManager.updateSubagentBlock(subagentId, {
|
|
219
|
+
runInBackground: true,
|
|
220
|
+
});
|
|
221
|
+
return taskId;
|
|
222
|
+
}
|
|
223
|
+
async internalExecute(instance, prompt, abortSignal) {
|
|
224
|
+
// Set up consolidated abort handler to prevent listener accumulation
|
|
225
|
+
let abortCleanup;
|
|
226
|
+
// Only link to parent abort signal if NOT running in background
|
|
227
|
+
if (abortSignal && !instance.backgroundTaskId) {
|
|
228
|
+
abortCleanup = addConsolidatedAbortListener(abortSignal, [
|
|
229
|
+
() => {
|
|
230
|
+
// Update status to aborted
|
|
231
|
+
this.updateInstanceStatus(instance.subagentId, "aborted");
|
|
232
|
+
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
233
|
+
status: "aborted",
|
|
234
|
+
});
|
|
235
|
+
},
|
|
236
|
+
() => {
|
|
237
|
+
// Abort the AI execution
|
|
238
|
+
instance.aiManager.abortAIMessage();
|
|
239
|
+
},
|
|
240
|
+
]);
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
159
243
|
// Add the user's prompt as a message
|
|
160
244
|
instance.messageManager.addUserMessage({ content: prompt });
|
|
161
245
|
// Create allowed tools list - always exclude Task tool to prevent subagent recursion
|
|
@@ -190,23 +274,15 @@ export class SubagentManager {
|
|
|
190
274
|
tools: allowedTools,
|
|
191
275
|
model: resolvedModel,
|
|
192
276
|
});
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
]);
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
await executeAI;
|
|
203
|
-
}
|
|
277
|
+
// If we have an abort signal, race against it using utilities to prevent listener accumulation
|
|
278
|
+
if (abortSignal && !instance.backgroundTaskId) {
|
|
279
|
+
await Promise.race([
|
|
280
|
+
executeAI,
|
|
281
|
+
createAbortPromise(abortSignal, "Task was aborted"),
|
|
282
|
+
]);
|
|
204
283
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if (abortCleanup) {
|
|
208
|
-
abortCleanup();
|
|
209
|
-
}
|
|
284
|
+
else {
|
|
285
|
+
await executeAI;
|
|
210
286
|
}
|
|
211
287
|
// Get the latest messages to extract the response
|
|
212
288
|
const messages = instance.messageManager.getMessages();
|
|
@@ -224,15 +300,41 @@ export class SubagentManager {
|
|
|
224
300
|
this.parentMessageManager.updateSubagentBlock(instance.subagentId, {
|
|
225
301
|
status: "completed",
|
|
226
302
|
});
|
|
303
|
+
// If this was transitioned to background, update the background task
|
|
304
|
+
if (instance.backgroundTaskId && this.backgroundTaskManager) {
|
|
305
|
+
const task = this.backgroundTaskManager.getTask(instance.backgroundTaskId);
|
|
306
|
+
if (task) {
|
|
307
|
+
task.status = "completed";
|
|
308
|
+
task.stdout = response || "Task completed with no text response";
|
|
309
|
+
task.endTime = Date.now();
|
|
310
|
+
if (task.startTime) {
|
|
311
|
+
task.runtime = task.endTime - task.startTime;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
227
315
|
return response || "Task completed with no text response";
|
|
228
316
|
}
|
|
229
317
|
catch (error) {
|
|
230
|
-
this
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
318
|
+
// If this was transitioned to background, update the background task with error
|
|
319
|
+
if (instance.backgroundTaskId && this.backgroundTaskManager) {
|
|
320
|
+
const task = this.backgroundTaskManager.getTask(instance.backgroundTaskId);
|
|
321
|
+
if (task) {
|
|
322
|
+
task.status = "failed";
|
|
323
|
+
task.stderr = error instanceof Error ? error.message : String(error);
|
|
324
|
+
task.endTime = Date.now();
|
|
325
|
+
if (task.startTime) {
|
|
326
|
+
task.runtime = task.endTime - task.startTime;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
234
330
|
throw error;
|
|
235
331
|
}
|
|
332
|
+
finally {
|
|
333
|
+
// Clean up abort listeners to prevent memory leaks
|
|
334
|
+
if (abortCleanup) {
|
|
335
|
+
abortCleanup();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
236
338
|
}
|
|
237
339
|
/**
|
|
238
340
|
* Get instance by subagent ID
|
|
@@ -299,6 +401,7 @@ export class SubagentManager {
|
|
|
299
401
|
logger: this.logger,
|
|
300
402
|
sessionType: "subagent",
|
|
301
403
|
subagentType: configuration.name, // Use configuration name for restored sessions
|
|
404
|
+
memoryRuleManager: this.memoryRuleManager,
|
|
302
405
|
});
|
|
303
406
|
// Use the parent tool manager
|
|
304
407
|
const toolManager = this.parentToolManager;
|
|
@@ -318,6 +421,7 @@ export class SubagentManager {
|
|
|
318
421
|
const aiManager = new AIManager({
|
|
319
422
|
messageManager,
|
|
320
423
|
toolManager,
|
|
424
|
+
taskManager: this.taskManager,
|
|
321
425
|
logger: this.logger,
|
|
322
426
|
workdir: this.workdir,
|
|
323
427
|
systemPrompt: configuration.systemPrompt,
|
|
@@ -410,6 +514,16 @@ export class SubagentManager {
|
|
|
410
514
|
sessionId: newSessionId,
|
|
411
515
|
});
|
|
412
516
|
},
|
|
517
|
+
onLatestTotalTokensChange: (tokens) => {
|
|
518
|
+
// Forward latest total tokens to parent via SubagentManager callbacks
|
|
519
|
+
if (this.callbacks?.onSubagentLatestTotalTokensChange) {
|
|
520
|
+
this.callbacks.onSubagentLatestTotalTokensChange(subagentId, tokens);
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
onFileHistoryBlockAdded: (snapshots) => {
|
|
524
|
+
// Forward file history blocks to parent MessageManager
|
|
525
|
+
this.parentMessageManager.addFileHistoryBlock(snapshots);
|
|
526
|
+
},
|
|
413
527
|
};
|
|
414
528
|
}
|
|
415
529
|
}
|
|
@@ -10,10 +10,16 @@ export interface ToolManagerOptions {
|
|
|
10
10
|
mcpManager: McpManager;
|
|
11
11
|
lspManager?: ILspManager;
|
|
12
12
|
logger?: Logger;
|
|
13
|
-
/**
|
|
13
|
+
/** Permission manager for handling tool permission checks */
|
|
14
14
|
permissionManager?: PermissionManager;
|
|
15
|
+
/** Foreground task manager for backgrounding tasks */
|
|
16
|
+
foregroundTaskManager?: import("../types/processes.js").IForegroundTaskManager;
|
|
17
|
+
/** Task manager for task management */
|
|
18
|
+
taskManager?: import("../services/taskManager.js").TaskManager;
|
|
15
19
|
/** Reversion manager for file snapshots */
|
|
16
20
|
reversionManager?: ReversionManager;
|
|
21
|
+
/** Background task manager for background execution */
|
|
22
|
+
backgroundTaskManager?: import("./backgroundTaskManager.js").BackgroundTaskManager;
|
|
17
23
|
/** Permission mode for tool execution (defaults to "default") */
|
|
18
24
|
permissionMode?: PermissionMode;
|
|
19
25
|
/** Custom permission callback for tool usage */
|
|
@@ -31,7 +37,10 @@ declare class ToolManager {
|
|
|
31
37
|
private lspManager?;
|
|
32
38
|
private logger?;
|
|
33
39
|
private permissionManager?;
|
|
40
|
+
private foregroundTaskManager?;
|
|
34
41
|
private reversionManager?;
|
|
42
|
+
private taskManager?;
|
|
43
|
+
private backgroundTaskManager?;
|
|
35
44
|
private permissionMode?;
|
|
36
45
|
private canUseToolCallback?;
|
|
37
46
|
constructor(options: ToolManagerOptions);
|
|
@@ -82,6 +91,10 @@ declare class ToolManager {
|
|
|
82
91
|
execute(name: string, args: Record<string, unknown>, context: ToolContext): Promise<ToolResult>;
|
|
83
92
|
list(): ToolPlugin[];
|
|
84
93
|
getToolsConfig(): ChatCompletionFunctionTool[];
|
|
94
|
+
/**
|
|
95
|
+
* Get the list of registered tool plugins
|
|
96
|
+
*/
|
|
97
|
+
getTools(): ToolPlugin[];
|
|
85
98
|
/**
|
|
86
99
|
* Get the current permission mode
|
|
87
100
|
*/
|
|
@@ -95,6 +108,10 @@ declare class ToolManager {
|
|
|
95
108
|
* Get the permission manager
|
|
96
109
|
*/
|
|
97
110
|
getPermissionManager(): PermissionManager | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Get the task manager
|
|
113
|
+
*/
|
|
114
|
+
getTaskManager(): import("../services/taskManager.js").TaskManager | undefined;
|
|
98
115
|
}
|
|
99
116
|
export { ToolManager };
|
|
100
117
|
//# sourceMappingURL=toolManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"toolManager.d.ts","sourceRoot":"","sources":["../../src/managers/toolManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwB7E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,sDAAsD;IACtD,qBAAqB,CAAC,EAAE,OAAO,uBAAuB,EAAE,sBAAsB,CAAC;IAC/E,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,4BAA4B,EAAE,WAAW,CAAC;IAC/D,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,OAAO,4BAA4B,EAAE,qBAAqB,CAAC;IACnF,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;;GAKG;AACH,cAAM,WAAW;IACf,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAc;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,qBAAqB,CAAC,CAAyD;IACvF,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,WAAW,CAAC,CAAmD;IACvE,OAAO,CAAC,qBAAqB,CAAC,CAA6D;IAC3F,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;gBAEpC,OAAO,EAAE,kBAAkB;IAcvC;;OAEG;IACI,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIvC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,sBAAsB,CAAC,IAAI,CAAC,EAAE;QACnC,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,YAAY,CAAC,EAAE,YAAY,CAAC;KAC7B,GAAG,IAAI;IAsCR;;;;;;;;;;;;OAYG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC;IAgEtB,IAAI,IAAI,UAAU,EAAE;IAMpB,cAAc,IAAI,0BAA0B,EAAE;IAmB9C;;OAEG;IACI,QAAQ,IAAI,UAAU,EAAE;IAI/B;;OAEG;IACI,iBAAiB,IAAI,cAAc;IAS1C;;;OAGG;IACI,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpD;;OAEG;IACI,oBAAoB,IAAI,iBAAiB,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,IACjB,OAAO,4BAA4B,EAAE,WAAW,GAChD,SAAS;CAGd;AAGD,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { bashTool
|
|
1
|
+
import { bashTool } from "../tools/bashTool.js";
|
|
2
|
+
import { taskOutputTool } from "../tools/taskOutputTool.js";
|
|
3
|
+
import { taskStopTool } from "../tools/taskStopTool.js";
|
|
2
4
|
import { deleteFileTool } from "../tools/deleteFileTool.js";
|
|
3
5
|
import { editTool } from "../tools/editTool.js";
|
|
4
6
|
import { multiEditTool } from "../tools/multiEditTool.js";
|
|
@@ -10,10 +12,10 @@ import { globTool } from "../tools/globTool.js";
|
|
|
10
12
|
import { grepTool } from "../tools/grepTool.js";
|
|
11
13
|
import { lsTool } from "../tools/lsTool.js";
|
|
12
14
|
import { readTool } from "../tools/readTool.js";
|
|
13
|
-
import { todoWriteTool } from "../tools/todoWriteTool.js";
|
|
14
15
|
import { lspTool } from "../tools/lspTool.js";
|
|
15
16
|
import { createTaskTool } from "../tools/taskTool.js";
|
|
16
17
|
import { createSkillTool } from "../tools/skillTool.js";
|
|
18
|
+
import { taskCreateTool, taskGetTool, taskUpdateTool, taskListTool, } from "../tools/taskManagementTools.js";
|
|
17
19
|
/**
|
|
18
20
|
* Tool Manager
|
|
19
21
|
*
|
|
@@ -27,7 +29,10 @@ class ToolManager {
|
|
|
27
29
|
this.lspManager = options.lspManager;
|
|
28
30
|
this.logger = options.logger;
|
|
29
31
|
this.permissionManager = options.permissionManager;
|
|
32
|
+
this.taskManager = options.taskManager;
|
|
33
|
+
this.foregroundTaskManager = options.foregroundTaskManager;
|
|
30
34
|
this.reversionManager = options.reversionManager;
|
|
35
|
+
this.backgroundTaskManager = options.backgroundTaskManager;
|
|
31
36
|
// Store CLI permission mode, let PermissionManager resolve effective mode
|
|
32
37
|
this.permissionMode = options.permissionMode;
|
|
33
38
|
this.canUseToolCallback = options.canUseToolCallback;
|
|
@@ -64,8 +69,8 @@ class ToolManager {
|
|
|
64
69
|
initializeBuiltInTools(deps) {
|
|
65
70
|
const builtInTools = [
|
|
66
71
|
bashTool,
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
taskOutputTool,
|
|
73
|
+
taskStopTool,
|
|
69
74
|
deleteFileTool,
|
|
70
75
|
editTool,
|
|
71
76
|
multiEditTool,
|
|
@@ -76,8 +81,11 @@ class ToolManager {
|
|
|
76
81
|
grepTool,
|
|
77
82
|
lsTool,
|
|
78
83
|
readTool,
|
|
79
|
-
todoWriteTool,
|
|
80
84
|
lspTool,
|
|
85
|
+
taskCreateTool,
|
|
86
|
+
taskGetTool,
|
|
87
|
+
taskUpdateTool,
|
|
88
|
+
taskListTool,
|
|
81
89
|
];
|
|
82
90
|
for (const tool of builtInTools) {
|
|
83
91
|
this.tools.set(tool.name, tool);
|
|
@@ -116,9 +124,13 @@ class ToolManager {
|
|
|
116
124
|
permissionMode: effectivePermissionMode,
|
|
117
125
|
canUseToolCallback: this.canUseToolCallback,
|
|
118
126
|
permissionManager: this.permissionManager,
|
|
127
|
+
taskManager: this.taskManager,
|
|
119
128
|
reversionManager: this.reversionManager,
|
|
129
|
+
backgroundTaskManager: this.backgroundTaskManager,
|
|
130
|
+
foregroundTaskManager: this.foregroundTaskManager,
|
|
120
131
|
mcpManager: this.mcpManager,
|
|
121
132
|
lspManager: this.lspManager,
|
|
133
|
+
sessionId: context.sessionId,
|
|
122
134
|
};
|
|
123
135
|
this.logger?.debug("Executing tool with enhanced context", {
|
|
124
136
|
toolName: name,
|
|
@@ -179,6 +191,12 @@ class ToolManager {
|
|
|
179
191
|
const mcpToolsConfig = this.mcpManager.getMcpToolsConfig();
|
|
180
192
|
return [...builtInToolsConfig, ...mcpToolsConfig];
|
|
181
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Get the list of registered tool plugins
|
|
196
|
+
*/
|
|
197
|
+
getTools() {
|
|
198
|
+
return Array.from(this.tools.values());
|
|
199
|
+
}
|
|
182
200
|
/**
|
|
183
201
|
* Get the current permission mode
|
|
184
202
|
*/
|
|
@@ -201,6 +219,12 @@ class ToolManager {
|
|
|
201
219
|
getPermissionManager() {
|
|
202
220
|
return this.permissionManager;
|
|
203
221
|
}
|
|
222
|
+
/**
|
|
223
|
+
* Get the task manager
|
|
224
|
+
*/
|
|
225
|
+
getTaskManager() {
|
|
226
|
+
return this.taskManager;
|
|
227
|
+
}
|
|
204
228
|
}
|
|
205
229
|
// Export tool registry class and types
|
|
206
230
|
export { ToolManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../../src/services/GitService.ts"],"names":[],"mappings":"AAKA,qBAAa,UAAU;IACrB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"GitService.d.ts","sourceRoot":"","sources":["../../src/services/GitService.ts"],"names":[],"mappings":"AAKA,qBAAa,UAAU;IACrB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,OAAO,CAAC,cAAc;CA6BvB"}
|
|
@@ -31,7 +31,9 @@ export class GitService {
|
|
|
31
31
|
}
|
|
32
32
|
try {
|
|
33
33
|
const refArgs = ref ? `-b "${ref}"` : "--depth 1";
|
|
34
|
-
await execAsync(`
|
|
34
|
+
await execAsync(`git clone ${refArgs} "${url}" "${targetPath}"`, {
|
|
35
|
+
env: { ...process.env, LC_ALL: "C" },
|
|
36
|
+
});
|
|
35
37
|
}
|
|
36
38
|
catch (error) {
|
|
37
39
|
throw this.handleGitError(urlOrRepo, error);
|
|
@@ -45,7 +47,9 @@ export class GitService {
|
|
|
45
47
|
throw new Error("Git is not installed or not found in PATH. Please install Git to use Git/GitHub marketplaces.");
|
|
46
48
|
}
|
|
47
49
|
try {
|
|
48
|
-
await execAsync(`
|
|
50
|
+
await execAsync(`git -C "${targetPath}" pull`, {
|
|
51
|
+
env: { ...process.env, LC_ALL: "C" },
|
|
52
|
+
});
|
|
49
53
|
}
|
|
50
54
|
catch (error) {
|
|
51
55
|
throw this.handleGitError(targetPath, error);
|
|
@@ -62,11 +62,11 @@ export declare class MarketplaceService {
|
|
|
62
62
|
/**
|
|
63
63
|
* Installs a plugin from a marketplace
|
|
64
64
|
*/
|
|
65
|
-
installPlugin(pluginAtMarketplace: string): Promise<InstalledPlugin>;
|
|
65
|
+
installPlugin(pluginAtMarketplace: string, projectPath?: string): Promise<InstalledPlugin>;
|
|
66
66
|
/**
|
|
67
67
|
* Uninstalls a plugin
|
|
68
68
|
*/
|
|
69
|
-
uninstallPlugin(pluginAtMarketplace: string): Promise<void>;
|
|
69
|
+
uninstallPlugin(pluginAtMarketplace: string, projectPath?: string): Promise<void>;
|
|
70
70
|
/**
|
|
71
71
|
* Updates a plugin (uninstall followed by install)
|
|
72
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarketplaceService.d.ts","sourceRoot":"","sources":["../../src/services/MarketplaceService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAMzC;;IAoBF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAoBhE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAa9D;;OAEG;IACG,qBAAqB,CACzB,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,uBAAuB,CAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC;IAwB/B;;OAEG;IACI,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM;IAehE;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0F9D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQrD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CrD;;OAEG;IACG,aAAa,
|
|
1
|
+
{"version":3,"file":"MarketplaceService.d.ts","sourceRoot":"","sources":["../../src/services/MarketplaceService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAMzC;;IAoBF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAUhC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAoBhE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAa9D;;OAEG;IACG,qBAAqB,CACzB,QAAQ,EAAE,yBAAyB,GAClC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,oBAAoB,CACxB,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC,IAAI,CAAC;IAOhB;;OAEG;IACG,uBAAuB,CAC3B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC;IAwB/B;;OAEG;IACI,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM;IAehE;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0F9D;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQrD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcpD;;OAEG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CrD;;OAEG;IACG,aAAa,CACjB,mBAAmB,EAAE,MAAM,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IA0H3B;;OAEG;IACG,eAAe,CACnB,mBAAmB,EAAE,MAAM,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,YAAY,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAI1E"}
|
|
@@ -253,7 +253,7 @@ export class MarketplaceService {
|
|
|
253
253
|
/**
|
|
254
254
|
* Installs a plugin from a marketplace
|
|
255
255
|
*/
|
|
256
|
-
async installPlugin(pluginAtMarketplace) {
|
|
256
|
+
async installPlugin(pluginAtMarketplace, projectPath) {
|
|
257
257
|
const [pluginName, marketplaceName] = pluginAtMarketplace.split("@");
|
|
258
258
|
if (!pluginName || !marketplaceName) {
|
|
259
259
|
throw new Error("Invalid plugin format. Use name@marketplace");
|
|
@@ -315,12 +315,15 @@ export class MarketplaceService {
|
|
|
315
315
|
await fs.mkdir(path.dirname(cachePath), { recursive: true });
|
|
316
316
|
await fs.rename(tmpPluginDir, cachePath);
|
|
317
317
|
const installedRegistry = await this.getInstalledPlugins();
|
|
318
|
-
const existingIndex = installedRegistry.plugins.findIndex((p) => p.name === pluginName &&
|
|
318
|
+
const existingIndex = installedRegistry.plugins.findIndex((p) => p.name === pluginName &&
|
|
319
|
+
p.marketplace === marketplaceName &&
|
|
320
|
+
p.projectPath === projectPath);
|
|
319
321
|
const installedPlugin = {
|
|
320
322
|
name: pluginName,
|
|
321
323
|
marketplace: marketplaceName,
|
|
322
324
|
version,
|
|
323
325
|
cachePath,
|
|
326
|
+
projectPath,
|
|
324
327
|
};
|
|
325
328
|
if (existingIndex >= 0) {
|
|
326
329
|
installedRegistry.plugins[existingIndex] = installedPlugin;
|
|
@@ -345,24 +348,28 @@ export class MarketplaceService {
|
|
|
345
348
|
/**
|
|
346
349
|
* Uninstalls a plugin
|
|
347
350
|
*/
|
|
348
|
-
async uninstallPlugin(pluginAtMarketplace) {
|
|
351
|
+
async uninstallPlugin(pluginAtMarketplace, projectPath) {
|
|
349
352
|
const [pluginName, marketplaceName] = pluginAtMarketplace.split("@");
|
|
350
353
|
if (!pluginName || !marketplaceName) {
|
|
351
354
|
throw new Error("Invalid plugin format. Use name@marketplace");
|
|
352
355
|
}
|
|
353
356
|
const installedRegistry = await this.getInstalledPlugins();
|
|
354
|
-
const pluginIndex = installedRegistry.plugins.findIndex((p) => p.name === pluginName &&
|
|
357
|
+
const pluginIndex = installedRegistry.plugins.findIndex((p) => p.name === pluginName &&
|
|
358
|
+
p.marketplace === marketplaceName &&
|
|
359
|
+
p.projectPath === projectPath);
|
|
355
360
|
if (pluginIndex === -1) {
|
|
356
|
-
throw new Error(`Plugin ${pluginName}@${marketplaceName} is not installed`);
|
|
361
|
+
throw new Error(`Plugin ${pluginName}@${marketplaceName} is not installed${projectPath ? ` for project ${projectPath}` : ""}`);
|
|
357
362
|
}
|
|
358
|
-
const
|
|
359
|
-
// Remove
|
|
360
|
-
if (existsSync(plugin.cachePath)) {
|
|
361
|
-
await fs.rm(plugin.cachePath, { recursive: true, force: true });
|
|
362
|
-
}
|
|
363
|
-
// Remove from registry
|
|
363
|
+
const pluginToRemove = installedRegistry.plugins[pluginIndex];
|
|
364
|
+
// Remove from registry first
|
|
364
365
|
installedRegistry.plugins.splice(pluginIndex, 1);
|
|
365
366
|
await this.saveInstalledPlugins(installedRegistry);
|
|
367
|
+
// Check if any other project is still using this same cache path
|
|
368
|
+
const isStillReferenced = installedRegistry.plugins.some((p) => p.cachePath === pluginToRemove.cachePath);
|
|
369
|
+
// Only remove cached files if no other references exist
|
|
370
|
+
if (!isStillReferenced && existsSync(pluginToRemove.cachePath)) {
|
|
371
|
+
await fs.rm(pluginToRemove.cachePath, { recursive: true, force: true });
|
|
372
|
+
}
|
|
366
373
|
}
|
|
367
374
|
/**
|
|
368
375
|
* Updates a plugin (uninstall followed by install)
|
|
@@ -7,6 +7,6 @@ export declare class MemoryRuleService {
|
|
|
7
7
|
/**
|
|
8
8
|
* Determines if a rule matches any of the given file paths using minimatch.
|
|
9
9
|
*/
|
|
10
|
-
isRuleActive(rule: MemoryRule, filesInContext: string[]): boolean;
|
|
10
|
+
isRuleActive(rule: MemoryRule, filesInContext: string[], workdir?: string): boolean;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=MemoryRuleService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryRuleService.d.ts","sourceRoot":"","sources":["../../src/services/MemoryRuleService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MemoryRuleService.d.ts","sourceRoot":"","sources":["../../src/services/MemoryRuleService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,wBAAwB,CAAC;AAE7E,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,GAAG,MAAM,GACzB,UAAU;IAgCb;;OAEG;IACH,YAAY,CACV,IAAI,EAAE,UAAU,EAChB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO;CAkBX"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { minimatch } from "minimatch";
|
|
2
|
+
import * as path from "node:path";
|
|
2
3
|
import { parseFrontmatter } from "../utils/markdownParser.js";
|
|
3
4
|
export class MemoryRuleService {
|
|
4
5
|
/**
|
|
@@ -35,10 +36,20 @@ export class MemoryRuleService {
|
|
|
35
36
|
/**
|
|
36
37
|
* Determines if a rule matches any of the given file paths using minimatch.
|
|
37
38
|
*/
|
|
38
|
-
isRuleActive(rule, filesInContext) {
|
|
39
|
+
isRuleActive(rule, filesInContext, workdir) {
|
|
39
40
|
if (!rule.metadata.paths || rule.metadata.paths.length === 0) {
|
|
40
41
|
return true;
|
|
41
42
|
}
|
|
42
|
-
return filesInContext.some((filePath) =>
|
|
43
|
+
return filesInContext.some((filePath) => {
|
|
44
|
+
// Normalize path relative to workdir if it's an absolute path
|
|
45
|
+
let normalizedPath = filePath;
|
|
46
|
+
if (workdir && path.isAbsolute(filePath)) {
|
|
47
|
+
normalizedPath = path.relative(workdir, filePath);
|
|
48
|
+
}
|
|
49
|
+
return rule.metadata.paths.some((pattern) => {
|
|
50
|
+
const isMatch = minimatch(normalizedPath, pattern, { dot: true });
|
|
51
|
+
return isMatch;
|
|
52
|
+
});
|
|
53
|
+
});
|
|
43
54
|
}
|
|
44
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiService.d.ts","sourceRoot":"","sources":["../../src/services/aiService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAGL,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"aiService.d.ts","sourceRoot":"","sources":["../../src/services/aiService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAGL,0BAA0B,EAC1B,0BAA0B,EAE3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,+BAA+B,CAAC;AA+FvC,MAAM,WAAW,gBAAgB;IAE/B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IAGzB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,0BAA0B,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC;KACnD,KAAK,IAAI,CAAC;IACX,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,6BAA6B,EAAE,CAAC;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,aAAa,CAAC,EACV,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,IAAI,CAAC;IACT,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CA+S1B;AA4OD,MAAM,WAAW,uBAAuB;IAEtC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IAGzB,QAAQ,EAAE,0BAA0B,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAmEjC"}
|