@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,98 @@
1
+ /**
2
+ * Plan Storage Module
3
+ *
4
+ * Handles persistence and retrieval of execution plans.
5
+ * Plans are stored in ~/.ax-cli/plans/{plan-id}/
6
+ */
7
+ import { TaskPlan, SavedPlanState, PlanSummary } from "./types.js";
8
+ export declare class PlanStorage {
9
+ private plansDir;
10
+ constructor(plansDir?: string);
11
+ /**
12
+ * Ensure the plans directory exists
13
+ */
14
+ private ensureDirectory;
15
+ /**
16
+ * Get the directory path for a specific plan
17
+ */
18
+ private getPlanDir;
19
+ /**
20
+ * Save a plan to disk
21
+ */
22
+ savePlan(plan: TaskPlan): Promise<string>;
23
+ /**
24
+ * Load a plan from disk
25
+ */
26
+ loadPlan(planId: string): Promise<TaskPlan | null>;
27
+ /**
28
+ * Save plan state (for pause/resume)
29
+ */
30
+ saveState(plan: TaskPlan, reason: SavedPlanState["saveReason"], context?: {
31
+ conversationContext?: unknown[];
32
+ trackedFiles?: Array<{
33
+ path: string;
34
+ hash: string;
35
+ }>;
36
+ }): Promise<void>;
37
+ /**
38
+ * Load plan state
39
+ */
40
+ loadState(planId: string): Promise<SavedPlanState | null>;
41
+ /**
42
+ * List all saved plans
43
+ */
44
+ listPlans(): Promise<PlanSummary[]>;
45
+ /**
46
+ * List resumable plans (paused or failed)
47
+ */
48
+ listResumablePlans(): Promise<PlanSummary[]>;
49
+ /**
50
+ * Delete a plan
51
+ */
52
+ deletePlan(planId: string): Promise<boolean>;
53
+ /**
54
+ * Clean up old plans (older than retention period)
55
+ */
56
+ cleanupOldPlans(retentionDays?: number): Promise<number>;
57
+ /**
58
+ * Check if a plan exists
59
+ */
60
+ planExists(planId: string): boolean;
61
+ /**
62
+ * Get storage stats
63
+ */
64
+ getStorageStats(): Promise<{
65
+ totalPlans: number;
66
+ resumablePlans: number;
67
+ completedPlans: number;
68
+ totalSizeBytes: number;
69
+ }>;
70
+ /**
71
+ * Get directory size recursively
72
+ */
73
+ private getDirectorySize;
74
+ /**
75
+ * Serialize plan for JSON storage (convert Dates to ISO strings)
76
+ */
77
+ private serializePlan;
78
+ /**
79
+ * Deserialize plan from JSON storage (convert ISO strings to Dates)
80
+ */
81
+ private deserializePlan;
82
+ /**
83
+ * Serialize state for JSON storage
84
+ */
85
+ private serializeState;
86
+ /**
87
+ * Deserialize state from JSON storage
88
+ */
89
+ private deserializeState;
90
+ }
91
+ /**
92
+ * Get the singleton PlanStorage instance
93
+ */
94
+ export declare function getPlanStorage(): PlanStorage;
95
+ /**
96
+ * Reset the singleton (for testing)
97
+ */
98
+ export declare function resetPlanStorage(): void;
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Plan Storage Module
3
+ *
4
+ * Handles persistence and retrieval of execution plans.
5
+ * Plans are stored in ~/.ax-cli/plans/{plan-id}/
6
+ */
7
+ import * as fs from "fs";
8
+ import * as path from "path";
9
+ import * as os from "os";
10
+ import { PlanStatus, TaskPlanSchema, } from "./types.js";
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ const PLANS_DIR = path.join(os.homedir(), ".ax-cli", "plans");
15
+ const PLAN_FILE = "plan.json";
16
+ const STATE_FILE = "state.json";
17
+ const PLAN_RETENTION_DAYS = 30;
18
+ // ============================================================================
19
+ // Plan Storage Class
20
+ // ============================================================================
21
+ export class PlanStorage {
22
+ plansDir;
23
+ constructor(plansDir) {
24
+ this.plansDir = plansDir || PLANS_DIR;
25
+ this.ensureDirectory();
26
+ }
27
+ /**
28
+ * Ensure the plans directory exists
29
+ */
30
+ ensureDirectory() {
31
+ if (!fs.existsSync(this.plansDir)) {
32
+ fs.mkdirSync(this.plansDir, { recursive: true });
33
+ }
34
+ }
35
+ /**
36
+ * Get the directory path for a specific plan
37
+ */
38
+ getPlanDir(planId) {
39
+ return path.join(this.plansDir, planId);
40
+ }
41
+ /**
42
+ * Save a plan to disk
43
+ */
44
+ async savePlan(plan) {
45
+ const planDir = this.getPlanDir(plan.id);
46
+ // Create plan directory
47
+ if (!fs.existsSync(planDir)) {
48
+ fs.mkdirSync(planDir, { recursive: true });
49
+ }
50
+ // Update timestamp
51
+ plan.updatedAt = new Date();
52
+ // Serialize dates properly
53
+ const serialized = this.serializePlan(plan);
54
+ // Write plan file
55
+ const planPath = path.join(planDir, PLAN_FILE);
56
+ fs.writeFileSync(planPath, JSON.stringify(serialized, null, 2), "utf-8");
57
+ return planDir;
58
+ }
59
+ /**
60
+ * Load a plan from disk
61
+ */
62
+ async loadPlan(planId) {
63
+ const planPath = path.join(this.getPlanDir(planId), PLAN_FILE);
64
+ if (!fs.existsSync(planPath)) {
65
+ return null;
66
+ }
67
+ try {
68
+ const data = fs.readFileSync(planPath, "utf-8");
69
+ const parsed = JSON.parse(data);
70
+ const plan = this.deserializePlan(parsed);
71
+ // Validate with Zod schema
72
+ const result = TaskPlanSchema.safeParse(plan);
73
+ if (!result.success) {
74
+ console.error(`Invalid plan format for ${planId}:`, result.error);
75
+ return null;
76
+ }
77
+ return plan;
78
+ }
79
+ catch (error) {
80
+ console.error(`Failed to load plan ${planId}:`, error);
81
+ return null;
82
+ }
83
+ }
84
+ /**
85
+ * Save plan state (for pause/resume)
86
+ */
87
+ async saveState(plan, reason, context) {
88
+ const planDir = this.getPlanDir(plan.id);
89
+ // Ensure plan directory exists
90
+ if (!fs.existsSync(planDir)) {
91
+ fs.mkdirSync(planDir, { recursive: true });
92
+ }
93
+ const state = {
94
+ plan,
95
+ savedAt: new Date(),
96
+ saveReason: reason,
97
+ conversationContext: context?.conversationContext,
98
+ trackedFiles: context?.trackedFiles,
99
+ };
100
+ const statePath = path.join(planDir, STATE_FILE);
101
+ const serialized = this.serializeState(state);
102
+ fs.writeFileSync(statePath, JSON.stringify(serialized, null, 2), "utf-8");
103
+ // Also update the plan file
104
+ await this.savePlan(plan);
105
+ }
106
+ /**
107
+ * Load plan state
108
+ */
109
+ async loadState(planId) {
110
+ const statePath = path.join(this.getPlanDir(planId), STATE_FILE);
111
+ if (!fs.existsSync(statePath)) {
112
+ return null;
113
+ }
114
+ try {
115
+ const data = fs.readFileSync(statePath, "utf-8");
116
+ const parsed = JSON.parse(data);
117
+ return this.deserializeState(parsed);
118
+ }
119
+ catch (error) {
120
+ console.error(`Failed to load state for ${planId}:`, error);
121
+ return null;
122
+ }
123
+ }
124
+ /**
125
+ * List all saved plans
126
+ */
127
+ async listPlans() {
128
+ if (!fs.existsSync(this.plansDir)) {
129
+ return [];
130
+ }
131
+ const entries = fs.readdirSync(this.plansDir, { withFileTypes: true });
132
+ const summaries = [];
133
+ for (const entry of entries) {
134
+ if (!entry.isDirectory())
135
+ continue;
136
+ const plan = await this.loadPlan(entry.name);
137
+ if (plan) {
138
+ summaries.push({
139
+ id: plan.id,
140
+ originalPrompt: plan.originalPrompt,
141
+ status: plan.status,
142
+ totalPhases: plan.phases.length,
143
+ completedPhases: plan.phasesCompleted,
144
+ createdAt: plan.createdAt,
145
+ updatedAt: plan.updatedAt,
146
+ });
147
+ }
148
+ }
149
+ // Sort by updatedAt descending (most recent first)
150
+ summaries.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());
151
+ return summaries;
152
+ }
153
+ /**
154
+ * List resumable plans (paused or failed)
155
+ */
156
+ async listResumablePlans() {
157
+ const allPlans = await this.listPlans();
158
+ return allPlans.filter((p) => p.status === PlanStatus.PAUSED ||
159
+ p.status === PlanStatus.FAILED ||
160
+ p.status === PlanStatus.CREATED ||
161
+ p.status === PlanStatus.APPROVED);
162
+ }
163
+ /**
164
+ * Delete a plan
165
+ */
166
+ async deletePlan(planId) {
167
+ const planDir = this.getPlanDir(planId);
168
+ if (!fs.existsSync(planDir)) {
169
+ return false;
170
+ }
171
+ try {
172
+ fs.rmSync(planDir, { recursive: true, force: true });
173
+ return true;
174
+ }
175
+ catch (error) {
176
+ console.error(`Failed to delete plan ${planId}:`, error);
177
+ return false;
178
+ }
179
+ }
180
+ /**
181
+ * Clean up old plans (older than retention period)
182
+ */
183
+ async cleanupOldPlans(retentionDays = PLAN_RETENTION_DAYS) {
184
+ const allPlans = await this.listPlans();
185
+ const cutoffDate = new Date();
186
+ cutoffDate.setDate(cutoffDate.getDate() - retentionDays);
187
+ let deletedCount = 0;
188
+ for (const plan of allPlans) {
189
+ // Only delete completed or abandoned plans
190
+ if ((plan.status === PlanStatus.COMPLETED ||
191
+ plan.status === PlanStatus.ABANDONED) &&
192
+ plan.updatedAt < cutoffDate) {
193
+ const deleted = await this.deletePlan(plan.id);
194
+ if (deleted)
195
+ deletedCount++;
196
+ }
197
+ }
198
+ return deletedCount;
199
+ }
200
+ /**
201
+ * Check if a plan exists
202
+ */
203
+ planExists(planId) {
204
+ return fs.existsSync(path.join(this.getPlanDir(planId), PLAN_FILE));
205
+ }
206
+ /**
207
+ * Get storage stats
208
+ */
209
+ async getStorageStats() {
210
+ const allPlans = await this.listPlans();
211
+ const resumable = allPlans.filter((p) => p.status === PlanStatus.PAUSED ||
212
+ p.status === PlanStatus.FAILED ||
213
+ p.status === PlanStatus.CREATED);
214
+ const completed = allPlans.filter((p) => p.status === PlanStatus.COMPLETED);
215
+ // Calculate total size
216
+ let totalSize = 0;
217
+ if (fs.existsSync(this.plansDir)) {
218
+ const entries = fs.readdirSync(this.plansDir, { withFileTypes: true });
219
+ for (const entry of entries) {
220
+ if (entry.isDirectory()) {
221
+ const planDir = path.join(this.plansDir, entry.name);
222
+ totalSize += this.getDirectorySize(planDir);
223
+ }
224
+ }
225
+ }
226
+ return {
227
+ totalPlans: allPlans.length,
228
+ resumablePlans: resumable.length,
229
+ completedPlans: completed.length,
230
+ totalSizeBytes: totalSize,
231
+ };
232
+ }
233
+ /**
234
+ * Get directory size recursively
235
+ */
236
+ getDirectorySize(dirPath) {
237
+ let size = 0;
238
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
239
+ for (const entry of entries) {
240
+ const entryPath = path.join(dirPath, entry.name);
241
+ if (entry.isDirectory()) {
242
+ size += this.getDirectorySize(entryPath);
243
+ }
244
+ else {
245
+ size += fs.statSync(entryPath).size;
246
+ }
247
+ }
248
+ return size;
249
+ }
250
+ // ============================================================================
251
+ // Serialization Helpers
252
+ // ============================================================================
253
+ /**
254
+ * Serialize plan for JSON storage (convert Dates to ISO strings)
255
+ */
256
+ serializePlan(plan) {
257
+ return {
258
+ ...plan,
259
+ createdAt: plan.createdAt.toISOString(),
260
+ updatedAt: plan.updatedAt.toISOString(),
261
+ phases: plan.phases.map((phase) => ({
262
+ ...phase,
263
+ startedAt: phase.startedAt?.toISOString(),
264
+ completedAt: phase.completedAt?.toISOString(),
265
+ })),
266
+ };
267
+ }
268
+ /**
269
+ * Deserialize plan from JSON storage (convert ISO strings to Dates)
270
+ */
271
+ deserializePlan(data) {
272
+ const obj = data;
273
+ return {
274
+ ...obj,
275
+ createdAt: new Date(obj.createdAt),
276
+ updatedAt: new Date(obj.updatedAt),
277
+ phases: obj.phases.map((phase) => ({
278
+ ...phase,
279
+ startedAt: phase.startedAt ? new Date(phase.startedAt) : undefined,
280
+ completedAt: phase.completedAt ? new Date(phase.completedAt) : undefined,
281
+ })),
282
+ };
283
+ }
284
+ /**
285
+ * Serialize state for JSON storage
286
+ */
287
+ serializeState(state) {
288
+ return {
289
+ ...state,
290
+ plan: this.serializePlan(state.plan),
291
+ savedAt: state.savedAt.toISOString(),
292
+ };
293
+ }
294
+ /**
295
+ * Deserialize state from JSON storage
296
+ */
297
+ deserializeState(data) {
298
+ const obj = data;
299
+ return {
300
+ ...obj,
301
+ plan: this.deserializePlan(obj.plan),
302
+ savedAt: new Date(obj.savedAt),
303
+ };
304
+ }
305
+ }
306
+ // ============================================================================
307
+ // Singleton Instance
308
+ // ============================================================================
309
+ let planStorageInstance = null;
310
+ /**
311
+ * Get the singleton PlanStorage instance
312
+ */
313
+ export function getPlanStorage() {
314
+ if (!planStorageInstance) {
315
+ planStorageInstance = new PlanStorage();
316
+ }
317
+ return planStorageInstance;
318
+ }
319
+ /**
320
+ * Reset the singleton (for testing)
321
+ */
322
+ export function resetPlanStorage() {
323
+ planStorageInstance = null;
324
+ }
325
+ //# sourceMappingURL=plan-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-storage.js","sourceRoot":"","sources":["../../src/planner/plan-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Planning Prompts
3
+ *
4
+ * System prompts for LLM-based task decomposition.
5
+ */
6
+ export declare const PLANNING_SYSTEM_PROMPT = "You are a task planning assistant for a CLI coding tool called AX-CLI.\nYour job is to analyze user requests and create structured execution plans.\n\nWhen given a complex coding task, you should:\n1. Understand the user's goal\n2. Break it down into 2-5 logical phases\n3. Identify dependencies between phases\n4. Assess risk levels for each phase\n5. Determine which phases can run in parallel\n\nGuidelines for creating good plans:\n\nPHASE DECOMPOSITION:\n- Each phase should be independently executable\n- Phases should have clear, measurable objectives\n- Keep phases focused (1-3 objectives max per phase)\n- Order phases logically (analysis \u2192 design \u2192 implementation \u2192 testing \u2192 documentation)\n\nDEPENDENCIES:\n- Mark dependencies between phases (e.g., testing depends on implementation)\n- Identify phases that can run in parallel (e.g., testing and documentation)\n- Avoid circular dependencies\n\nRISK ASSESSMENT:\n- low: Read-only operations, non-destructive changes\n- medium: File modifications, adding new code\n- high: Deleting files, modifying critical configs, database changes\n\nTOOL IDENTIFICATION:\nCommon tools: view_file, str_replace_editor, bash, search, test\n\nOUTPUT FORMAT:\nYou must respond with valid JSON only. No explanations outside the JSON.";
7
+ export declare function buildPlanningPrompt(userRequest: string, context?: {
8
+ projectType?: string;
9
+ files?: string[];
10
+ recentHistory?: string[];
11
+ }): string;
12
+ export declare function buildPhaseExecutionPrompt(phase: {
13
+ name: string;
14
+ description: string;
15
+ objectives: string[];
16
+ toolsRequired: string[];
17
+ }, context?: {
18
+ originalRequest?: string;
19
+ previousPhases?: string[];
20
+ }): string;
21
+ export declare function buildPlanSummaryPrompt(results: Array<{
22
+ phaseName: string;
23
+ success: boolean;
24
+ output?: string;
25
+ }>): string;
26
+ /**
27
+ * Keywords that indicate a complex request
28
+ */
29
+ export declare const COMPLEX_KEYWORDS: string[];
30
+ /**
31
+ * Keywords that indicate a simple request
32
+ */
33
+ export declare const SIMPLE_KEYWORDS: string[];
34
+ /**
35
+ * Detect if a request is likely complex
36
+ */
37
+ export declare function isComplexRequest(request: string): boolean;
38
+ /**
39
+ * Estimate minimum phases based on request analysis
40
+ */
41
+ export declare function estimateMinPhases(request: string): number;