@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,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Resolver
|
|
3
|
+
*
|
|
4
|
+
* Resolves phase dependencies using topological sort.
|
|
5
|
+
* Groups phases into execution batches that can run in parallel.
|
|
6
|
+
*/
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Dependency Resolver Class
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export class DependencyResolver {
|
|
11
|
+
/**
|
|
12
|
+
* Resolve dependencies and create execution batches
|
|
13
|
+
*
|
|
14
|
+
* Uses Kahn's algorithm for topological sorting.
|
|
15
|
+
* Groups phases that have no dependencies between them into batches.
|
|
16
|
+
*/
|
|
17
|
+
resolve(phases) {
|
|
18
|
+
// Validate phase IDs are unique
|
|
19
|
+
const ids = new Set();
|
|
20
|
+
for (const phase of phases) {
|
|
21
|
+
if (ids.has(phase.id)) {
|
|
22
|
+
return {
|
|
23
|
+
batches: [],
|
|
24
|
+
isValid: false,
|
|
25
|
+
error: `Duplicate phase ID: ${phase.id}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
ids.add(phase.id);
|
|
29
|
+
}
|
|
30
|
+
// Create adjacency list and in-degree map
|
|
31
|
+
const phaseMap = new Map();
|
|
32
|
+
const inDegree = new Map();
|
|
33
|
+
const dependents = new Map();
|
|
34
|
+
for (const phase of phases) {
|
|
35
|
+
phaseMap.set(phase.id, phase);
|
|
36
|
+
inDegree.set(phase.id, 0);
|
|
37
|
+
dependents.set(phase.id, []);
|
|
38
|
+
}
|
|
39
|
+
// Build dependency graph
|
|
40
|
+
for (const phase of phases) {
|
|
41
|
+
for (const depId of phase.dependencies) {
|
|
42
|
+
// Validate dependency exists
|
|
43
|
+
if (!phaseMap.has(depId)) {
|
|
44
|
+
return {
|
|
45
|
+
batches: [],
|
|
46
|
+
isValid: false,
|
|
47
|
+
error: `Phase "${phase.id}" depends on non-existent phase "${depId}"`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Increment in-degree
|
|
51
|
+
inDegree.set(phase.id, (inDegree.get(phase.id) || 0) + 1);
|
|
52
|
+
// Add to dependents list
|
|
53
|
+
const deps = dependents.get(depId) || [];
|
|
54
|
+
deps.push(phase.id);
|
|
55
|
+
dependents.set(depId, deps);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Kahn's algorithm with batching
|
|
59
|
+
const batches = [];
|
|
60
|
+
const processed = new Set();
|
|
61
|
+
while (processed.size < phases.length) {
|
|
62
|
+
// Find all phases with in-degree 0 (no unprocessed dependencies)
|
|
63
|
+
const ready = [];
|
|
64
|
+
for (const phase of phases) {
|
|
65
|
+
if (processed.has(phase.id))
|
|
66
|
+
continue;
|
|
67
|
+
const degree = inDegree.get(phase.id) || 0;
|
|
68
|
+
if (degree === 0) {
|
|
69
|
+
ready.push(phase);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// No phases ready = cycle detected
|
|
73
|
+
if (ready.length === 0) {
|
|
74
|
+
const remaining = phases
|
|
75
|
+
.filter((p) => !processed.has(p.id))
|
|
76
|
+
.map((p) => p.id);
|
|
77
|
+
return {
|
|
78
|
+
batches: [],
|
|
79
|
+
isValid: false,
|
|
80
|
+
error: `Cyclic dependency detected among phases: ${remaining.join(", ")}`,
|
|
81
|
+
cyclicPhases: remaining,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Determine if this batch can run in parallel
|
|
85
|
+
// Phases can run in parallel if:
|
|
86
|
+
// 1. All phases in the batch have canRunInParallel: true
|
|
87
|
+
// 2. No phase in the batch depends on another phase in the same batch
|
|
88
|
+
const canRunInParallel = ready.length > 1 && ready.every((p) => p.canRunInParallel);
|
|
89
|
+
// Create batch
|
|
90
|
+
const batch = {
|
|
91
|
+
index: batches.length,
|
|
92
|
+
phases: ready,
|
|
93
|
+
canRunInParallel,
|
|
94
|
+
estimatedTokens: 0, // Will be filled by TokenEstimator
|
|
95
|
+
};
|
|
96
|
+
batches.push(batch);
|
|
97
|
+
// Mark as processed and update in-degrees
|
|
98
|
+
for (const phase of ready) {
|
|
99
|
+
processed.add(phase.id);
|
|
100
|
+
// Decrease in-degree for all dependents
|
|
101
|
+
const deps = dependents.get(phase.id) || [];
|
|
102
|
+
for (const depId of deps) {
|
|
103
|
+
const current = inDegree.get(depId) || 0;
|
|
104
|
+
inDegree.set(depId, current - 1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
batches,
|
|
110
|
+
isValid: true,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get phases that can execute immediately (no pending dependencies)
|
|
115
|
+
*/
|
|
116
|
+
getReadyPhases(phases, completedPhaseIds) {
|
|
117
|
+
return phases.filter((phase) => {
|
|
118
|
+
// Already completed
|
|
119
|
+
if (completedPhaseIds.has(phase.id))
|
|
120
|
+
return false;
|
|
121
|
+
// Check all dependencies are completed
|
|
122
|
+
return phase.dependencies.every((depId) => completedPhaseIds.has(depId));
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if a phase can be executed given current state
|
|
127
|
+
*/
|
|
128
|
+
canExecutePhase(phase, completedPhaseIds) {
|
|
129
|
+
const blockedBy = [];
|
|
130
|
+
for (const depId of phase.dependencies) {
|
|
131
|
+
if (!completedPhaseIds.has(depId)) {
|
|
132
|
+
blockedBy.push(depId);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
canExecute: blockedBy.length === 0,
|
|
137
|
+
blockedBy,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get the critical path (longest dependency chain)
|
|
142
|
+
*/
|
|
143
|
+
getCriticalPath(phases) {
|
|
144
|
+
const phaseMap = new Map();
|
|
145
|
+
for (const phase of phases) {
|
|
146
|
+
phaseMap.set(phase.id, phase);
|
|
147
|
+
}
|
|
148
|
+
// Calculate longest path to each phase using dynamic programming
|
|
149
|
+
const longestPath = new Map();
|
|
150
|
+
const predecessor = new Map();
|
|
151
|
+
// Initialize
|
|
152
|
+
for (const phase of phases) {
|
|
153
|
+
longestPath.set(phase.id, 0);
|
|
154
|
+
predecessor.set(phase.id, null);
|
|
155
|
+
}
|
|
156
|
+
// Process in topological order
|
|
157
|
+
const result = this.resolve(phases);
|
|
158
|
+
if (!result.isValid)
|
|
159
|
+
return [];
|
|
160
|
+
for (const batch of result.batches) {
|
|
161
|
+
for (const phase of batch.phases) {
|
|
162
|
+
const currentLength = longestPath.get(phase.id) || 0;
|
|
163
|
+
for (const depId of phase.dependencies) {
|
|
164
|
+
const depLength = longestPath.get(depId) || 0;
|
|
165
|
+
if (depLength + 1 > currentLength) {
|
|
166
|
+
longestPath.set(phase.id, depLength + 1);
|
|
167
|
+
predecessor.set(phase.id, depId);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Find the phase with the longest path
|
|
173
|
+
let maxLength = -1;
|
|
174
|
+
let maxPhaseId = null;
|
|
175
|
+
for (const [id, length] of longestPath.entries()) {
|
|
176
|
+
if (length > maxLength) {
|
|
177
|
+
maxLength = length;
|
|
178
|
+
maxPhaseId = id;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Reconstruct the critical path
|
|
182
|
+
const criticalPath = [];
|
|
183
|
+
let currentId = maxPhaseId;
|
|
184
|
+
while (currentId) {
|
|
185
|
+
const phase = phaseMap.get(currentId);
|
|
186
|
+
if (phase) {
|
|
187
|
+
criticalPath.unshift(phase);
|
|
188
|
+
}
|
|
189
|
+
currentId = predecessor.get(currentId) || null;
|
|
190
|
+
}
|
|
191
|
+
return criticalPath;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Validate dependency graph
|
|
195
|
+
*/
|
|
196
|
+
validate(phases) {
|
|
197
|
+
const errors = [];
|
|
198
|
+
const ids = new Set();
|
|
199
|
+
// Check for duplicate IDs
|
|
200
|
+
for (const phase of phases) {
|
|
201
|
+
if (ids.has(phase.id)) {
|
|
202
|
+
errors.push(`Duplicate phase ID: ${phase.id}`);
|
|
203
|
+
}
|
|
204
|
+
ids.add(phase.id);
|
|
205
|
+
}
|
|
206
|
+
// Check for invalid dependencies
|
|
207
|
+
for (const phase of phases) {
|
|
208
|
+
for (const depId of phase.dependencies) {
|
|
209
|
+
if (!ids.has(depId)) {
|
|
210
|
+
errors.push(`Phase "${phase.id}" depends on non-existent phase "${depId}"`);
|
|
211
|
+
}
|
|
212
|
+
// Check for self-dependency
|
|
213
|
+
if (depId === phase.id) {
|
|
214
|
+
errors.push(`Phase "${phase.id}" cannot depend on itself`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Check for cycles
|
|
219
|
+
const result = this.resolve(phases);
|
|
220
|
+
if (!result.isValid && result.cyclicPhases) {
|
|
221
|
+
errors.push(`Cyclic dependency detected: ${result.cyclicPhases.join(" -> ")}`);
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
isValid: errors.length === 0,
|
|
225
|
+
errors,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Get a visualization of the dependency graph (ASCII)
|
|
230
|
+
*/
|
|
231
|
+
visualize(phases) {
|
|
232
|
+
const result = this.resolve(phases);
|
|
233
|
+
if (!result.isValid) {
|
|
234
|
+
return `Invalid dependency graph: ${result.error}`;
|
|
235
|
+
}
|
|
236
|
+
const lines = [];
|
|
237
|
+
lines.push("Execution Order:");
|
|
238
|
+
lines.push("================");
|
|
239
|
+
for (const batch of result.batches) {
|
|
240
|
+
const phaseNames = batch.phases.map((p) => p.name).join(", ");
|
|
241
|
+
const parallel = batch.canRunInParallel ? " [parallel]" : "";
|
|
242
|
+
lines.push(`Batch ${batch.index + 1}: ${phaseNames}${parallel}`);
|
|
243
|
+
}
|
|
244
|
+
lines.push("");
|
|
245
|
+
lines.push("Dependencies:");
|
|
246
|
+
lines.push("=============");
|
|
247
|
+
for (const phase of phases) {
|
|
248
|
+
if (phase.dependencies.length > 0) {
|
|
249
|
+
const deps = phase.dependencies.join(", ");
|
|
250
|
+
lines.push(`${phase.name} <- [${deps}]`);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
lines.push(`${phase.name} (no dependencies)`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return lines.join("\n");
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
// ============================================================================
|
|
260
|
+
// Singleton Instance
|
|
261
|
+
// ============================================================================
|
|
262
|
+
let resolverInstance = null;
|
|
263
|
+
/**
|
|
264
|
+
* Get the singleton DependencyResolver instance
|
|
265
|
+
*/
|
|
266
|
+
export function getDependencyResolver() {
|
|
267
|
+
if (!resolverInstance) {
|
|
268
|
+
resolverInstance = new DependencyResolver();
|
|
269
|
+
}
|
|
270
|
+
return resolverInstance;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolver.js","sourceRoot":"","sources":["../../src/planner/dependency-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,OAAO,kBAAkB;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,MAAmB;QACzB,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,OAAO;oBACL,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB,KAAK,CAAC,EAAE,EAAE;iBACzC,CAAC;YACJ,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,yBAAyB;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvC,6BAA6B;gBAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO;wBACL,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,UAAU,KAAK,CAAC,EAAE,oCAAoC,KAAK,GAAG;qBACtE,CAAC;gBACJ,CAAC;gBAED,sBAAsB;gBACtB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE1D,yBAAyB;gBACzB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpB,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,OAAO,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,iEAAiE;YACjE,MAAM,KAAK,GAAgB,EAAE,CAAC;YAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAEtC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,MAAM;qBACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEpB,OAAO;oBACL,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,4CAA4C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACzE,YAAY,EAAE,SAAS;iBACxB,CAAC;YACJ,CAAC;YAED,8CAA8C;YAC9C,iCAAiC;YACjC,yDAAyD;YACzD,sEAAsE;YACtE,MAAM,gBAAgB,GACpB,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;YAE7D,eAAe;YACf,MAAM,KAAK,GAAmB;gBAC5B,KAAK,EAAE,OAAO,CAAC,MAAM;gBACrB,MAAM,EAAE,KAAK;gBACb,gBAAgB;gBAChB,eAAe,EAAE,CAAC,EAAE,mCAAmC;aACxD,CAAC;YAEF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEpB,0CAA0C;YAC1C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAExB,wCAAwC;gBACxC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;oBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACzC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO;YACP,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,MAAmB,EACnB,iBAA8B;QAE9B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,oBAAoB;YACpB,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YAElD,uCAAuC;YACvC,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,eAAe,CACb,KAAgB,EAChB,iBAA8B;QAE9B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC;YAClC,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,MAAmB;QACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;QAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,iEAAiE;QACjE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;QAErD,aAAa;QACb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBAErD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;oBACvC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9C,IAAI,SAAS,GAAG,CAAC,GAAG,aAAa,EAAE,CAAC;wBAClC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;wBACzC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,UAAU,GAAkB,IAAI,CAAC;QAErC,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBACvB,SAAS,GAAG,MAAM,CAAC;gBACnB,UAAU,GAAG,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,YAAY,GAAgB,EAAE,CAAC;QACrC,IAAI,SAAS,GAAG,UAAU,CAAC;QAE3B,OAAO,SAAS,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,KAAK,EAAE,CAAC;gBACV,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QACjD,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,MAAmB;QAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9B,0BAA0B;QAC1B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAED,iCAAiC;QACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;gBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CACT,UAAU,KAAK,CAAC,EAAE,oCAAoC,KAAK,GAAG,CAC/D,CAAC;gBACJ,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,2BAA2B,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CACT,+BAA+B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAmB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,6BAA6B,MAAM,CAAC,KAAK,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,UAAU,GAAG,QAAQ,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,oBAAoB,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,IAAI,gBAAgB,GAA8B,IAAI,CAAC;AAEvD;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Phase Task Planning System
|
|
3
|
+
*
|
|
4
|
+
* Exports all planner components for use in ax-cli.
|
|
5
|
+
*/
|
|
6
|
+
export { RiskLevel, FallbackStrategy, PhaseStatus, PlanStatus, type TaskPhase, type TaskPlan, type PhaseResult, type PlanResult, type ExecutionOptions, type PlannerOptions, type SavedPlanState, type PhaseDisplayInfo, type PlanSummary, type RecoveryAction, type LLMPhaseResponse, type LLMPlanResponse, TaskPhaseSchema, TaskPlanSchema, PhaseResultSchema, LLMPhaseResponseSchema, LLMPlanResponseSchema, createPhase, createPlan, createDefaultExecutionOptions, createDefaultPlannerOptions, } from "./types.js";
|
|
7
|
+
export { PlanStorage, getPlanStorage, resetPlanStorage, } from "./plan-storage.js";
|
|
8
|
+
export { DependencyResolver, getDependencyResolver, type ExecutionBatch, type DependencyResolutionResult, } from "./dependency-resolver.js";
|
|
9
|
+
export { TokenEstimator, getTokenEstimator, } from "./token-estimator.js";
|
|
10
|
+
export { PlanGenerator, getPlanGenerator, type PlanGeneratorOptions, type GenerationContext, } from "./plan-generator.js";
|
|
11
|
+
export { TaskPlanner, getTaskPlanner, resetTaskPlanner, type TaskPlannerEvents, } from "./task-planner.js";
|
|
12
|
+
export { PLANNING_SYSTEM_PROMPT, buildPlanningPrompt, buildPhaseExecutionPrompt, buildPlanSummaryPrompt, isComplexRequest, estimateMinPhases, COMPLEX_KEYWORDS, SIMPLE_KEYWORDS, } from "./prompts/planning-prompt.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-Phase Task Planning System
|
|
3
|
+
*
|
|
4
|
+
* Exports all planner components for use in ax-cli.
|
|
5
|
+
*/
|
|
6
|
+
// Types
|
|
7
|
+
export {
|
|
8
|
+
// Enums
|
|
9
|
+
RiskLevel, FallbackStrategy, PhaseStatus, PlanStatus,
|
|
10
|
+
// Schemas
|
|
11
|
+
TaskPhaseSchema, TaskPlanSchema, PhaseResultSchema, LLMPhaseResponseSchema, LLMPlanResponseSchema,
|
|
12
|
+
// Factory functions
|
|
13
|
+
createPhase, createPlan, createDefaultExecutionOptions, createDefaultPlannerOptions, } from "./types.js";
|
|
14
|
+
// Plan Storage
|
|
15
|
+
export { PlanStorage, getPlanStorage, resetPlanStorage, } from "./plan-storage.js";
|
|
16
|
+
// Dependency Resolver
|
|
17
|
+
export { DependencyResolver, getDependencyResolver, } from "./dependency-resolver.js";
|
|
18
|
+
// Token Estimator
|
|
19
|
+
export { TokenEstimator, getTokenEstimator, } from "./token-estimator.js";
|
|
20
|
+
// Plan Generator
|
|
21
|
+
export { PlanGenerator, getPlanGenerator, } from "./plan-generator.js";
|
|
22
|
+
// Task Planner (main orchestrator)
|
|
23
|
+
export { TaskPlanner, getTaskPlanner, resetTaskPlanner, } from "./task-planner.js";
|
|
24
|
+
// Prompts
|
|
25
|
+
export { PLANNING_SYSTEM_PROMPT, buildPlanningPrompt, buildPhaseExecutionPrompt, buildPlanSummaryPrompt, isComplexRequest, estimateMinPhases, COMPLEX_KEYWORDS, SIMPLE_KEYWORDS, } from "./prompts/planning-prompt.js";
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/planner/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,QAAQ;AACR,OAAO;AACL,QAAQ;AACR,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU;AAgBV,UAAU;AACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB;AAErB,oBAAoB;AACpB,WAAW,EACX,UAAU,EACV,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAEpB,eAAe;AACf,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GAGtB,MAAM,0BAA0B,CAAC;AAElC,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,gBAAgB,GAGjB,MAAM,qBAAqB,CAAC;AAE7B,mCAAmC;AACnC,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC;AAE3B,UAAU;AACV,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates execution plans from user requests using LLM.
|
|
5
|
+
*/
|
|
6
|
+
import { TaskPlan, RiskLevel } from "./types.js";
|
|
7
|
+
export interface PlanGeneratorOptions {
|
|
8
|
+
/** Maximum phases to generate */
|
|
9
|
+
maxPhases: number;
|
|
10
|
+
/** Default risk level for unspecified phases */
|
|
11
|
+
defaultRiskLevel: RiskLevel;
|
|
12
|
+
/** Whether to auto-require approval for high-risk phases */
|
|
13
|
+
requireApprovalForHighRisk: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface GenerationContext {
|
|
16
|
+
/** Project type (e.g., "typescript", "react") */
|
|
17
|
+
projectType?: string;
|
|
18
|
+
/** Relevant files for context */
|
|
19
|
+
files?: string[];
|
|
20
|
+
/** Recent conversation history */
|
|
21
|
+
recentHistory?: string[];
|
|
22
|
+
/** Custom instructions */
|
|
23
|
+
customInstructions?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class PlanGenerator {
|
|
26
|
+
private options;
|
|
27
|
+
constructor(options?: Partial<PlanGeneratorOptions>);
|
|
28
|
+
/**
|
|
29
|
+
* Check if a request should trigger multi-phase planning
|
|
30
|
+
*/
|
|
31
|
+
shouldCreatePlan(request: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Generate a plan from LLM response
|
|
34
|
+
*
|
|
35
|
+
* @param request - User's original request
|
|
36
|
+
* @param llmResponse - Raw JSON response from LLM
|
|
37
|
+
* @param context - Additional context
|
|
38
|
+
*/
|
|
39
|
+
generateFromLLMResponse(request: string, llmResponse: string, _context?: GenerationContext): TaskPlan | null;
|
|
40
|
+
/**
|
|
41
|
+
* Build a TaskPlan from validated LLM response
|
|
42
|
+
*/
|
|
43
|
+
private buildPlanFromResponse;
|
|
44
|
+
/**
|
|
45
|
+
* Parse risk level string to enum
|
|
46
|
+
*/
|
|
47
|
+
private parseRiskLevel;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve dependency references to phase IDs
|
|
50
|
+
*
|
|
51
|
+
* LLM might return dependencies as names or indices
|
|
52
|
+
*/
|
|
53
|
+
private resolveDependencies;
|
|
54
|
+
/**
|
|
55
|
+
* Create a simple single-phase plan for non-complex requests
|
|
56
|
+
*/
|
|
57
|
+
createSimplePlan(request: string): TaskPlan;
|
|
58
|
+
/**
|
|
59
|
+
* Get the system prompt for planning
|
|
60
|
+
*/
|
|
61
|
+
getSystemPrompt(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Build the user prompt for planning
|
|
64
|
+
*/
|
|
65
|
+
buildUserPrompt(request: string, context?: GenerationContext): string;
|
|
66
|
+
/**
|
|
67
|
+
* Update plan with estimates after creation
|
|
68
|
+
*/
|
|
69
|
+
updatePlanEstimates(plan: TaskPlan): TaskPlan;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get the singleton PlanGenerator instance
|
|
73
|
+
*/
|
|
74
|
+
export declare function getPlanGenerator(): PlanGenerator;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates execution plans from user requests using LLM.
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from "crypto";
|
|
7
|
+
import { PhaseStatus, PlanStatus, RiskLevel, FallbackStrategy, LLMPlanResponseSchema, createPlan, createPhase, } from "./types.js";
|
|
8
|
+
import { PLANNING_SYSTEM_PROMPT, buildPlanningPrompt, isComplexRequest, } from "./prompts/planning-prompt.js";
|
|
9
|
+
import { getDependencyResolver } from "./dependency-resolver.js";
|
|
10
|
+
import { getTokenEstimator } from "./token-estimator.js";
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Plan Generator Class
|
|
13
|
+
// ============================================================================
|
|
14
|
+
export class PlanGenerator {
|
|
15
|
+
options;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = {
|
|
18
|
+
maxPhases: 10,
|
|
19
|
+
defaultRiskLevel: RiskLevel.LOW,
|
|
20
|
+
requireApprovalForHighRisk: true,
|
|
21
|
+
...options,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a request should trigger multi-phase planning
|
|
26
|
+
*/
|
|
27
|
+
shouldCreatePlan(request) {
|
|
28
|
+
return isComplexRequest(request);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate a plan from LLM response
|
|
32
|
+
*
|
|
33
|
+
* @param request - User's original request
|
|
34
|
+
* @param llmResponse - Raw JSON response from LLM
|
|
35
|
+
* @param context - Additional context
|
|
36
|
+
*/
|
|
37
|
+
generateFromLLMResponse(request, llmResponse, _context) {
|
|
38
|
+
try {
|
|
39
|
+
// Parse JSON response
|
|
40
|
+
const parsed = JSON.parse(llmResponse);
|
|
41
|
+
// Validate against schema
|
|
42
|
+
const result = LLMPlanResponseSchema.safeParse(parsed);
|
|
43
|
+
if (!result.success) {
|
|
44
|
+
console.error("Invalid LLM response format:", result.error);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return this.buildPlanFromResponse(request, result.data);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("Failed to parse LLM response:", error);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a TaskPlan from validated LLM response
|
|
56
|
+
*/
|
|
57
|
+
buildPlanFromResponse(request, response) {
|
|
58
|
+
const planId = `plan_${randomUUID().slice(0, 8)}`;
|
|
59
|
+
const now = new Date();
|
|
60
|
+
// Convert LLM phases to TaskPhases
|
|
61
|
+
const phases = response.phases
|
|
62
|
+
.slice(0, this.options.maxPhases)
|
|
63
|
+
.map((llmPhase, index) => {
|
|
64
|
+
const phaseId = `phase_${index + 1}`;
|
|
65
|
+
// Convert risk level string to enum
|
|
66
|
+
const riskLevel = this.parseRiskLevel(llmPhase.riskLevel);
|
|
67
|
+
// Auto-set approval for high-risk phases
|
|
68
|
+
const requiresApproval = llmPhase.requiresApproval ||
|
|
69
|
+
(this.options.requireApprovalForHighRisk &&
|
|
70
|
+
riskLevel === RiskLevel.HIGH);
|
|
71
|
+
// Determine fallback strategy based on risk
|
|
72
|
+
const fallbackStrategy = riskLevel === RiskLevel.HIGH
|
|
73
|
+
? FallbackStrategy.ABORT
|
|
74
|
+
: FallbackStrategy.RETRY;
|
|
75
|
+
return createPhase({
|
|
76
|
+
id: phaseId,
|
|
77
|
+
index,
|
|
78
|
+
name: llmPhase.name,
|
|
79
|
+
description: llmPhase.description,
|
|
80
|
+
objectives: llmPhase.objectives,
|
|
81
|
+
toolsRequired: llmPhase.toolsRequired,
|
|
82
|
+
dependencies: this.resolveDependencies(llmPhase.dependencies, index),
|
|
83
|
+
canRunInParallel: llmPhase.canRunInParallel,
|
|
84
|
+
riskLevel,
|
|
85
|
+
requiresApproval,
|
|
86
|
+
fallbackStrategy,
|
|
87
|
+
maxRetries: riskLevel === RiskLevel.HIGH ? 1 : 3,
|
|
88
|
+
status: PhaseStatus.PENDING,
|
|
89
|
+
retryCount: 0,
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
// Validate dependencies
|
|
93
|
+
const resolver = getDependencyResolver();
|
|
94
|
+
const validation = resolver.validate(phases);
|
|
95
|
+
if (!validation.isValid) {
|
|
96
|
+
console.warn("Plan has dependency issues:", validation.errors);
|
|
97
|
+
// Fix dependencies by removing invalid ones
|
|
98
|
+
for (const phase of phases) {
|
|
99
|
+
phase.dependencies = phase.dependencies.filter((depId) => phases.some((p) => p.id === depId));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Estimate tokens and duration
|
|
103
|
+
const estimator = getTokenEstimator();
|
|
104
|
+
const batches = resolver.resolve(phases);
|
|
105
|
+
const estimatedTokens = phases.reduce((sum, p) => sum + estimator.estimatePhase(p), 0);
|
|
106
|
+
const estimatedDuration = batches.isValid
|
|
107
|
+
? estimator.estimatePlanDuration({ phases }, batches.batches)
|
|
108
|
+
: estimatedTokens * 20; // Fallback estimate
|
|
109
|
+
return createPlan({
|
|
110
|
+
id: planId,
|
|
111
|
+
originalPrompt: request,
|
|
112
|
+
reasoning: response.reasoning,
|
|
113
|
+
complexity: response.complexity,
|
|
114
|
+
phases,
|
|
115
|
+
status: PlanStatus.CREATED,
|
|
116
|
+
createdAt: now,
|
|
117
|
+
updatedAt: now,
|
|
118
|
+
estimatedTotalTokens: estimatedTokens,
|
|
119
|
+
estimatedDuration,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parse risk level string to enum
|
|
124
|
+
*/
|
|
125
|
+
parseRiskLevel(level) {
|
|
126
|
+
switch (level.toLowerCase()) {
|
|
127
|
+
case "high":
|
|
128
|
+
return RiskLevel.HIGH;
|
|
129
|
+
case "medium":
|
|
130
|
+
return RiskLevel.MEDIUM;
|
|
131
|
+
case "low":
|
|
132
|
+
default:
|
|
133
|
+
return RiskLevel.LOW;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Resolve dependency references to phase IDs
|
|
138
|
+
*
|
|
139
|
+
* LLM might return dependencies as names or indices
|
|
140
|
+
*/
|
|
141
|
+
resolveDependencies(deps, currentIndex) {
|
|
142
|
+
return deps
|
|
143
|
+
.map((dep) => {
|
|
144
|
+
// If it looks like a phase ID, use as-is
|
|
145
|
+
if (dep.startsWith("phase_")) {
|
|
146
|
+
return dep;
|
|
147
|
+
}
|
|
148
|
+
// If it's a number, convert to phase ID
|
|
149
|
+
const num = parseInt(dep, 10);
|
|
150
|
+
if (!isNaN(num) && num > 0 && num < currentIndex + 1) {
|
|
151
|
+
return `phase_${num}`;
|
|
152
|
+
}
|
|
153
|
+
// If it's "previous", reference the previous phase
|
|
154
|
+
if (dep.toLowerCase() === "previous" && currentIndex > 0) {
|
|
155
|
+
return `phase_${currentIndex}`;
|
|
156
|
+
}
|
|
157
|
+
// Can't resolve - skip
|
|
158
|
+
return null;
|
|
159
|
+
})
|
|
160
|
+
.filter((dep) => dep !== null);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Create a simple single-phase plan for non-complex requests
|
|
164
|
+
*/
|
|
165
|
+
createSimplePlan(request) {
|
|
166
|
+
const planId = `plan_${randomUUID().slice(0, 8)}`;
|
|
167
|
+
const now = new Date();
|
|
168
|
+
const phase = createPhase({
|
|
169
|
+
id: "phase_1",
|
|
170
|
+
index: 0,
|
|
171
|
+
name: "Execute Request",
|
|
172
|
+
description: request,
|
|
173
|
+
objectives: [request],
|
|
174
|
+
toolsRequired: [],
|
|
175
|
+
dependencies: [],
|
|
176
|
+
canRunInParallel: false,
|
|
177
|
+
riskLevel: RiskLevel.LOW,
|
|
178
|
+
requiresApproval: false,
|
|
179
|
+
fallbackStrategy: FallbackStrategy.RETRY,
|
|
180
|
+
maxRetries: 3,
|
|
181
|
+
status: PhaseStatus.PENDING,
|
|
182
|
+
retryCount: 0,
|
|
183
|
+
});
|
|
184
|
+
const estimator = getTokenEstimator();
|
|
185
|
+
return createPlan({
|
|
186
|
+
id: planId,
|
|
187
|
+
originalPrompt: request,
|
|
188
|
+
reasoning: "Simple request - single phase execution",
|
|
189
|
+
complexity: "simple",
|
|
190
|
+
phases: [phase],
|
|
191
|
+
status: PlanStatus.CREATED,
|
|
192
|
+
createdAt: now,
|
|
193
|
+
updatedAt: now,
|
|
194
|
+
estimatedTotalTokens: estimator.estimatePhase(phase),
|
|
195
|
+
estimatedDuration: estimator.estimatePhaseDuration(phase),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get the system prompt for planning
|
|
200
|
+
*/
|
|
201
|
+
getSystemPrompt() {
|
|
202
|
+
return PLANNING_SYSTEM_PROMPT;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Build the user prompt for planning
|
|
206
|
+
*/
|
|
207
|
+
buildUserPrompt(request, context) {
|
|
208
|
+
return buildPlanningPrompt(request, {
|
|
209
|
+
projectType: context?.projectType,
|
|
210
|
+
files: context?.files,
|
|
211
|
+
recentHistory: context?.recentHistory,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Update plan with estimates after creation
|
|
216
|
+
*/
|
|
217
|
+
updatePlanEstimates(plan) {
|
|
218
|
+
const estimator = getTokenEstimator();
|
|
219
|
+
const resolver = getDependencyResolver();
|
|
220
|
+
const batches = resolver.resolve(plan.phases);
|
|
221
|
+
return {
|
|
222
|
+
...plan,
|
|
223
|
+
estimatedTotalTokens: estimator.estimatePlan(plan),
|
|
224
|
+
estimatedDuration: batches.isValid
|
|
225
|
+
? estimator.estimatePlanDuration(plan, batches.batches)
|
|
226
|
+
: plan.estimatedDuration,
|
|
227
|
+
updatedAt: new Date(),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// ============================================================================
|
|
232
|
+
// Singleton Instance
|
|
233
|
+
// ============================================================================
|
|
234
|
+
let generatorInstance = null;
|
|
235
|
+
/**
|
|
236
|
+
* Get the singleton PlanGenerator instance
|
|
237
|
+
*/
|
|
238
|
+
export function getPlanGenerator() {
|
|
239
|
+
if (!generatorInstance) {
|
|
240
|
+
generatorInstance = new PlanGenerator();
|
|
241
|
+
}
|
|
242
|
+
return generatorInstance;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=plan-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-generator.js","sourceRoot":"","sources":["../../src/planner/plan-generator.ts"],"names":[],"mappings":"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"}
|