@defai.digital/ax-cli 2.7.0 → 3.0.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 +87 -11
- package/dist/agent/context-manager.d.ts +2 -2
- package/dist/agent/context-manager.js +37 -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 +310 -0
- package/dist/agent/dependency-resolver.js.map +1 -0
- package/dist/agent/llm-agent.d.ts +111 -0
- package/dist/agent/llm-agent.js +625 -3
- 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 +128 -0
- package/dist/agent/subagent-orchestrator.js +388 -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 +426 -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/cache.js +5 -3
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/memory.js +21 -16
- package/dist/commands/memory.js.map +1 -1
- package/dist/commands/plan.d.ts +43 -0
- package/dist/commands/plan.js +385 -0
- package/dist/commands/plan.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/constants.d.ts +28 -0
- package/dist/constants.js +29 -0
- package/dist/constants.js.map +1 -1
- package/dist/hooks/use-enhanced-input.d.ts +5 -1
- package/dist/hooks/use-enhanced-input.js +23 -10
- package/dist/hooks/use-enhanced-input.js.map +1 -1
- package/dist/hooks/use-input-handler.d.ts +11 -1
- package/dist/hooks/use-input-handler.js +294 -2
- 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/llm/tools.d.ts +5 -0
- package/dist/llm/tools.js +57 -6
- package/dist/llm/tools.js.map +1 -1
- package/dist/mcp/client.d.ts +1 -0
- package/dist/mcp/client.js +30 -8
- 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/planner/dependency-resolver.d.ts +72 -0
- package/dist/planner/dependency-resolver.js +272 -0
- package/dist/planner/dependency-resolver.js.map +1 -0
- package/dist/planner/index.d.ts +12 -0
- package/dist/planner/index.js +26 -0
- package/dist/planner/index.js.map +1 -0
- package/dist/planner/plan-generator.d.ts +74 -0
- package/dist/planner/plan-generator.js +244 -0
- package/dist/planner/plan-generator.js.map +1 -0
- package/dist/planner/plan-storage.d.ts +98 -0
- package/dist/planner/plan-storage.js +325 -0
- package/dist/planner/plan-storage.js.map +1 -0
- package/dist/planner/prompts/planning-prompt.d.ts +41 -0
- package/dist/planner/prompts/planning-prompt.js +289 -0
- package/dist/planner/prompts/planning-prompt.js.map +1 -0
- package/dist/planner/task-planner.d.ts +135 -0
- package/dist/planner/task-planner.js +493 -0
- package/dist/planner/task-planner.js.map +1 -0
- package/dist/planner/token-estimator.d.ts +63 -0
- package/dist/planner/token-estimator.js +295 -0
- package/dist/planner/token-estimator.js.map +1 -0
- package/dist/planner/types.d.ts +669 -0
- package/dist/planner/types.js +213 -0
- package/dist/planner/types.js.map +1 -0
- package/dist/schemas/api-schemas.js +4 -0
- package/dist/schemas/api-schemas.js.map +1 -1
- package/dist/schemas/confirmation-schemas.d.ts +5 -0
- package/dist/schemas/confirmation-schemas.js +7 -0
- package/dist/schemas/confirmation-schemas.js.map +1 -1
- package/dist/schemas/index.d.ts +4 -4
- package/dist/tools/bash-output.d.ts +25 -0
- package/dist/tools/bash-output.js +145 -0
- package/dist/tools/bash-output.js.map +1 -0
- package/dist/tools/bash.d.ts +46 -2
- package/dist/tools/bash.js +241 -42
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/search.js +34 -9
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +37 -2
- package/dist/tools/text-editor.js.map +1 -1
- package/dist/ui/components/chat-history.d.ts +1 -0
- package/dist/ui/components/chat-history.js +125 -41
- package/dist/ui/components/chat-history.js.map +1 -1
- package/dist/ui/components/chat-input.js +10 -3
- package/dist/ui/components/chat-input.js.map +1 -1
- package/dist/ui/components/chat-interface.js +154 -45
- package/dist/ui/components/chat-interface.js.map +1 -1
- package/dist/ui/components/collapsible-tool-result.d.ts +26 -0
- package/dist/ui/components/collapsible-tool-result.js +172 -0
- package/dist/ui/components/collapsible-tool-result.js.map +1 -0
- package/dist/ui/components/command-suggestions.js +2 -1
- package/dist/ui/components/command-suggestions.js.map +1 -1
- package/dist/ui/components/confirmation-dialog.js +25 -36
- package/dist/ui/components/confirmation-dialog.js.map +1 -1
- package/dist/ui/components/index.d.ts +8 -0
- package/dist/ui/components/index.js +9 -0
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/components/keyboard-hints.d.ts +35 -0
- package/dist/ui/components/keyboard-hints.js +134 -0
- package/dist/ui/components/keyboard-hints.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +2 -1
- package/dist/ui/components/loading-spinner.js +86 -34
- package/dist/ui/components/loading-spinner.js.map +1 -1
- package/dist/ui/components/phase-progress.d.ts +21 -0
- package/dist/ui/components/phase-progress.js +228 -0
- package/dist/ui/components/phase-progress.js.map +1 -0
- package/dist/ui/components/quick-actions.d.ts +12 -0
- package/dist/ui/components/quick-actions.js +122 -0
- package/dist/ui/components/quick-actions.js.map +1 -0
- package/dist/ui/components/reasoning-display.d.ts +0 -80
- package/dist/ui/components/reasoning-display.js +0 -83
- package/dist/ui/components/reasoning-display.js.map +1 -1
- package/dist/ui/components/status-bar.d.ts +25 -0
- package/dist/ui/components/status-bar.js +125 -0
- package/dist/ui/components/status-bar.js.map +1 -0
- 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/ui/components/toast-notification.d.ts +123 -0
- package/dist/ui/components/toast-notification.js +143 -0
- package/dist/ui/components/toast-notification.js.map +1 -0
- package/dist/ui/components/welcome-panel.d.ts +10 -0
- package/dist/ui/components/welcome-panel.js +107 -0
- package/dist/ui/components/welcome-panel.js.map +1 -0
- package/dist/utils/background-task-manager.d.ts +95 -0
- package/dist/utils/background-task-manager.js +330 -0
- package/dist/utils/background-task-manager.js.map +1 -0
- package/dist/utils/confirmation-service.js +8 -3
- package/dist/utils/confirmation-service.js.map +1 -1
- 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/message-optimizer.d.ts +1 -0
- package/dist/utils/message-optimizer.js +7 -1
- package/dist/utils/message-optimizer.js.map +1 -1
- package/dist/utils/project-analyzer.js +5 -2
- package/dist/utils/project-analyzer.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 +3 -1
|
@@ -0,0 +1,310 @@
|
|
|
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
|
+
// Create task lookup map for O(1) access
|
|
121
|
+
const taskMap = new Map(tasks.map(t => [t.id, t]));
|
|
122
|
+
while (queue.length > 0) {
|
|
123
|
+
// Sort by priority before processing
|
|
124
|
+
queue.sort((a, b) => {
|
|
125
|
+
const taskA = taskMap.get(a);
|
|
126
|
+
const taskB = taskMap.get(b);
|
|
127
|
+
// Default to 0 priority if task not found (shouldn't happen in valid input)
|
|
128
|
+
return (taskB?.priority ?? 0) - (taskA?.priority ?? 0);
|
|
129
|
+
});
|
|
130
|
+
const nodeId = queue.shift();
|
|
131
|
+
result.push(nodeId);
|
|
132
|
+
const node = graph.get(nodeId);
|
|
133
|
+
for (const dependentId of node.dependents) {
|
|
134
|
+
const newDegree = inDegree.get(dependentId) - 1;
|
|
135
|
+
inDegree.set(dependentId, newDegree);
|
|
136
|
+
if (newDegree === 0) {
|
|
137
|
+
queue.push(dependentId);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Group sorted tasks into parallel execution batches
|
|
145
|
+
*/
|
|
146
|
+
groupIntoBatches(sorted, graph, tasks) {
|
|
147
|
+
const batches = [];
|
|
148
|
+
// Assign levels to each node
|
|
149
|
+
const levels = new Map();
|
|
150
|
+
for (const nodeId of sorted) {
|
|
151
|
+
const node = graph.get(nodeId);
|
|
152
|
+
let maxDepLevel = -1;
|
|
153
|
+
for (const depId of node.dependencies) {
|
|
154
|
+
const depLevel = levels.get(depId) || 0;
|
|
155
|
+
maxDepLevel = Math.max(maxDepLevel, depLevel);
|
|
156
|
+
}
|
|
157
|
+
const level = maxDepLevel + 1;
|
|
158
|
+
levels.set(nodeId, level);
|
|
159
|
+
node.level = level;
|
|
160
|
+
}
|
|
161
|
+
// Group by level
|
|
162
|
+
// Handle empty levels case to prevent -Infinity from Math.max
|
|
163
|
+
if (levels.size === 0) {
|
|
164
|
+
return batches; // Return empty batches for empty task set
|
|
165
|
+
}
|
|
166
|
+
const maxLevel = Math.max(...Array.from(levels.values()));
|
|
167
|
+
for (let level = 0; level <= maxLevel; level++) {
|
|
168
|
+
const batch = [];
|
|
169
|
+
for (const [nodeId, nodeLevel] of levels) {
|
|
170
|
+
if (nodeLevel === level) {
|
|
171
|
+
batch.push(nodeId);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (batch.length > 0) {
|
|
175
|
+
// Sort by priority within batch
|
|
176
|
+
batch.sort((a, b) => {
|
|
177
|
+
const taskA = tasks.find(t => t.id === a);
|
|
178
|
+
const taskB = tasks.find(t => t.id === b);
|
|
179
|
+
return (taskB?.priority || 0) - (taskA?.priority || 0);
|
|
180
|
+
});
|
|
181
|
+
batches.push(batch);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return batches;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if graph has cycles using DFS
|
|
188
|
+
*/
|
|
189
|
+
hasCycle(graph) {
|
|
190
|
+
const visited = new Set();
|
|
191
|
+
const recursionStack = new Set();
|
|
192
|
+
for (const nodeId of graph.keys()) {
|
|
193
|
+
if (this.hasCycleUtil(nodeId, graph, visited, recursionStack)) {
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Utility function for cycle detection
|
|
201
|
+
*/
|
|
202
|
+
hasCycleUtil(nodeId, graph, visited, recursionStack) {
|
|
203
|
+
if (recursionStack.has(nodeId)) {
|
|
204
|
+
return true; // Cycle detected
|
|
205
|
+
}
|
|
206
|
+
if (visited.has(nodeId)) {
|
|
207
|
+
return false; // Already processed
|
|
208
|
+
}
|
|
209
|
+
visited.add(nodeId);
|
|
210
|
+
recursionStack.add(nodeId);
|
|
211
|
+
const node = graph.get(nodeId);
|
|
212
|
+
for (const dependentId of node.dependents) {
|
|
213
|
+
if (this.hasCycleUtil(dependentId, graph, visited, recursionStack)) {
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
recursionStack.delete(nodeId);
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Find all cycles in the graph
|
|
222
|
+
*/
|
|
223
|
+
findCycles(graph, _tasks) {
|
|
224
|
+
const cycles = [];
|
|
225
|
+
const visited = new Set();
|
|
226
|
+
const recursionStack = [];
|
|
227
|
+
for (const nodeId of graph.keys()) {
|
|
228
|
+
if (!visited.has(nodeId)) {
|
|
229
|
+
this.findCyclesUtil(nodeId, graph, visited, recursionStack, cycles);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return cycles;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Utility function for finding cycles
|
|
236
|
+
*/
|
|
237
|
+
findCyclesUtil(nodeId, graph, visited, recursionStack, cycles) {
|
|
238
|
+
visited.add(nodeId);
|
|
239
|
+
recursionStack.push(nodeId);
|
|
240
|
+
const node = graph.get(nodeId);
|
|
241
|
+
for (const dependentId of node.dependents) {
|
|
242
|
+
if (!visited.has(dependentId)) {
|
|
243
|
+
this.findCyclesUtil(dependentId, graph, visited, recursionStack, cycles);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// Found a cycle
|
|
247
|
+
const cycleStart = recursionStack.indexOf(dependentId);
|
|
248
|
+
if (cycleStart !== -1) {
|
|
249
|
+
const cycle = recursionStack.slice(cycleStart);
|
|
250
|
+
cycle.push(dependentId); // Complete the cycle
|
|
251
|
+
cycles.push(cycle);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
recursionStack.pop();
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get execution level for a task
|
|
259
|
+
* Level 0 = no dependencies, Level N = depends on tasks at level N-1
|
|
260
|
+
*/
|
|
261
|
+
getTaskLevel(taskId, tasks) {
|
|
262
|
+
// Use getDependencyGraph to get properly calculated levels
|
|
263
|
+
const { nodes } = this.getDependencyGraph(tasks);
|
|
264
|
+
const node = nodes.get(taskId);
|
|
265
|
+
if (!node) {
|
|
266
|
+
throw new Error(`Task ${taskId} not found`);
|
|
267
|
+
}
|
|
268
|
+
return node.level;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get all tasks that can be executed in parallel
|
|
272
|
+
*/
|
|
273
|
+
getParallelTasks(tasks) {
|
|
274
|
+
return this.resolveDependencies(tasks);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Check if a task can be executed given completed tasks
|
|
278
|
+
*/
|
|
279
|
+
canExecuteTask(taskId, completedTaskIds, tasks) {
|
|
280
|
+
const task = tasks.find(t => t.id === taskId);
|
|
281
|
+
if (!task) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
if (!task.dependencies || task.dependencies.length === 0) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
// All dependencies must be completed
|
|
288
|
+
return task.dependencies.every(depId => completedTaskIds.has(depId));
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get tasks that are ready to execute
|
|
292
|
+
*/
|
|
293
|
+
getReadyTasks(tasks, completedTaskIds) {
|
|
294
|
+
return tasks.filter(task => {
|
|
295
|
+
// Skip if already completed
|
|
296
|
+
if (completedTaskIds.has(task.id)) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
// Check if dependencies are met
|
|
300
|
+
return this.canExecuteTask(task.id, completedTaskIds, tasks);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Create a new dependency resolver instance
|
|
306
|
+
*/
|
|
307
|
+
export function createDependencyResolver() {
|
|
308
|
+
return new DependencyResolver();
|
|
309
|
+
}
|
|
310
|
+
//# 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,9 @@
|
|
|
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";
|
|
6
|
+
import { TaskPlan } from "../planner/index.js";
|
|
4
7
|
export interface ChatEntry {
|
|
5
8
|
type: "user" | "assistant" | "tool_result" | "tool_call";
|
|
6
9
|
content: string;
|
|
@@ -17,6 +20,8 @@ export interface ChatEntry {
|
|
|
17
20
|
reasoningContent?: string;
|
|
18
21
|
/** Whether reasoning is currently streaming */
|
|
19
22
|
isReasoningStreaming?: boolean;
|
|
23
|
+
/** Response duration in milliseconds */
|
|
24
|
+
durationMs?: number;
|
|
20
25
|
}
|
|
21
26
|
export interface StreamingChunk {
|
|
22
27
|
type: "content" | "reasoning" | "tool_calls" | "tool_result" | "done" | "token_count";
|
|
@@ -32,6 +37,7 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
32
37
|
private llmClient;
|
|
33
38
|
private textEditor;
|
|
34
39
|
private bash;
|
|
40
|
+
private bashOutput;
|
|
35
41
|
private todoTool;
|
|
36
42
|
private search;
|
|
37
43
|
private chatHistory;
|
|
@@ -41,7 +47,13 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
41
47
|
private abortController;
|
|
42
48
|
private maxToolRounds;
|
|
43
49
|
private recentToolCalls;
|
|
50
|
+
private checkpointManager;
|
|
51
|
+
private subagentOrchestrator;
|
|
52
|
+
private taskPlanner;
|
|
53
|
+
private currentPlan;
|
|
54
|
+
private planningEnabled;
|
|
44
55
|
constructor(apiKey: string, baseURL?: string, model?: string, maxToolRounds?: number);
|
|
56
|
+
private initializeCheckpointManager;
|
|
45
57
|
private initializeMCP;
|
|
46
58
|
private isGrokModel;
|
|
47
59
|
/**
|
|
@@ -54,6 +66,38 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
54
66
|
*/
|
|
55
67
|
private resetToolCallTracking;
|
|
56
68
|
private shouldUseSearchFor;
|
|
69
|
+
/**
|
|
70
|
+
* Check if a request should trigger multi-phase planning
|
|
71
|
+
*/
|
|
72
|
+
private shouldCreatePlan;
|
|
73
|
+
/**
|
|
74
|
+
* Get the current plan if any
|
|
75
|
+
*/
|
|
76
|
+
getCurrentPlan(): TaskPlan | null;
|
|
77
|
+
/**
|
|
78
|
+
* Execute a single phase using the LLM
|
|
79
|
+
*/
|
|
80
|
+
private executePhase;
|
|
81
|
+
/**
|
|
82
|
+
* Build a prompt for phase execution
|
|
83
|
+
*/
|
|
84
|
+
private buildPhasePrompt;
|
|
85
|
+
/**
|
|
86
|
+
* Generate and execute a plan for a complex request
|
|
87
|
+
*/
|
|
88
|
+
processWithPlanning(message: string): AsyncGenerator<StreamingChunk, void, unknown>;
|
|
89
|
+
/**
|
|
90
|
+
* Internal streaming processor (used when planning falls back)
|
|
91
|
+
*/
|
|
92
|
+
private processUserMessageStreamInternal;
|
|
93
|
+
/**
|
|
94
|
+
* Format plan summary for display
|
|
95
|
+
*/
|
|
96
|
+
private formatPlanSummary;
|
|
97
|
+
/**
|
|
98
|
+
* Format plan result for display
|
|
99
|
+
*/
|
|
100
|
+
private formatPlanResult;
|
|
57
101
|
processUserMessage(message: string): Promise<ChatEntry[]>;
|
|
58
102
|
/**
|
|
59
103
|
* Optimized streaming delta merge - mutates accumulator for performance
|
|
@@ -113,6 +157,15 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
113
157
|
getChatHistory(): ChatEntry[];
|
|
114
158
|
getCurrentDirectory(): string;
|
|
115
159
|
executeBashCommand(command: string): Promise<ToolResult>;
|
|
160
|
+
/**
|
|
161
|
+
* Check if a bash command is currently executing
|
|
162
|
+
*/
|
|
163
|
+
isBashExecuting(): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Move currently running bash command to background
|
|
166
|
+
* Returns task ID if successful, null otherwise
|
|
167
|
+
*/
|
|
168
|
+
moveBashToBackground(): string | null;
|
|
116
169
|
getCurrentModel(): string;
|
|
117
170
|
setModel(model: string): void;
|
|
118
171
|
abortCurrentOperation(): void;
|
|
@@ -121,6 +174,64 @@ export declare class LLMAgent extends EventEmitter {
|
|
|
121
174
|
* Returns a number between 0-100
|
|
122
175
|
*/
|
|
123
176
|
getContextPercentage(): number;
|
|
177
|
+
/**
|
|
178
|
+
* Create a checkpoint of current state
|
|
179
|
+
*/
|
|
180
|
+
createCheckpoint(description?: string): Promise<string>;
|
|
181
|
+
/**
|
|
182
|
+
* Rewind conversation to a checkpoint
|
|
183
|
+
*/
|
|
184
|
+
rewindConversation(checkpointId: string): Promise<{
|
|
185
|
+
success: boolean;
|
|
186
|
+
error?: string;
|
|
187
|
+
}>;
|
|
188
|
+
/**
|
|
189
|
+
* Get checkpoint manager instance
|
|
190
|
+
*/
|
|
191
|
+
getCheckpointManager(): CheckpointManager;
|
|
192
|
+
/**
|
|
193
|
+
* Get subagent orchestrator instance
|
|
194
|
+
*/
|
|
195
|
+
getSubagentOrchestrator(): SubagentOrchestrator;
|
|
196
|
+
/**
|
|
197
|
+
* Spawn a specialized subagent for a specific task
|
|
198
|
+
* This is a user-facing method that simplifies subagent usage
|
|
199
|
+
*
|
|
200
|
+
* @param role - The role/specialization of the subagent
|
|
201
|
+
* @param description - Task description
|
|
202
|
+
* @param context - Optional additional context
|
|
203
|
+
* @returns The result of the subagent execution
|
|
204
|
+
*/
|
|
205
|
+
spawnSubagent(role: string, description: string, context?: {
|
|
206
|
+
files?: string[];
|
|
207
|
+
additionalContext?: string;
|
|
208
|
+
}): Promise<{
|
|
209
|
+
success: boolean;
|
|
210
|
+
output: string;
|
|
211
|
+
filesModified?: string[];
|
|
212
|
+
filesCreated?: string[];
|
|
213
|
+
error?: string;
|
|
214
|
+
}>;
|
|
215
|
+
/**
|
|
216
|
+
* Execute multiple tasks in parallel using subagents
|
|
217
|
+
* This automatically handles dependency resolution and parallel execution
|
|
218
|
+
*
|
|
219
|
+
* @param tasks - Array of tasks with role and description
|
|
220
|
+
* @returns Array of results from all tasks
|
|
221
|
+
*/
|
|
222
|
+
executeParallelTasks(tasks: Array<{
|
|
223
|
+
role: string;
|
|
224
|
+
description: string;
|
|
225
|
+
dependencies?: string[];
|
|
226
|
+
id?: string;
|
|
227
|
+
}>): Promise<Array<{
|
|
228
|
+
taskId: string;
|
|
229
|
+
success: boolean;
|
|
230
|
+
output: string;
|
|
231
|
+
filesModified?: string[];
|
|
232
|
+
filesCreated?: string[];
|
|
233
|
+
error?: string;
|
|
234
|
+
}>>;
|
|
124
235
|
/**
|
|
125
236
|
* Dispose of resources and remove event listeners
|
|
126
237
|
* Call this when the agent is no longer needed
|