@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,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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"}