@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,385 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan Commands
|
|
3
|
+
*
|
|
4
|
+
* CLI commands for multi-phase task planning system.
|
|
5
|
+
*/
|
|
6
|
+
import { getTaskPlanner, PlanStatus, PhaseStatus } from "../planner/index.js";
|
|
7
|
+
import { getPlanStorage } from "../planner/plan-storage.js";
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Helper Functions
|
|
10
|
+
// ============================================================================
|
|
11
|
+
function formatDuration(ms) {
|
|
12
|
+
if (ms < 1000)
|
|
13
|
+
return `${ms}ms`;
|
|
14
|
+
const seconds = Math.floor(ms / 1000);
|
|
15
|
+
if (seconds < 60)
|
|
16
|
+
return `${seconds}s`;
|
|
17
|
+
const minutes = Math.floor(seconds / 60);
|
|
18
|
+
const remainingSeconds = seconds % 60;
|
|
19
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
20
|
+
}
|
|
21
|
+
function getStatusIcon(status) {
|
|
22
|
+
switch (status) {
|
|
23
|
+
case PhaseStatus.COMPLETED:
|
|
24
|
+
return "โ";
|
|
25
|
+
case PhaseStatus.EXECUTING:
|
|
26
|
+
return "โณ";
|
|
27
|
+
case PhaseStatus.FAILED:
|
|
28
|
+
return "โ";
|
|
29
|
+
case PhaseStatus.SKIPPED:
|
|
30
|
+
return "โ";
|
|
31
|
+
case PhaseStatus.APPROVED:
|
|
32
|
+
return "โ";
|
|
33
|
+
case PhaseStatus.QUEUED:
|
|
34
|
+
return "โ";
|
|
35
|
+
case PhaseStatus.CANCELLED:
|
|
36
|
+
return "โ";
|
|
37
|
+
case PhaseStatus.PENDING:
|
|
38
|
+
default:
|
|
39
|
+
return "โ";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function getPlanStatusIcon(status) {
|
|
43
|
+
switch (status) {
|
|
44
|
+
case PlanStatus.COMPLETED:
|
|
45
|
+
return "โ";
|
|
46
|
+
case PlanStatus.EXECUTING:
|
|
47
|
+
return "โณ";
|
|
48
|
+
case PlanStatus.FAILED:
|
|
49
|
+
return "โ";
|
|
50
|
+
case PlanStatus.PAUSED:
|
|
51
|
+
return "โธ";
|
|
52
|
+
case PlanStatus.ABANDONED:
|
|
53
|
+
return "โ";
|
|
54
|
+
case PlanStatus.APPROVED:
|
|
55
|
+
return "โ";
|
|
56
|
+
case PlanStatus.CREATED:
|
|
57
|
+
default:
|
|
58
|
+
return "โ";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function formatPlanSummaryBrief(plan) {
|
|
62
|
+
let output = `**${getPlanStatusIcon(plan.status)} Plan: ${plan.id}**\n`;
|
|
63
|
+
output += ` Request: ${plan.originalPrompt.slice(0, 60)}${plan.originalPrompt.length > 60 ? "..." : ""}\n`;
|
|
64
|
+
output += ` Status: ${plan.status}\n`;
|
|
65
|
+
output += ` Progress: ${plan.completedPhases}/${plan.totalPhases} phases\n`;
|
|
66
|
+
return output;
|
|
67
|
+
}
|
|
68
|
+
function formatPlanSummary(plan) {
|
|
69
|
+
const completed = plan.phases.filter((p) => p.status === PhaseStatus.COMPLETED).length;
|
|
70
|
+
const failed = plan.phases.filter((p) => p.status === PhaseStatus.FAILED).length;
|
|
71
|
+
const total = plan.phases.length;
|
|
72
|
+
let output = `**${getPlanStatusIcon(plan.status)} Plan: ${plan.id}**\n`;
|
|
73
|
+
output += ` Request: ${plan.originalPrompt.slice(0, 60)}${plan.originalPrompt.length > 60 ? "..." : ""}\n`;
|
|
74
|
+
output += ` Status: ${plan.status}\n`;
|
|
75
|
+
output += ` Progress: ${completed}/${total} phases`;
|
|
76
|
+
if (failed > 0) {
|
|
77
|
+
output += ` (${failed} failed)`;
|
|
78
|
+
}
|
|
79
|
+
output += "\n";
|
|
80
|
+
if (plan.estimatedDuration > 0) {
|
|
81
|
+
output += ` Est. Duration: ${formatDuration(plan.estimatedDuration)}`;
|
|
82
|
+
if (plan.actualDuration > 0) {
|
|
83
|
+
output += ` (Actual: ${formatDuration(plan.actualDuration)})`;
|
|
84
|
+
}
|
|
85
|
+
output += "\n";
|
|
86
|
+
}
|
|
87
|
+
return output;
|
|
88
|
+
}
|
|
89
|
+
function formatPlanDetails(plan) {
|
|
90
|
+
let output = formatPlanSummary(plan);
|
|
91
|
+
output += "\n**Phases:**\n";
|
|
92
|
+
for (const phase of plan.phases) {
|
|
93
|
+
const icon = getStatusIcon(phase.status);
|
|
94
|
+
const isCurrent = phase.index === plan.currentPhaseIndex;
|
|
95
|
+
const marker = isCurrent ? "โ " : " ";
|
|
96
|
+
output += `${marker}${icon} ${phase.index + 1}. ${phase.name}`;
|
|
97
|
+
if (phase.duration) {
|
|
98
|
+
output += ` (${formatDuration(phase.duration)})`;
|
|
99
|
+
}
|
|
100
|
+
output += "\n";
|
|
101
|
+
if (phase.error) {
|
|
102
|
+
output += ` Error: ${phase.error}\n`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return output;
|
|
106
|
+
}
|
|
107
|
+
// ============================================================================
|
|
108
|
+
// Plan Commands
|
|
109
|
+
// ============================================================================
|
|
110
|
+
/**
|
|
111
|
+
* List all plans
|
|
112
|
+
*/
|
|
113
|
+
export async function handlePlansCommand() {
|
|
114
|
+
try {
|
|
115
|
+
const storage = getPlanStorage();
|
|
116
|
+
const plans = await storage.listPlans();
|
|
117
|
+
if (plans.length === 0) {
|
|
118
|
+
return {
|
|
119
|
+
success: true,
|
|
120
|
+
output: "No plans found. Use AI to create a plan for complex tasks.",
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
let output = "**๐ Task Plans**\n\n";
|
|
124
|
+
// Group by status
|
|
125
|
+
const activePlans = plans.filter((p) => p.status === PlanStatus.EXECUTING ||
|
|
126
|
+
p.status === PlanStatus.PAUSED ||
|
|
127
|
+
p.status === PlanStatus.APPROVED);
|
|
128
|
+
const recentPlans = plans.filter((p) => p.status === PlanStatus.COMPLETED ||
|
|
129
|
+
p.status === PlanStatus.FAILED ||
|
|
130
|
+
p.status === PlanStatus.ABANDONED);
|
|
131
|
+
if (activePlans.length > 0) {
|
|
132
|
+
output += "**Active Plans:**\n";
|
|
133
|
+
for (const plan of activePlans) {
|
|
134
|
+
output += formatPlanSummaryBrief(plan);
|
|
135
|
+
output += "\n";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (recentPlans.length > 0) {
|
|
139
|
+
output += "**Recent Plans:**\n";
|
|
140
|
+
for (const plan of recentPlans.slice(0, 5)) {
|
|
141
|
+
output += formatPlanSummaryBrief(plan);
|
|
142
|
+
output += "\n";
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return { success: true, output };
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
output: `Failed to list plans: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Show details of a specific plan or current plan
|
|
156
|
+
*/
|
|
157
|
+
export async function handlePlanCommand(planId) {
|
|
158
|
+
try {
|
|
159
|
+
const planner = getTaskPlanner();
|
|
160
|
+
let plan = null;
|
|
161
|
+
if (planId) {
|
|
162
|
+
const storage = getPlanStorage();
|
|
163
|
+
plan = await storage.loadPlan(planId);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
plan = planner.getCurrentPlan();
|
|
167
|
+
}
|
|
168
|
+
if (!plan) {
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
output: planId
|
|
172
|
+
? `Plan not found: ${planId}`
|
|
173
|
+
: "No active plan. Use /plans to see all plans.",
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
return { success: true, output: formatPlanDetails(plan) };
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
output: `Failed to load plan: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Show phases of current plan
|
|
187
|
+
*/
|
|
188
|
+
export async function handlePhasesCommand() {
|
|
189
|
+
try {
|
|
190
|
+
const planner = getTaskPlanner();
|
|
191
|
+
const plan = planner.getCurrentPlan();
|
|
192
|
+
if (!plan) {
|
|
193
|
+
return {
|
|
194
|
+
success: false,
|
|
195
|
+
output: "No active plan. Ask me to help with a complex task to create one.",
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
let output = `**๐ Phases for Plan: ${plan.id}**\n\n`;
|
|
199
|
+
for (const phase of plan.phases) {
|
|
200
|
+
const icon = getStatusIcon(phase.status);
|
|
201
|
+
const isCurrent = phase.index === plan.currentPhaseIndex;
|
|
202
|
+
const marker = isCurrent ? "โ " : " ";
|
|
203
|
+
output += `${marker}${icon} **Phase ${phase.index + 1}: ${phase.name}**\n`;
|
|
204
|
+
output += ` ${phase.description}\n`;
|
|
205
|
+
if (phase.objectives.length > 0) {
|
|
206
|
+
output += " Objectives:\n";
|
|
207
|
+
for (const obj of phase.objectives.slice(0, 3)) {
|
|
208
|
+
output += ` โข ${obj}\n`;
|
|
209
|
+
}
|
|
210
|
+
if (phase.objectives.length > 3) {
|
|
211
|
+
output += ` ...and ${phase.objectives.length - 3} more\n`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (phase.toolsRequired.length > 0) {
|
|
215
|
+
output += ` Tools: ${phase.toolsRequired.join(", ")}\n`;
|
|
216
|
+
}
|
|
217
|
+
if (phase.duration) {
|
|
218
|
+
output += ` Duration: ${formatDuration(phase.duration)}\n`;
|
|
219
|
+
}
|
|
220
|
+
if (phase.error) {
|
|
221
|
+
output += ` Error: ${phase.error}\n`;
|
|
222
|
+
}
|
|
223
|
+
output += "\n";
|
|
224
|
+
}
|
|
225
|
+
return { success: true, output };
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
output: `Failed to show phases: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Pause current plan execution
|
|
236
|
+
*/
|
|
237
|
+
export async function handlePauseCommand() {
|
|
238
|
+
try {
|
|
239
|
+
const planner = getTaskPlanner();
|
|
240
|
+
const plan = planner.getCurrentPlan();
|
|
241
|
+
if (!plan) {
|
|
242
|
+
return {
|
|
243
|
+
success: false,
|
|
244
|
+
output: "No active plan to pause.",
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
await planner.pausePlan();
|
|
248
|
+
return {
|
|
249
|
+
success: true,
|
|
250
|
+
output: "Plan execution paused. Use /resume to continue.",
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
output: `Failed to pause: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Resume paused plan
|
|
262
|
+
* Note: This marks the plan as ready to resume. Actual execution
|
|
263
|
+
* requires the LLMAgent to process it with a phase executor.
|
|
264
|
+
*/
|
|
265
|
+
export async function handleResumeCommand(planId) {
|
|
266
|
+
try {
|
|
267
|
+
const planner = getTaskPlanner();
|
|
268
|
+
const storage = getPlanStorage();
|
|
269
|
+
// Determine which plan to resume
|
|
270
|
+
let targetPlanId = planId;
|
|
271
|
+
if (!targetPlanId) {
|
|
272
|
+
const currentPlan = planner.getCurrentPlan();
|
|
273
|
+
if (currentPlan) {
|
|
274
|
+
targetPlanId = currentPlan.id;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (!targetPlanId) {
|
|
278
|
+
return {
|
|
279
|
+
success: false,
|
|
280
|
+
output: "No plan specified and no current plan. Use /plans to see available plans.",
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
// Load the plan to check its status
|
|
284
|
+
const plan = await storage.loadPlan(targetPlanId);
|
|
285
|
+
if (!plan) {
|
|
286
|
+
return { success: false, output: `Plan not found: ${targetPlanId}` };
|
|
287
|
+
}
|
|
288
|
+
// Check if plan can be resumed
|
|
289
|
+
if (plan.status !== PlanStatus.PAUSED) {
|
|
290
|
+
return {
|
|
291
|
+
success: false,
|
|
292
|
+
output: `Plan ${targetPlanId} is not paused (status: ${plan.status})`,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
// Mark plan ready for resume - actual execution happens when user sends next message
|
|
296
|
+
return {
|
|
297
|
+
success: true,
|
|
298
|
+
output: `Plan ${targetPlanId} is ready to resume from phase ${plan.currentPhaseIndex + 1}.\n\nSend your next message to continue execution.`,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
return {
|
|
303
|
+
success: false,
|
|
304
|
+
output: `Failed to check plan: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Skip current phase
|
|
310
|
+
*/
|
|
311
|
+
export async function handleSkipPhaseCommand() {
|
|
312
|
+
try {
|
|
313
|
+
const planner = getTaskPlanner();
|
|
314
|
+
const plan = planner.getCurrentPlan();
|
|
315
|
+
if (!plan) {
|
|
316
|
+
return { success: false, output: "No active plan." };
|
|
317
|
+
}
|
|
318
|
+
const currentPhase = plan.phases[plan.currentPhaseIndex];
|
|
319
|
+
if (!currentPhase) {
|
|
320
|
+
return { success: false, output: "No current phase to skip." };
|
|
321
|
+
}
|
|
322
|
+
await planner.skipPhase(plan.id, currentPhase.id);
|
|
323
|
+
return {
|
|
324
|
+
success: true,
|
|
325
|
+
output: `Skipped phase: ${currentPhase.name}`,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
return {
|
|
330
|
+
success: false,
|
|
331
|
+
output: `Failed to skip phase: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Abandon current plan
|
|
337
|
+
*/
|
|
338
|
+
export async function handleAbandonCommand() {
|
|
339
|
+
try {
|
|
340
|
+
const planner = getTaskPlanner();
|
|
341
|
+
const plan = planner.getCurrentPlan();
|
|
342
|
+
if (!plan) {
|
|
343
|
+
return {
|
|
344
|
+
success: false,
|
|
345
|
+
output: "No active plan to abandon.",
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
await planner.abandonPlan(plan.id);
|
|
349
|
+
return {
|
|
350
|
+
success: true,
|
|
351
|
+
output: "Plan abandoned. All pending phases have been cancelled.",
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
catch (error) {
|
|
355
|
+
return {
|
|
356
|
+
success: false,
|
|
357
|
+
output: `Failed to abandon plan: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* List resumable plans
|
|
363
|
+
*/
|
|
364
|
+
export async function handleResumableCommand() {
|
|
365
|
+
try {
|
|
366
|
+
const storage = getPlanStorage();
|
|
367
|
+
const plans = await storage.listResumablePlans();
|
|
368
|
+
if (plans.length === 0) {
|
|
369
|
+
return { success: true, output: "No resumable plans found." };
|
|
370
|
+
}
|
|
371
|
+
let output = "**Resumable Plans:**\n\n";
|
|
372
|
+
for (const plan of plans) {
|
|
373
|
+
output += formatPlanSummaryBrief(plan);
|
|
374
|
+
output += ` Use: /resume ${plan.id}\n\n`;
|
|
375
|
+
}
|
|
376
|
+
return { success: true, output };
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
return {
|
|
380
|
+
success: false,
|
|
381
|
+
output: `Failed to list resumable plans: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewind Command
|
|
3
|
+
*
|
|
4
|
+
* Allows users to rewind to a previous checkpoint, restoring both
|
|
5
|
+
* file state and conversation history.
|
|
6
|
+
*/
|
|
7
|
+
import type { LLMAgent } from '../agent/llm-agent.js';
|
|
8
|
+
/**
|
|
9
|
+
* Handle /rewind command
|
|
10
|
+
*/
|
|
11
|
+
export declare function handleRewindCommand(agent: LLMAgent): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* List checkpoints (for /checkpoints command)
|
|
14
|
+
*/
|
|
15
|
+
export declare function handleCheckpointsCommand(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Clean old checkpoints (for /checkpoint-clean command)
|
|
18
|
+
*/
|
|
19
|
+
export declare function handleCheckpointCleanCommand(): Promise<void>;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rewind Command
|
|
3
|
+
*
|
|
4
|
+
* Allows users to rewind to a previous checkpoint, restoring both
|
|
5
|
+
* file state and conversation history.
|
|
6
|
+
*/
|
|
7
|
+
import { getCheckpointManager } from '../checkpoint/index.js';
|
|
8
|
+
import * as readline from 'readline';
|
|
9
|
+
/**
|
|
10
|
+
* Format timestamp as relative time (e.g., "5 minutes ago")
|
|
11
|
+
*/
|
|
12
|
+
function formatTimeAgo(date) {
|
|
13
|
+
const now = new Date();
|
|
14
|
+
const seconds = Math.floor((now.getTime() - date.getTime()) / 1000);
|
|
15
|
+
if (seconds < 60) {
|
|
16
|
+
return `${seconds} second${seconds !== 1 ? 's' : ''} ago`;
|
|
17
|
+
}
|
|
18
|
+
const minutes = Math.floor(seconds / 60);
|
|
19
|
+
if (minutes < 60) {
|
|
20
|
+
return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
|
|
21
|
+
}
|
|
22
|
+
const hours = Math.floor(minutes / 60);
|
|
23
|
+
if (hours < 24) {
|
|
24
|
+
return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
|
|
25
|
+
}
|
|
26
|
+
const days = Math.floor(hours / 24);
|
|
27
|
+
if (days < 30) {
|
|
28
|
+
return `${days} day${days !== 1 ? 's' : ''} ago`;
|
|
29
|
+
}
|
|
30
|
+
const months = Math.floor(days / 30);
|
|
31
|
+
return `${months} month${months !== 1 ? 's' : ''} ago`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prompt user for input
|
|
35
|
+
*/
|
|
36
|
+
async function promptUser(question) {
|
|
37
|
+
const rl = readline.createInterface({
|
|
38
|
+
input: process.stdin,
|
|
39
|
+
output: process.stdout,
|
|
40
|
+
});
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
rl.question(question, (answer) => {
|
|
43
|
+
rl.close();
|
|
44
|
+
resolve(answer.trim());
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Display checkpoint diff preview
|
|
50
|
+
*/
|
|
51
|
+
async function previewCheckpoint(checkpointId) {
|
|
52
|
+
const manager = getCheckpointManager();
|
|
53
|
+
const checkpoint = await manager.getCheckpoint(checkpointId);
|
|
54
|
+
if (!checkpoint) {
|
|
55
|
+
console.log('โ Checkpoint not found');
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log('\n๐ Preview of changes:');
|
|
59
|
+
console.log('โ'.repeat(60));
|
|
60
|
+
for (const file of checkpoint.files) {
|
|
61
|
+
console.log(`\nFile: ${file.path}`);
|
|
62
|
+
console.log(`Size: ${file.size} bytes`);
|
|
63
|
+
console.log(`Hash: ${file.hash.substring(0, 12)}...`);
|
|
64
|
+
// Show first/last few lines of content
|
|
65
|
+
const lines = file.content.split('\n');
|
|
66
|
+
const preview = lines.length > 10
|
|
67
|
+
? [...lines.slice(0, 5), '...', ...lines.slice(-5)]
|
|
68
|
+
: lines;
|
|
69
|
+
console.log('\nContent preview:');
|
|
70
|
+
preview.forEach((line, i) => {
|
|
71
|
+
if (line === '...') {
|
|
72
|
+
console.log(' ...');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const lineNum = i < 5 ? i + 1 : lines.length - (preview.length - i) + 1;
|
|
76
|
+
console.log(` ${lineNum}: ${line.substring(0, 80)}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
console.log('\nโ'.repeat(60));
|
|
81
|
+
console.log(`Conversation state: ${checkpoint.conversationState.length} messages`);
|
|
82
|
+
console.log(`Metadata: model=${checkpoint.metadata.model}, triggeredBy=${checkpoint.metadata.triggeredBy}`);
|
|
83
|
+
console.log('โ'.repeat(60));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Handle /rewind command
|
|
87
|
+
*/
|
|
88
|
+
export async function handleRewindCommand(agent) {
|
|
89
|
+
try {
|
|
90
|
+
const manager = getCheckpointManager();
|
|
91
|
+
const checkpoints = await manager.listCheckpoints({ limit: 20 });
|
|
92
|
+
if (checkpoints.length === 0) {
|
|
93
|
+
console.log('\n๐ No checkpoints available');
|
|
94
|
+
console.log('\nCheckpoints are created automatically before file modifications.');
|
|
95
|
+
console.log('Make some changes to your code and checkpoints will be created.');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Display available checkpoints
|
|
99
|
+
console.log('\n๐ Available Checkpoints (last 20):');
|
|
100
|
+
console.log('โ'.repeat(60));
|
|
101
|
+
checkpoints.forEach((cp, i) => {
|
|
102
|
+
const timeAgo = formatTimeAgo(cp.timestamp);
|
|
103
|
+
const filesStr = cp.filesChanged.length === 1
|
|
104
|
+
? cp.filesChanged[0]
|
|
105
|
+
: `${cp.filesChanged.length} files`;
|
|
106
|
+
console.log(`${i + 1}. ${cp.description}`);
|
|
107
|
+
console.log(` Time: ${timeAgo}`);
|
|
108
|
+
console.log(` Files: ${filesStr}`);
|
|
109
|
+
console.log(` Size: ${(cp.size / 1024).toFixed(2)} KB${cp.compressed ? ' (compressed)' : ''}`);
|
|
110
|
+
console.log('');
|
|
111
|
+
});
|
|
112
|
+
console.log('โ'.repeat(60));
|
|
113
|
+
// Get user selection
|
|
114
|
+
const selection = await promptUser('\nSelect checkpoint number (or \'q\' to quit): ');
|
|
115
|
+
if (selection.toLowerCase() === 'q' || selection === '') {
|
|
116
|
+
console.log('Cancelled.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const selectedIndex = parseInt(selection, 10) - 1;
|
|
120
|
+
if (isNaN(selectedIndex) || selectedIndex < 0 || selectedIndex >= checkpoints.length) {
|
|
121
|
+
console.log('โ Invalid selection');
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const selectedCheckpoint = checkpoints[selectedIndex];
|
|
125
|
+
// Show preview
|
|
126
|
+
await previewCheckpoint(selectedCheckpoint.id);
|
|
127
|
+
// Confirm
|
|
128
|
+
const confirm = await promptUser('\nโ ๏ธ This will restore files and rewind conversation. Continue? (y/N): ');
|
|
129
|
+
if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
|
|
130
|
+
console.log('Cancelled.');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// Apply checkpoint
|
|
134
|
+
console.log('\n๐ Applying checkpoint...');
|
|
135
|
+
const result = await manager.applyCheckpoint(selectedCheckpoint.id);
|
|
136
|
+
if (result.success) {
|
|
137
|
+
console.log(`\nโ
Successfully rewound to: ${selectedCheckpoint.description}`);
|
|
138
|
+
console.log(`\n๐ Files restored (${result.filesRestored.length}):`);
|
|
139
|
+
result.filesRestored.forEach(file => {
|
|
140
|
+
console.log(` โ ${file}`);
|
|
141
|
+
});
|
|
142
|
+
if (result.filesFailed.length > 0) {
|
|
143
|
+
console.log(`\nโ ๏ธ Files failed to restore (${result.filesFailed.length}):`);
|
|
144
|
+
result.filesFailed.forEach(file => {
|
|
145
|
+
console.log(` โ ${file}`);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Rewind conversation
|
|
149
|
+
const rewindResult = await agent.rewindConversation(selectedCheckpoint.id);
|
|
150
|
+
if (rewindResult.success) {
|
|
151
|
+
console.log(`\n๐ฌ Conversation rewound successfully`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(`\nโ ๏ธ Failed to rewind conversation: ${rewindResult.error}`);
|
|
155
|
+
}
|
|
156
|
+
console.log('\nโจ Rewind complete!');
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
console.log(`\nโ Failed to apply checkpoint: ${result.error}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
console.error('\nโ Error during rewind:', error);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* List checkpoints (for /checkpoints command)
|
|
168
|
+
*/
|
|
169
|
+
export async function handleCheckpointsCommand() {
|
|
170
|
+
try {
|
|
171
|
+
const manager = getCheckpointManager();
|
|
172
|
+
const stats = await manager.getStats();
|
|
173
|
+
console.log('\n๐ Checkpoint Statistics:');
|
|
174
|
+
console.log('โ'.repeat(60));
|
|
175
|
+
console.log(`Total checkpoints: ${stats.totalCount}`);
|
|
176
|
+
console.log(`Total storage: ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB`);
|
|
177
|
+
console.log(`Compressed: ${stats.compressedCount}`);
|
|
178
|
+
if (stats.oldestDate) {
|
|
179
|
+
console.log(`Oldest: ${stats.oldestDate.toLocaleDateString()}`);
|
|
180
|
+
}
|
|
181
|
+
if (stats.newestDate) {
|
|
182
|
+
console.log(`Newest: ${stats.newestDate.toLocaleDateString()}`);
|
|
183
|
+
}
|
|
184
|
+
const checkpoints = await manager.listCheckpoints({ limit: 10 });
|
|
185
|
+
if (checkpoints.length > 0) {
|
|
186
|
+
console.log('\n๐ Recent Checkpoints:');
|
|
187
|
+
console.log('โ'.repeat(60));
|
|
188
|
+
checkpoints.forEach((cp, i) => {
|
|
189
|
+
const timeAgo = formatTimeAgo(cp.timestamp);
|
|
190
|
+
console.log(`${i + 1}. ${cp.description} (${timeAgo})`);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
console.log('โ'.repeat(60));
|
|
194
|
+
console.log('\nUse /rewind to restore a checkpoint');
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.error('โ Error listing checkpoints:', error);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Clean old checkpoints (for /checkpoint-clean command)
|
|
202
|
+
*/
|
|
203
|
+
export async function handleCheckpointCleanCommand() {
|
|
204
|
+
try {
|
|
205
|
+
const manager = getCheckpointManager();
|
|
206
|
+
console.log('\n๐งน Cleaning old checkpoints...');
|
|
207
|
+
// Compress old checkpoints
|
|
208
|
+
const compressed = await manager.compressOldCheckpoints();
|
|
209
|
+
console.log(`โ Compressed ${compressed} old checkpoints`);
|
|
210
|
+
// Prune very old checkpoints
|
|
211
|
+
const pruned = await manager.pruneOldCheckpoints();
|
|
212
|
+
console.log(`โ Pruned ${pruned} very old checkpoints`);
|
|
213
|
+
const stats = await manager.getStats();
|
|
214
|
+
console.log(`\n๐ Storage after cleanup: ${(stats.totalSize / 1024 / 1024).toFixed(2)} MB`);
|
|
215
|
+
console.log('\nโจ Cleanup complete!');
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error('โ Error cleaning checkpoints:', error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=rewind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewind.js","sourceRoot":"","sources":["../../src/commands/rewind.ts"],"names":[],"mappings":"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"}
|