@defai.digital/ax-cli 2.7.0 → 2.8.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/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +69 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +24 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +69 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +44 -0
- package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +24 -0
- package/.ax-cli/checkpoints/metadata.json +62 -0
- package/README.md +2 -2
- package/dist/agent/context-manager.d.ts +2 -2
- package/dist/agent/context-manager.js +28 -15
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/dependency-resolver.d.ts +83 -0
- package/dist/agent/dependency-resolver.js +302 -0
- package/dist/agent/dependency-resolver.js.map +1 -0
- package/dist/agent/llm-agent.d.ts +63 -0
- package/dist/agent/llm-agent.js +250 -0
- package/dist/agent/llm-agent.js.map +1 -1
- package/dist/agent/specialized/analysis-agent.d.ts +11 -0
- package/dist/agent/specialized/analysis-agent.js +33 -0
- package/dist/agent/specialized/analysis-agent.js.map +1 -0
- package/dist/agent/specialized/debug-agent.d.ts +11 -0
- package/dist/agent/specialized/debug-agent.js +33 -0
- package/dist/agent/specialized/debug-agent.js.map +1 -0
- package/dist/agent/specialized/documentation-agent.d.ts +11 -0
- package/dist/agent/specialized/documentation-agent.js +33 -0
- package/dist/agent/specialized/documentation-agent.js.map +1 -0
- package/dist/agent/specialized/index.d.ts +11 -0
- package/dist/agent/specialized/index.js +12 -0
- package/dist/agent/specialized/index.js.map +1 -0
- package/dist/agent/specialized/performance-agent.d.ts +11 -0
- package/dist/agent/specialized/performance-agent.js +33 -0
- package/dist/agent/specialized/performance-agent.js.map +1 -0
- package/dist/agent/specialized/refactoring-agent.d.ts +11 -0
- package/dist/agent/specialized/refactoring-agent.js +33 -0
- package/dist/agent/specialized/refactoring-agent.js.map +1 -0
- package/dist/agent/specialized/testing-agent.d.ts +11 -0
- package/dist/agent/specialized/testing-agent.js +33 -0
- package/dist/agent/specialized/testing-agent.js.map +1 -0
- package/dist/agent/subagent-orchestrator.d.ts +124 -0
- package/dist/agent/subagent-orchestrator.js +345 -0
- package/dist/agent/subagent-orchestrator.js.map +1 -0
- package/dist/agent/subagent-types.d.ts +262 -0
- package/dist/agent/subagent-types.js +152 -0
- package/dist/agent/subagent-types.js.map +1 -0
- package/dist/agent/subagent.d.ts +88 -0
- package/dist/agent/subagent.js +402 -0
- package/dist/agent/subagent.js.map +1 -0
- package/dist/checkpoint/index.d.ts +9 -0
- package/dist/checkpoint/index.js +11 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/checkpoint/manager.d.ts +99 -0
- package/dist/checkpoint/manager.js +281 -0
- package/dist/checkpoint/manager.js.map +1 -0
- package/dist/checkpoint/storage.d.ts +31 -0
- package/dist/checkpoint/storage.js +265 -0
- package/dist/checkpoint/storage.js.map +1 -0
- package/dist/checkpoint/types.d.ts +111 -0
- package/dist/checkpoint/types.js +17 -0
- package/dist/checkpoint/types.js.map +1 -0
- package/dist/commands/rewind.d.ts +19 -0
- package/dist/commands/rewind.js +221 -0
- package/dist/commands/rewind.js.map +1 -0
- package/dist/hooks/use-input-handler.js +24 -0
- package/dist/hooks/use-input-handler.js.map +1 -1
- package/dist/llm/client.js +2 -1
- package/dist/llm/client.js.map +1 -1
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +27 -12
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/transports.d.ts +0 -1
- package/dist/mcp/transports.js +10 -7
- package/dist/mcp/transports.js.map +1 -1
- package/dist/schemas/api-schemas.js +4 -0
- package/dist/schemas/api-schemas.js.map +1 -1
- package/dist/tools/bash.js +26 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/search.js +21 -9
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +33 -0
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/chat-interface.js +3 -2
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/subagent-monitor.d.ts +29 -0
- package/dist/ui/components/subagent-monitor.js +150 -0
- package/dist/ui/components/subagent-monitor.js.map +1 -0
- package/dist/utils/history-manager.d.ts +1 -0
- package/dist/utils/history-manager.js +40 -5
- package/dist/utils/history-manager.js.map +1 -1
- package/dist/utils/json-utils.d.ts +7 -0
- package/dist/utils/json-utils.js +70 -2
- package/dist/utils/json-utils.js.map +1 -1
- package/dist/utils/settings-manager.js +12 -10
- package/dist/utils/settings-manager.js.map +1 -1
- package/dist/utils/text-utils.js +3 -3
- package/dist/utils/text-utils.js.map +1 -1
- package/dist/utils/token-counter.d.ts +5 -0
- package/dist/utils/token-counter.js +18 -3
- package/dist/utils/token-counter.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Resolver
|
|
3
|
+
*
|
|
4
|
+
* Resolves task dependencies and determines execution order for subagents.
|
|
5
|
+
* Implements topological sorting with cycle detection.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* DependencyResolver class for managing task dependencies
|
|
9
|
+
*/
|
|
10
|
+
export class DependencyResolver {
|
|
11
|
+
/**
|
|
12
|
+
* Resolve task dependencies and return execution batches
|
|
13
|
+
* Tasks in the same batch can be executed in parallel
|
|
14
|
+
*
|
|
15
|
+
* @param tasks Array of tasks to resolve
|
|
16
|
+
* @returns Array of batches, where each batch is an array of task IDs
|
|
17
|
+
*/
|
|
18
|
+
resolveDependencies(tasks) {
|
|
19
|
+
// Build dependency graph
|
|
20
|
+
const graph = this.buildDependencyGraph(tasks);
|
|
21
|
+
// Check for cycles
|
|
22
|
+
if (this.hasCycle(graph)) {
|
|
23
|
+
throw new Error('Circular dependency detected in task graph');
|
|
24
|
+
}
|
|
25
|
+
// Perform topological sort
|
|
26
|
+
const sorted = this.topologicalSort(graph, tasks);
|
|
27
|
+
// Group into parallel batches
|
|
28
|
+
return this.groupIntoBatches(sorted, graph, tasks);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Validate that there are no circular dependencies
|
|
32
|
+
*
|
|
33
|
+
* @param tasks Array of tasks to validate
|
|
34
|
+
* @returns true if valid, false if circular dependencies exist
|
|
35
|
+
*/
|
|
36
|
+
validateDependencies(tasks) {
|
|
37
|
+
try {
|
|
38
|
+
const graph = this.buildDependencyGraph(tasks);
|
|
39
|
+
return !this.hasCycle(graph);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get dependency graph structure
|
|
47
|
+
*
|
|
48
|
+
* @param tasks Array of tasks
|
|
49
|
+
* @returns DependencyGraph object with nodes and execution order
|
|
50
|
+
*/
|
|
51
|
+
getDependencyGraph(tasks) {
|
|
52
|
+
const graph = this.buildDependencyGraph(tasks);
|
|
53
|
+
const hasCycles = this.hasCycle(graph);
|
|
54
|
+
if (hasCycles) {
|
|
55
|
+
const cycles = this.findCycles(graph, tasks);
|
|
56
|
+
return {
|
|
57
|
+
nodes: graph,
|
|
58
|
+
executionOrder: [],
|
|
59
|
+
hasCycles: true,
|
|
60
|
+
cycles,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const sorted = this.topologicalSort(graph, tasks);
|
|
64
|
+
const executionOrder = this.groupIntoBatches(sorted, graph, tasks);
|
|
65
|
+
return {
|
|
66
|
+
nodes: graph,
|
|
67
|
+
executionOrder,
|
|
68
|
+
hasCycles: false,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// ==================== Private Methods ====================
|
|
72
|
+
/**
|
|
73
|
+
* Build dependency graph from tasks
|
|
74
|
+
*/
|
|
75
|
+
buildDependencyGraph(tasks) {
|
|
76
|
+
const graph = new Map();
|
|
77
|
+
// Initialize all nodes
|
|
78
|
+
for (const task of tasks) {
|
|
79
|
+
graph.set(task.id, {
|
|
80
|
+
taskId: task.id,
|
|
81
|
+
dependencies: task.dependencies || [],
|
|
82
|
+
dependents: [],
|
|
83
|
+
level: 0,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// Build dependent relationships
|
|
87
|
+
for (const task of tasks) {
|
|
88
|
+
if (task.dependencies) {
|
|
89
|
+
for (const depId of task.dependencies) {
|
|
90
|
+
const depNode = graph.get(depId);
|
|
91
|
+
if (depNode) {
|
|
92
|
+
depNode.dependents.push(task.id);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error(`Task ${task.id} depends on non-existent task ${depId}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return graph;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Perform topological sort using Kahn's algorithm
|
|
104
|
+
*/
|
|
105
|
+
topologicalSort(graph, tasks) {
|
|
106
|
+
// Calculate in-degrees
|
|
107
|
+
const inDegree = new Map();
|
|
108
|
+
for (const [nodeId, node] of graph) {
|
|
109
|
+
inDegree.set(nodeId, node.dependencies.length);
|
|
110
|
+
}
|
|
111
|
+
// Find nodes with in-degree 0
|
|
112
|
+
const queue = [];
|
|
113
|
+
for (const [nodeId, degree] of inDegree) {
|
|
114
|
+
if (degree === 0) {
|
|
115
|
+
queue.push(nodeId);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Process queue
|
|
119
|
+
const result = [];
|
|
120
|
+
while (queue.length > 0) {
|
|
121
|
+
// Sort by priority before processing
|
|
122
|
+
queue.sort((a, b) => {
|
|
123
|
+
const taskA = tasks.find(t => t.id === a);
|
|
124
|
+
const taskB = tasks.find(t => t.id === b);
|
|
125
|
+
return (taskB?.priority || 0) - (taskA?.priority || 0);
|
|
126
|
+
});
|
|
127
|
+
const nodeId = queue.shift();
|
|
128
|
+
result.push(nodeId);
|
|
129
|
+
const node = graph.get(nodeId);
|
|
130
|
+
for (const dependentId of node.dependents) {
|
|
131
|
+
const newDegree = inDegree.get(dependentId) - 1;
|
|
132
|
+
inDegree.set(dependentId, newDegree);
|
|
133
|
+
if (newDegree === 0) {
|
|
134
|
+
queue.push(dependentId);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Group sorted tasks into parallel execution batches
|
|
142
|
+
*/
|
|
143
|
+
groupIntoBatches(sorted, graph, tasks) {
|
|
144
|
+
const batches = [];
|
|
145
|
+
// Assign levels to each node
|
|
146
|
+
const levels = new Map();
|
|
147
|
+
for (const nodeId of sorted) {
|
|
148
|
+
const node = graph.get(nodeId);
|
|
149
|
+
let maxDepLevel = -1;
|
|
150
|
+
for (const depId of node.dependencies) {
|
|
151
|
+
const depLevel = levels.get(depId) || 0;
|
|
152
|
+
maxDepLevel = Math.max(maxDepLevel, depLevel);
|
|
153
|
+
}
|
|
154
|
+
const level = maxDepLevel + 1;
|
|
155
|
+
levels.set(nodeId, level);
|
|
156
|
+
node.level = level;
|
|
157
|
+
}
|
|
158
|
+
// Group by level
|
|
159
|
+
const maxLevel = Math.max(...Array.from(levels.values()));
|
|
160
|
+
for (let level = 0; level <= maxLevel; level++) {
|
|
161
|
+
const batch = [];
|
|
162
|
+
for (const [nodeId, nodeLevel] of levels) {
|
|
163
|
+
if (nodeLevel === level) {
|
|
164
|
+
batch.push(nodeId);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (batch.length > 0) {
|
|
168
|
+
// Sort by priority within batch
|
|
169
|
+
batch.sort((a, b) => {
|
|
170
|
+
const taskA = tasks.find(t => t.id === a);
|
|
171
|
+
const taskB = tasks.find(t => t.id === b);
|
|
172
|
+
return (taskB?.priority || 0) - (taskA?.priority || 0);
|
|
173
|
+
});
|
|
174
|
+
batches.push(batch);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return batches;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Check if graph has cycles using DFS
|
|
181
|
+
*/
|
|
182
|
+
hasCycle(graph) {
|
|
183
|
+
const visited = new Set();
|
|
184
|
+
const recursionStack = new Set();
|
|
185
|
+
for (const nodeId of graph.keys()) {
|
|
186
|
+
if (this.hasCycleUtil(nodeId, graph, visited, recursionStack)) {
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Utility function for cycle detection
|
|
194
|
+
*/
|
|
195
|
+
hasCycleUtil(nodeId, graph, visited, recursionStack) {
|
|
196
|
+
if (recursionStack.has(nodeId)) {
|
|
197
|
+
return true; // Cycle detected
|
|
198
|
+
}
|
|
199
|
+
if (visited.has(nodeId)) {
|
|
200
|
+
return false; // Already processed
|
|
201
|
+
}
|
|
202
|
+
visited.add(nodeId);
|
|
203
|
+
recursionStack.add(nodeId);
|
|
204
|
+
const node = graph.get(nodeId);
|
|
205
|
+
for (const dependentId of node.dependents) {
|
|
206
|
+
if (this.hasCycleUtil(dependentId, graph, visited, recursionStack)) {
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
recursionStack.delete(nodeId);
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Find all cycles in the graph
|
|
215
|
+
*/
|
|
216
|
+
findCycles(graph, _tasks) {
|
|
217
|
+
const cycles = [];
|
|
218
|
+
const visited = new Set();
|
|
219
|
+
const recursionStack = [];
|
|
220
|
+
for (const nodeId of graph.keys()) {
|
|
221
|
+
if (!visited.has(nodeId)) {
|
|
222
|
+
this.findCyclesUtil(nodeId, graph, visited, recursionStack, cycles);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return cycles;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Utility function for finding cycles
|
|
229
|
+
*/
|
|
230
|
+
findCyclesUtil(nodeId, graph, visited, recursionStack, cycles) {
|
|
231
|
+
visited.add(nodeId);
|
|
232
|
+
recursionStack.push(nodeId);
|
|
233
|
+
const node = graph.get(nodeId);
|
|
234
|
+
for (const dependentId of node.dependents) {
|
|
235
|
+
if (!visited.has(dependentId)) {
|
|
236
|
+
this.findCyclesUtil(dependentId, graph, visited, recursionStack, cycles);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// Found a cycle
|
|
240
|
+
const cycleStart = recursionStack.indexOf(dependentId);
|
|
241
|
+
if (cycleStart !== -1) {
|
|
242
|
+
const cycle = recursionStack.slice(cycleStart);
|
|
243
|
+
cycle.push(dependentId); // Complete the cycle
|
|
244
|
+
cycles.push(cycle);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
recursionStack.pop();
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get execution level for a task
|
|
252
|
+
* Level 0 = no dependencies, Level N = depends on tasks at level N-1
|
|
253
|
+
*/
|
|
254
|
+
getTaskLevel(taskId, tasks) {
|
|
255
|
+
const graph = this.buildDependencyGraph(tasks);
|
|
256
|
+
const node = graph.get(taskId);
|
|
257
|
+
if (!node) {
|
|
258
|
+
throw new Error(`Task ${taskId} not found`);
|
|
259
|
+
}
|
|
260
|
+
return node.level;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get all tasks that can be executed in parallel
|
|
264
|
+
*/
|
|
265
|
+
getParallelTasks(tasks) {
|
|
266
|
+
return this.resolveDependencies(tasks);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Check if a task can be executed given completed tasks
|
|
270
|
+
*/
|
|
271
|
+
canExecuteTask(taskId, completedTaskIds, tasks) {
|
|
272
|
+
const task = tasks.find(t => t.id === taskId);
|
|
273
|
+
if (!task) {
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
if (!task.dependencies || task.dependencies.length === 0) {
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
// All dependencies must be completed
|
|
280
|
+
return task.dependencies.every(depId => completedTaskIds.has(depId));
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get tasks that are ready to execute
|
|
284
|
+
*/
|
|
285
|
+
getReadyTasks(tasks, completedTaskIds) {
|
|
286
|
+
return tasks.filter(task => {
|
|
287
|
+
// Skip if already completed
|
|
288
|
+
if (completedTaskIds.has(task.id)) {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
// Check if dependencies are met
|
|
292
|
+
return this.canExecuteTask(task.id, completedTaskIds, tasks);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Create a new dependency resolver instance
|
|
298
|
+
*/
|
|
299
|
+
export function createDependencyResolver() {
|
|
300
|
+
return new DependencyResolver();
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/agent/dependency-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { LLMToolCall } from "../llm/client.js";
|
|
2
2
|
import { ToolResult } from "../types/index.js";
|
|
3
3
|
import { EventEmitter } from "events";
|
|
4
|
+
import { CheckpointManager } from "../checkpoint/index.js";
|
|
5
|
+
import { SubagentOrchestrator } from "./subagent-orchestrator.js";
|
|
4
6
|
export interface ChatEntry {
|
|
5
7
|
type: "user" | "assistant" | "tool_result" | "tool_call";
|
|
6
8
|
content: string;
|
|
@@ -41,7 +43,10 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
41
43
|
private abortController;
|
|
42
44
|
private maxToolRounds;
|
|
43
45
|
private recentToolCalls;
|
|
46
|
+
private checkpointManager;
|
|
47
|
+
private subagentOrchestrator;
|
|
44
48
|
constructor(apiKey: string, baseURL?: string, model?: string, maxToolRounds?: number);
|
|
49
|
+
private initializeCheckpointManager;
|
|
45
50
|
private initializeMCP;
|
|
46
51
|
private isGrokModel;
|
|
47
52
|
/**
|
|
@@ -121,6 +126,64 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
121
126
|
* Returns a number between 0-100
|
|
122
127
|
*/
|
|
123
128
|
getContextPercentage(): number;
|
|
129
|
+
/**
|
|
130
|
+
* Create a checkpoint of current state
|
|
131
|
+
*/
|
|
132
|
+
createCheckpoint(description?: string): Promise<string>;
|
|
133
|
+
/**
|
|
134
|
+
* Rewind conversation to a checkpoint
|
|
135
|
+
*/
|
|
136
|
+
rewindConversation(checkpointId: string): Promise<{
|
|
137
|
+
success: boolean;
|
|
138
|
+
error?: string;
|
|
139
|
+
}>;
|
|
140
|
+
/**
|
|
141
|
+
* Get checkpoint manager instance
|
|
142
|
+
*/
|
|
143
|
+
getCheckpointManager(): CheckpointManager;
|
|
144
|
+
/**
|
|
145
|
+
* Get subagent orchestrator instance
|
|
146
|
+
*/
|
|
147
|
+
getSubagentOrchestrator(): SubagentOrchestrator;
|
|
148
|
+
/**
|
|
149
|
+
* Spawn a specialized subagent for a specific task
|
|
150
|
+
* This is a user-facing method that simplifies subagent usage
|
|
151
|
+
*
|
|
152
|
+
* @param role - The role/specialization of the subagent
|
|
153
|
+
* @param description - Task description
|
|
154
|
+
* @param context - Optional additional context
|
|
155
|
+
* @returns The result of the subagent execution
|
|
156
|
+
*/
|
|
157
|
+
spawnSubagent(role: string, description: string, context?: {
|
|
158
|
+
files?: string[];
|
|
159
|
+
additionalContext?: string;
|
|
160
|
+
}): Promise<{
|
|
161
|
+
success: boolean;
|
|
162
|
+
output: string;
|
|
163
|
+
filesModified?: string[];
|
|
164
|
+
filesCreated?: string[];
|
|
165
|
+
error?: string;
|
|
166
|
+
}>;
|
|
167
|
+
/**
|
|
168
|
+
* Execute multiple tasks in parallel using subagents
|
|
169
|
+
* This automatically handles dependency resolution and parallel execution
|
|
170
|
+
*
|
|
171
|
+
* @param tasks - Array of tasks with role and description
|
|
172
|
+
* @returns Array of results from all tasks
|
|
173
|
+
*/
|
|
174
|
+
executeParallelTasks(tasks: Array<{
|
|
175
|
+
role: string;
|
|
176
|
+
description: string;
|
|
177
|
+
dependencies?: string[];
|
|
178
|
+
id?: string;
|
|
179
|
+
}>): Promise<Array<{
|
|
180
|
+
taskId: string;
|
|
181
|
+
success: boolean;
|
|
182
|
+
output: string;
|
|
183
|
+
filesModified?: string[];
|
|
184
|
+
filesCreated?: string[];
|
|
185
|
+
error?: string;
|
|
186
|
+
}>>;
|
|
124
187
|
/**
|
|
125
188
|
* Dispose of resources and remove event listeners
|
|
126
189
|
* Call this when the agent is no longer needed
|