@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,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;
|