@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.
Files changed (197) hide show
  1. package/.ax-cli/checkpoints/2025-11-20/checkpoint-2dd84869-e62d-46c8-9885-7e45f37f36e2.json +69 -0
  2. package/.ax-cli/checkpoints/2025-11-20/checkpoint-484dc350-353f-4808-9ed1-ebb3cefdab37.json +24 -0
  3. package/.ax-cli/checkpoints/2025-11-20/checkpoint-74a18b87-6172-4215-962b-44bb9f46a662.json +69 -0
  4. package/.ax-cli/checkpoints/2025-11-20/checkpoint-870a5fb9-6e82-4ff2-8ec8-af4c251cc514.json +44 -0
  5. package/.ax-cli/checkpoints/2025-11-20/checkpoint-93946601-0e83-456c-ba47-def9713124dd.json +24 -0
  6. package/.ax-cli/checkpoints/metadata.json +62 -0
  7. package/README.md +87 -11
  8. package/dist/agent/context-manager.d.ts +2 -2
  9. package/dist/agent/context-manager.js +37 -15
  10. package/dist/agent/context-manager.js.map +1 -1
  11. package/dist/agent/dependency-resolver.d.ts +83 -0
  12. package/dist/agent/dependency-resolver.js +310 -0
  13. package/dist/agent/dependency-resolver.js.map +1 -0
  14. package/dist/agent/llm-agent.d.ts +111 -0
  15. package/dist/agent/llm-agent.js +625 -3
  16. package/dist/agent/llm-agent.js.map +1 -1
  17. package/dist/agent/specialized/analysis-agent.d.ts +11 -0
  18. package/dist/agent/specialized/analysis-agent.js +33 -0
  19. package/dist/agent/specialized/analysis-agent.js.map +1 -0
  20. package/dist/agent/specialized/debug-agent.d.ts +11 -0
  21. package/dist/agent/specialized/debug-agent.js +33 -0
  22. package/dist/agent/specialized/debug-agent.js.map +1 -0
  23. package/dist/agent/specialized/documentation-agent.d.ts +11 -0
  24. package/dist/agent/specialized/documentation-agent.js +33 -0
  25. package/dist/agent/specialized/documentation-agent.js.map +1 -0
  26. package/dist/agent/specialized/index.d.ts +11 -0
  27. package/dist/agent/specialized/index.js +12 -0
  28. package/dist/agent/specialized/index.js.map +1 -0
  29. package/dist/agent/specialized/performance-agent.d.ts +11 -0
  30. package/dist/agent/specialized/performance-agent.js +33 -0
  31. package/dist/agent/specialized/performance-agent.js.map +1 -0
  32. package/dist/agent/specialized/refactoring-agent.d.ts +11 -0
  33. package/dist/agent/specialized/refactoring-agent.js +33 -0
  34. package/dist/agent/specialized/refactoring-agent.js.map +1 -0
  35. package/dist/agent/specialized/testing-agent.d.ts +11 -0
  36. package/dist/agent/specialized/testing-agent.js +33 -0
  37. package/dist/agent/specialized/testing-agent.js.map +1 -0
  38. package/dist/agent/subagent-orchestrator.d.ts +128 -0
  39. package/dist/agent/subagent-orchestrator.js +388 -0
  40. package/dist/agent/subagent-orchestrator.js.map +1 -0
  41. package/dist/agent/subagent-types.d.ts +262 -0
  42. package/dist/agent/subagent-types.js +152 -0
  43. package/dist/agent/subagent-types.js.map +1 -0
  44. package/dist/agent/subagent.d.ts +88 -0
  45. package/dist/agent/subagent.js +426 -0
  46. package/dist/agent/subagent.js.map +1 -0
  47. package/dist/checkpoint/index.d.ts +9 -0
  48. package/dist/checkpoint/index.js +11 -0
  49. package/dist/checkpoint/index.js.map +1 -0
  50. package/dist/checkpoint/manager.d.ts +99 -0
  51. package/dist/checkpoint/manager.js +281 -0
  52. package/dist/checkpoint/manager.js.map +1 -0
  53. package/dist/checkpoint/storage.d.ts +31 -0
  54. package/dist/checkpoint/storage.js +265 -0
  55. package/dist/checkpoint/storage.js.map +1 -0
  56. package/dist/checkpoint/types.d.ts +111 -0
  57. package/dist/checkpoint/types.js +17 -0
  58. package/dist/checkpoint/types.js.map +1 -0
  59. package/dist/commands/cache.js +5 -3
  60. package/dist/commands/cache.js.map +1 -1
  61. package/dist/commands/memory.js +21 -16
  62. package/dist/commands/memory.js.map +1 -1
  63. package/dist/commands/plan.d.ts +43 -0
  64. package/dist/commands/plan.js +385 -0
  65. package/dist/commands/plan.js.map +1 -0
  66. package/dist/commands/rewind.d.ts +19 -0
  67. package/dist/commands/rewind.js +221 -0
  68. package/dist/commands/rewind.js.map +1 -0
  69. package/dist/constants.d.ts +28 -0
  70. package/dist/constants.js +29 -0
  71. package/dist/constants.js.map +1 -1
  72. package/dist/hooks/use-enhanced-input.d.ts +5 -1
  73. package/dist/hooks/use-enhanced-input.js +23 -10
  74. package/dist/hooks/use-enhanced-input.js.map +1 -1
  75. package/dist/hooks/use-input-handler.d.ts +11 -1
  76. package/dist/hooks/use-input-handler.js +294 -2
  77. package/dist/hooks/use-input-handler.js.map +1 -1
  78. package/dist/llm/client.js +2 -1
  79. package/dist/llm/client.js.map +1 -1
  80. package/dist/llm/tools.d.ts +5 -0
  81. package/dist/llm/tools.js +57 -6
  82. package/dist/llm/tools.js.map +1 -1
  83. package/dist/mcp/client.d.ts +1 -0
  84. package/dist/mcp/client.js +30 -8
  85. package/dist/mcp/client.js.map +1 -1
  86. package/dist/mcp/transports.d.ts +0 -1
  87. package/dist/mcp/transports.js +10 -7
  88. package/dist/mcp/transports.js.map +1 -1
  89. package/dist/planner/dependency-resolver.d.ts +72 -0
  90. package/dist/planner/dependency-resolver.js +272 -0
  91. package/dist/planner/dependency-resolver.js.map +1 -0
  92. package/dist/planner/index.d.ts +12 -0
  93. package/dist/planner/index.js +26 -0
  94. package/dist/planner/index.js.map +1 -0
  95. package/dist/planner/plan-generator.d.ts +74 -0
  96. package/dist/planner/plan-generator.js +244 -0
  97. package/dist/planner/plan-generator.js.map +1 -0
  98. package/dist/planner/plan-storage.d.ts +98 -0
  99. package/dist/planner/plan-storage.js +325 -0
  100. package/dist/planner/plan-storage.js.map +1 -0
  101. package/dist/planner/prompts/planning-prompt.d.ts +41 -0
  102. package/dist/planner/prompts/planning-prompt.js +289 -0
  103. package/dist/planner/prompts/planning-prompt.js.map +1 -0
  104. package/dist/planner/task-planner.d.ts +135 -0
  105. package/dist/planner/task-planner.js +493 -0
  106. package/dist/planner/task-planner.js.map +1 -0
  107. package/dist/planner/token-estimator.d.ts +63 -0
  108. package/dist/planner/token-estimator.js +295 -0
  109. package/dist/planner/token-estimator.js.map +1 -0
  110. package/dist/planner/types.d.ts +669 -0
  111. package/dist/planner/types.js +213 -0
  112. package/dist/planner/types.js.map +1 -0
  113. package/dist/schemas/api-schemas.js +4 -0
  114. package/dist/schemas/api-schemas.js.map +1 -1
  115. package/dist/schemas/confirmation-schemas.d.ts +5 -0
  116. package/dist/schemas/confirmation-schemas.js +7 -0
  117. package/dist/schemas/confirmation-schemas.js.map +1 -1
  118. package/dist/schemas/index.d.ts +4 -4
  119. package/dist/tools/bash-output.d.ts +25 -0
  120. package/dist/tools/bash-output.js +145 -0
  121. package/dist/tools/bash-output.js.map +1 -0
  122. package/dist/tools/bash.d.ts +46 -2
  123. package/dist/tools/bash.js +241 -42
  124. package/dist/tools/bash.js.map +1 -1
  125. package/dist/tools/search.js +34 -9
  126. package/dist/tools/search.js.map +1 -1
  127. package/dist/tools/text-editor.d.ts +16 -0
  128. package/dist/tools/text-editor.js +37 -2
  129. package/dist/tools/text-editor.js.map +1 -1
  130. package/dist/ui/components/chat-history.d.ts +1 -0
  131. package/dist/ui/components/chat-history.js +125 -41
  132. package/dist/ui/components/chat-history.js.map +1 -1
  133. package/dist/ui/components/chat-input.js +10 -3
  134. package/dist/ui/components/chat-input.js.map +1 -1
  135. package/dist/ui/components/chat-interface.js +154 -45
  136. package/dist/ui/components/chat-interface.js.map +1 -1
  137. package/dist/ui/components/collapsible-tool-result.d.ts +26 -0
  138. package/dist/ui/components/collapsible-tool-result.js +172 -0
  139. package/dist/ui/components/collapsible-tool-result.js.map +1 -0
  140. package/dist/ui/components/command-suggestions.js +2 -1
  141. package/dist/ui/components/command-suggestions.js.map +1 -1
  142. package/dist/ui/components/confirmation-dialog.js +25 -36
  143. package/dist/ui/components/confirmation-dialog.js.map +1 -1
  144. package/dist/ui/components/index.d.ts +8 -0
  145. package/dist/ui/components/index.js +9 -0
  146. package/dist/ui/components/index.js.map +1 -1
  147. package/dist/ui/components/keyboard-hints.d.ts +35 -0
  148. package/dist/ui/components/keyboard-hints.js +134 -0
  149. package/dist/ui/components/keyboard-hints.js.map +1 -0
  150. package/dist/ui/components/loading-spinner.d.ts +2 -1
  151. package/dist/ui/components/loading-spinner.js +86 -34
  152. package/dist/ui/components/loading-spinner.js.map +1 -1
  153. package/dist/ui/components/phase-progress.d.ts +21 -0
  154. package/dist/ui/components/phase-progress.js +228 -0
  155. package/dist/ui/components/phase-progress.js.map +1 -0
  156. package/dist/ui/components/quick-actions.d.ts +12 -0
  157. package/dist/ui/components/quick-actions.js +122 -0
  158. package/dist/ui/components/quick-actions.js.map +1 -0
  159. package/dist/ui/components/reasoning-display.d.ts +0 -80
  160. package/dist/ui/components/reasoning-display.js +0 -83
  161. package/dist/ui/components/reasoning-display.js.map +1 -1
  162. package/dist/ui/components/status-bar.d.ts +25 -0
  163. package/dist/ui/components/status-bar.js +125 -0
  164. package/dist/ui/components/status-bar.js.map +1 -0
  165. package/dist/ui/components/subagent-monitor.d.ts +29 -0
  166. package/dist/ui/components/subagent-monitor.js +150 -0
  167. package/dist/ui/components/subagent-monitor.js.map +1 -0
  168. package/dist/ui/components/toast-notification.d.ts +123 -0
  169. package/dist/ui/components/toast-notification.js +143 -0
  170. package/dist/ui/components/toast-notification.js.map +1 -0
  171. package/dist/ui/components/welcome-panel.d.ts +10 -0
  172. package/dist/ui/components/welcome-panel.js +107 -0
  173. package/dist/ui/components/welcome-panel.js.map +1 -0
  174. package/dist/utils/background-task-manager.d.ts +95 -0
  175. package/dist/utils/background-task-manager.js +330 -0
  176. package/dist/utils/background-task-manager.js.map +1 -0
  177. package/dist/utils/confirmation-service.js +8 -3
  178. package/dist/utils/confirmation-service.js.map +1 -1
  179. package/dist/utils/history-manager.d.ts +1 -0
  180. package/dist/utils/history-manager.js +40 -5
  181. package/dist/utils/history-manager.js.map +1 -1
  182. package/dist/utils/json-utils.d.ts +7 -0
  183. package/dist/utils/json-utils.js +70 -2
  184. package/dist/utils/json-utils.js.map +1 -1
  185. package/dist/utils/message-optimizer.d.ts +1 -0
  186. package/dist/utils/message-optimizer.js +7 -1
  187. package/dist/utils/message-optimizer.js.map +1 -1
  188. package/dist/utils/project-analyzer.js +5 -2
  189. package/dist/utils/project-analyzer.js.map +1 -1
  190. package/dist/utils/settings-manager.js +12 -10
  191. package/dist/utils/settings-manager.js.map +1 -1
  192. package/dist/utils/text-utils.js +3 -3
  193. package/dist/utils/text-utils.js.map +1 -1
  194. package/dist/utils/token-counter.d.ts +5 -0
  195. package/dist/utils/token-counter.js +18 -3
  196. package/dist/utils/token-counter.js.map +1 -1
  197. 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