erosolar-cli 1.7.373 → 1.7.379
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/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
- package/dist/capabilities/agentSpawningCapability.js +29 -1
- package/dist/capabilities/agentSpawningCapability.js.map +1 -1
- package/dist/contracts/agent-schemas.json +105 -0
- package/dist/core/alphaZeroModular.d.ts +186 -0
- package/dist/core/alphaZeroModular.d.ts.map +1 -0
- package/dist/core/alphaZeroModular.js +755 -0
- package/dist/core/alphaZeroModular.js.map +1 -0
- package/dist/core/alphaZeroOrchestrator.d.ts +140 -0
- package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
- package/dist/core/alphaZeroOrchestrator.js +418 -0
- package/dist/core/alphaZeroOrchestrator.js.map +1 -0
- package/dist/core/checkpoint.d.ts +76 -0
- package/dist/core/checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint.js +278 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/claudeCodeFeatures.d.ts +64 -0
- package/dist/core/claudeCodeFeatures.d.ts.map +1 -0
- package/dist/core/claudeCodeFeatures.js +163 -0
- package/dist/core/claudeCodeFeatures.js.map +1 -0
- package/dist/core/costTracker.d.ts +87 -0
- package/dist/core/costTracker.d.ts.map +1 -0
- package/dist/core/costTracker.js +285 -0
- package/dist/core/costTracker.js.map +1 -0
- package/dist/core/failureRecovery.d.ts +122 -0
- package/dist/core/failureRecovery.d.ts.map +1 -0
- package/dist/core/failureRecovery.js +477 -0
- package/dist/core/failureRecovery.js.map +1 -0
- package/dist/core/intelligentTestFlows.d.ts +126 -0
- package/dist/core/intelligentTestFlows.d.ts.map +1 -0
- package/dist/core/intelligentTestFlows.js +678 -0
- package/dist/core/intelligentTestFlows.js.map +1 -0
- package/dist/core/learningPersistence.d.ts +145 -0
- package/dist/core/learningPersistence.d.ts.map +1 -0
- package/dist/core/learningPersistence.js +477 -0
- package/dist/core/learningPersistence.js.map +1 -0
- package/dist/core/memorySystem.d.ts +67 -0
- package/dist/core/memorySystem.d.ts.map +1 -0
- package/dist/core/memorySystem.js +334 -0
- package/dist/core/memorySystem.js.map +1 -0
- package/dist/core/outputStyles.d.ts +48 -0
- package/dist/core/outputStyles.d.ts.map +1 -0
- package/dist/core/outputStyles.js +270 -0
- package/dist/core/outputStyles.js.map +1 -0
- package/dist/core/selfEvolution.d.ts +155 -0
- package/dist/core/selfEvolution.d.ts.map +1 -0
- package/dist/core/selfEvolution.js +1000 -0
- package/dist/core/selfEvolution.js.map +1 -0
- package/dist/core/selfImprovement.d.ts +141 -0
- package/dist/core/selfImprovement.d.ts.map +1 -0
- package/dist/core/selfImprovement.js +700 -0
- package/dist/core/selfImprovement.js.map +1 -0
- package/dist/core/updateManager.d.ts +62 -0
- package/dist/core/updateManager.d.ts.map +1 -0
- package/dist/core/updateManager.js +266 -0
- package/dist/core/updateManager.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +67 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +1546 -3
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/keyboardShortcuts.d.ts +53 -0
- package/dist/shell/keyboardShortcuts.d.ts.map +1 -0
- package/dist/shell/keyboardShortcuts.js +163 -0
- package/dist/shell/keyboardShortcuts.js.map +1 -0
- package/dist/shell/terminalInput.d.ts +51 -1
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +223 -12
- package/dist/shell/terminalInput.js.map +1 -1
- package/dist/shell/terminalInputAdapter.d.ts +7 -1
- package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
- package/dist/shell/terminalInputAdapter.js +7 -0
- package/dist/shell/terminalInputAdapter.js.map +1 -1
- package/dist/shell/vimMode.d.ts +66 -0
- package/dist/shell/vimMode.d.ts.map +1 -0
- package/dist/shell/vimMode.js +434 -0
- package/dist/shell/vimMode.js.map +1 -0
- package/dist/subagents/parallelAgentManager.d.ts +99 -0
- package/dist/subagents/parallelAgentManager.d.ts.map +1 -0
- package/dist/subagents/parallelAgentManager.js +249 -0
- package/dist/subagents/parallelAgentManager.js.map +1 -0
- package/dist/subagents/taskRunner.d.ts +6 -1
- package/dist/subagents/taskRunner.d.ts.map +1 -1
- package/dist/subagents/taskRunner.js +57 -2
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/tools/planningTools.d.ts +9 -0
- package/dist/tools/planningTools.d.ts.map +1 -1
- package/dist/tools/planningTools.js +90 -0
- package/dist/tools/planningTools.js.map +1 -1
- package/dist/ui/display.d.ts +5 -0
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +14 -0
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/shortcutsHelp.d.ts.map +1 -1
- package/dist/ui/shortcutsHelp.js +43 -12
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/dist/ui/unified/layout.d.ts.map +1 -1
- package/dist/ui/unified/layout.js +9 -9
- package/dist/ui/unified/layout.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint System - Claude Code Style
|
|
3
|
+
*
|
|
4
|
+
* Automatic checkpointing before code changes with instant rewind capability.
|
|
5
|
+
* Saves both code state and conversation state for full restoration.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Automatic checkpoint creation before file modifications
|
|
9
|
+
* - Rewind to any previous checkpoint (code only, conversation only, or both)
|
|
10
|
+
* - Efficient diff-based storage to minimize disk usage
|
|
11
|
+
* - Integration with session management
|
|
12
|
+
*/
|
|
13
|
+
export interface FileSnapshot {
|
|
14
|
+
path: string;
|
|
15
|
+
content: string;
|
|
16
|
+
hash: string;
|
|
17
|
+
mtime: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ConversationSnapshot {
|
|
20
|
+
messages: Array<{
|
|
21
|
+
role: 'user' | 'assistant' | 'system';
|
|
22
|
+
content: string;
|
|
23
|
+
timestamp: number;
|
|
24
|
+
}>;
|
|
25
|
+
contextTokens: number;
|
|
26
|
+
}
|
|
27
|
+
export interface Checkpoint {
|
|
28
|
+
id: string;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
sessionId: string;
|
|
31
|
+
description: string;
|
|
32
|
+
trigger: 'auto' | 'manual' | 'pre-edit' | 'pre-write' | 'pre-delete';
|
|
33
|
+
files: FileSnapshot[];
|
|
34
|
+
conversation?: ConversationSnapshot;
|
|
35
|
+
metadata: {
|
|
36
|
+
toolName?: string;
|
|
37
|
+
filePath?: string;
|
|
38
|
+
changeType?: 'edit' | 'write' | 'delete';
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface RewindOptions {
|
|
42
|
+
mode: 'code-only' | 'conversation-only' | 'both';
|
|
43
|
+
checkpointId: string;
|
|
44
|
+
}
|
|
45
|
+
export interface CheckpointManager {
|
|
46
|
+
createCheckpoint(options: CreateCheckpointOptions): Promise<Checkpoint>;
|
|
47
|
+
getCheckpoints(sessionId: string): Checkpoint[];
|
|
48
|
+
getCheckpoint(id: string): Checkpoint | null;
|
|
49
|
+
rewind(options: RewindOptions): Promise<RewindResult>;
|
|
50
|
+
cleanupOldCheckpoints(): void;
|
|
51
|
+
}
|
|
52
|
+
export interface CreateCheckpointOptions {
|
|
53
|
+
sessionId: string;
|
|
54
|
+
description: string;
|
|
55
|
+
trigger: Checkpoint['trigger'];
|
|
56
|
+
files?: string[];
|
|
57
|
+
conversation?: ConversationSnapshot;
|
|
58
|
+
metadata?: Checkpoint['metadata'];
|
|
59
|
+
}
|
|
60
|
+
export interface RewindResult {
|
|
61
|
+
success: boolean;
|
|
62
|
+
checkpoint: Checkpoint;
|
|
63
|
+
restoredFiles: string[];
|
|
64
|
+
restoredConversation: boolean;
|
|
65
|
+
errors: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a checkpoint manager for a working directory
|
|
69
|
+
*/
|
|
70
|
+
export declare function createCheckpointManager(workingDir: string): CheckpointManager;
|
|
71
|
+
/**
|
|
72
|
+
* Format checkpoint for display
|
|
73
|
+
*/
|
|
74
|
+
export declare function formatCheckpointForDisplay(checkpoint: Checkpoint): string;
|
|
75
|
+
export declare function getCheckpointManager(workingDir?: string): CheckpointManager;
|
|
76
|
+
//# sourceMappingURL=checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../src/core/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;IACrE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,QAAQ,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,GAAG,mBAAmB,GAAG,MAAM,CAAC;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACxE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAChD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,qBAAqB,IAAI,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAwDD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CA+L7E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAkBzE;AAOD,wBAAgB,oBAAoB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAK3E"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkpoint System - Claude Code Style
|
|
3
|
+
*
|
|
4
|
+
* Automatic checkpointing before code changes with instant rewind capability.
|
|
5
|
+
* Saves both code state and conversation state for full restoration.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Automatic checkpoint creation before file modifications
|
|
9
|
+
* - Rewind to any previous checkpoint (code only, conversation only, or both)
|
|
10
|
+
* - Efficient diff-based storage to minimize disk usage
|
|
11
|
+
* - Integration with session management
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync, statSync } from 'node:fs';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { join, dirname, relative } from 'node:path';
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
const CHECKPOINT_DIR = join(homedir(), '.erosolar', 'checkpoints');
|
|
18
|
+
const MAX_CHECKPOINTS = 50; // Keep last 50 checkpoints per session
|
|
19
|
+
const MAX_CHECKPOINT_AGE_DAYS = 7;
|
|
20
|
+
/**
|
|
21
|
+
* Create a hash for file content
|
|
22
|
+
*/
|
|
23
|
+
function hashContent(content) {
|
|
24
|
+
return createHash('sha256').update(content).digest('hex').slice(0, 16);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a unique checkpoint ID
|
|
28
|
+
*/
|
|
29
|
+
function generateCheckpointId() {
|
|
30
|
+
const timestamp = Date.now().toString(36);
|
|
31
|
+
const random = Math.random().toString(36).slice(2, 8);
|
|
32
|
+
return `cp_${timestamp}_${random}`;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get session checkpoint directory
|
|
36
|
+
*/
|
|
37
|
+
function getSessionCheckpointDir(sessionId) {
|
|
38
|
+
const sanitized = sessionId.replace(/[^a-zA-Z0-9_-]/g, '_');
|
|
39
|
+
return join(CHECKPOINT_DIR, sanitized);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Read file content safely
|
|
43
|
+
*/
|
|
44
|
+
function readFileSafe(filePath) {
|
|
45
|
+
try {
|
|
46
|
+
if (!existsSync(filePath)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const stats = statSync(filePath);
|
|
50
|
+
const content = readFileSync(filePath, 'utf8');
|
|
51
|
+
return { content, mtime: stats.mtimeMs };
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Write file content safely with directory creation
|
|
59
|
+
*/
|
|
60
|
+
function writeFileSafe(filePath, content) {
|
|
61
|
+
try {
|
|
62
|
+
const dir = dirname(filePath);
|
|
63
|
+
mkdirSync(dir, { recursive: true });
|
|
64
|
+
writeFileSync(filePath, content, 'utf8');
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a checkpoint manager for a working directory
|
|
73
|
+
*/
|
|
74
|
+
export function createCheckpointManager(workingDir) {
|
|
75
|
+
// Ensure checkpoint directory exists
|
|
76
|
+
mkdirSync(CHECKPOINT_DIR, { recursive: true });
|
|
77
|
+
return {
|
|
78
|
+
async createCheckpoint(options) {
|
|
79
|
+
const checkpointId = generateCheckpointId();
|
|
80
|
+
const timestamp = Date.now();
|
|
81
|
+
// Snapshot specified files (or use metadata.filePath)
|
|
82
|
+
const filesToSnapshot = options.files ??
|
|
83
|
+
(options.metadata?.filePath ? [options.metadata.filePath] : []);
|
|
84
|
+
const fileSnapshots = [];
|
|
85
|
+
for (const filePath of filesToSnapshot) {
|
|
86
|
+
const fullPath = filePath.startsWith('/') ? filePath : join(workingDir, filePath);
|
|
87
|
+
const fileData = readFileSafe(fullPath);
|
|
88
|
+
if (fileData) {
|
|
89
|
+
fileSnapshots.push({
|
|
90
|
+
path: relative(workingDir, fullPath) || fullPath,
|
|
91
|
+
content: fileData.content,
|
|
92
|
+
hash: hashContent(fileData.content),
|
|
93
|
+
mtime: fileData.mtime,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const checkpoint = {
|
|
98
|
+
id: checkpointId,
|
|
99
|
+
timestamp,
|
|
100
|
+
sessionId: options.sessionId,
|
|
101
|
+
description: options.description,
|
|
102
|
+
trigger: options.trigger,
|
|
103
|
+
files: fileSnapshots,
|
|
104
|
+
conversation: options.conversation,
|
|
105
|
+
metadata: options.metadata ?? {},
|
|
106
|
+
};
|
|
107
|
+
// Save checkpoint
|
|
108
|
+
const sessionDir = getSessionCheckpointDir(options.sessionId);
|
|
109
|
+
mkdirSync(sessionDir, { recursive: true });
|
|
110
|
+
const checkpointPath = join(sessionDir, `${checkpointId}.json`);
|
|
111
|
+
writeFileSafe(checkpointPath, JSON.stringify(checkpoint, null, 2));
|
|
112
|
+
// Cleanup old checkpoints
|
|
113
|
+
this.cleanupOldCheckpoints();
|
|
114
|
+
return checkpoint;
|
|
115
|
+
},
|
|
116
|
+
getCheckpoints(sessionId) {
|
|
117
|
+
const sessionDir = getSessionCheckpointDir(sessionId);
|
|
118
|
+
if (!existsSync(sessionDir)) {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
const checkpoints = [];
|
|
122
|
+
try {
|
|
123
|
+
const files = readdirSync(sessionDir).filter(f => f.endsWith('.json'));
|
|
124
|
+
for (const file of files) {
|
|
125
|
+
try {
|
|
126
|
+
const content = readFileSync(join(sessionDir, file), 'utf8');
|
|
127
|
+
const checkpoint = JSON.parse(content);
|
|
128
|
+
checkpoints.push(checkpoint);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Skip invalid checkpoint files
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
// Sort by timestamp descending (newest first)
|
|
139
|
+
return checkpoints.sort((a, b) => b.timestamp - a.timestamp);
|
|
140
|
+
},
|
|
141
|
+
getCheckpoint(id) {
|
|
142
|
+
// Search all session directories for the checkpoint
|
|
143
|
+
if (!existsSync(CHECKPOINT_DIR)) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const sessions = readdirSync(CHECKPOINT_DIR);
|
|
148
|
+
for (const session of sessions) {
|
|
149
|
+
const checkpointPath = join(CHECKPOINT_DIR, session, `${id}.json`);
|
|
150
|
+
if (existsSync(checkpointPath)) {
|
|
151
|
+
const content = readFileSync(checkpointPath, 'utf8');
|
|
152
|
+
return JSON.parse(content);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return null;
|
|
160
|
+
},
|
|
161
|
+
async rewind(options) {
|
|
162
|
+
const checkpoint = this.getCheckpoint(options.checkpointId);
|
|
163
|
+
if (!checkpoint) {
|
|
164
|
+
return {
|
|
165
|
+
success: false,
|
|
166
|
+
checkpoint: {},
|
|
167
|
+
restoredFiles: [],
|
|
168
|
+
restoredConversation: false,
|
|
169
|
+
errors: [`Checkpoint not found: ${options.checkpointId}`],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
const errors = [];
|
|
173
|
+
const restoredFiles = [];
|
|
174
|
+
let restoredConversation = false;
|
|
175
|
+
// Restore files if requested
|
|
176
|
+
if (options.mode === 'code-only' || options.mode === 'both') {
|
|
177
|
+
for (const fileSnapshot of checkpoint.files) {
|
|
178
|
+
const fullPath = fileSnapshot.path.startsWith('/')
|
|
179
|
+
? fileSnapshot.path
|
|
180
|
+
: join(workingDir, fileSnapshot.path);
|
|
181
|
+
if (writeFileSafe(fullPath, fileSnapshot.content)) {
|
|
182
|
+
restoredFiles.push(fileSnapshot.path);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
errors.push(`Failed to restore: ${fileSnapshot.path}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Conversation restoration is handled by the caller (session manager)
|
|
190
|
+
if (options.mode === 'conversation-only' || options.mode === 'both') {
|
|
191
|
+
if (checkpoint.conversation) {
|
|
192
|
+
restoredConversation = true;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
success: errors.length === 0,
|
|
197
|
+
checkpoint,
|
|
198
|
+
restoredFiles,
|
|
199
|
+
restoredConversation,
|
|
200
|
+
errors,
|
|
201
|
+
};
|
|
202
|
+
},
|
|
203
|
+
cleanupOldCheckpoints() {
|
|
204
|
+
if (!existsSync(CHECKPOINT_DIR)) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const now = Date.now();
|
|
208
|
+
const maxAge = MAX_CHECKPOINT_AGE_DAYS * 24 * 60 * 60 * 1000;
|
|
209
|
+
try {
|
|
210
|
+
const sessions = readdirSync(CHECKPOINT_DIR);
|
|
211
|
+
for (const session of sessions) {
|
|
212
|
+
const sessionDir = join(CHECKPOINT_DIR, session);
|
|
213
|
+
const files = readdirSync(sessionDir)
|
|
214
|
+
.filter(f => f.endsWith('.json'))
|
|
215
|
+
.map(f => ({
|
|
216
|
+
name: f,
|
|
217
|
+
path: join(sessionDir, f),
|
|
218
|
+
mtime: statSync(join(sessionDir, f)).mtimeMs,
|
|
219
|
+
}))
|
|
220
|
+
.sort((a, b) => b.mtime - a.mtime);
|
|
221
|
+
// Remove old checkpoints beyond max count
|
|
222
|
+
for (let i = MAX_CHECKPOINTS; i < files.length; i++) {
|
|
223
|
+
try {
|
|
224
|
+
unlinkSync(files[i].path);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Ignore deletion errors
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Remove checkpoints older than max age
|
|
231
|
+
for (const file of files) {
|
|
232
|
+
if (now - file.mtime > maxAge) {
|
|
233
|
+
try {
|
|
234
|
+
unlinkSync(file.path);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// Ignore deletion errors
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
// Ignore cleanup errors
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Format checkpoint for display
|
|
251
|
+
*/
|
|
252
|
+
export function formatCheckpointForDisplay(checkpoint) {
|
|
253
|
+
const date = new Date(checkpoint.timestamp);
|
|
254
|
+
const timeStr = date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
|
|
255
|
+
const dateStr = date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });
|
|
256
|
+
const filesStr = checkpoint.files.length > 0
|
|
257
|
+
? `${checkpoint.files.length} file${checkpoint.files.length > 1 ? 's' : ''}`
|
|
258
|
+
: 'no files';
|
|
259
|
+
const triggerIcon = {
|
|
260
|
+
'auto': '⚙',
|
|
261
|
+
'manual': '📌',
|
|
262
|
+
'pre-edit': '✏️',
|
|
263
|
+
'pre-write': '📝',
|
|
264
|
+
'pre-delete': '🗑️',
|
|
265
|
+
}[checkpoint.trigger] || '•';
|
|
266
|
+
return `${triggerIcon} ${dateStr} ${timeStr} - ${checkpoint.description} (${filesStr})`;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Global checkpoint manager instance
|
|
270
|
+
*/
|
|
271
|
+
let globalCheckpointManager = null;
|
|
272
|
+
export function getCheckpointManager(workingDir) {
|
|
273
|
+
if (!globalCheckpointManager || workingDir) {
|
|
274
|
+
globalCheckpointManager = createCheckpointManager(workingDir ?? process.cwd());
|
|
275
|
+
}
|
|
276
|
+
return globalCheckpointManager;
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/core/checkpoint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Features - Unified Integration Module
|
|
3
|
+
*
|
|
4
|
+
* This module exports all Claude Code style features integrated into erosolar-cli.
|
|
5
|
+
* Use this as the main entry point for accessing the new capabilities.
|
|
6
|
+
*
|
|
7
|
+
* Features included:
|
|
8
|
+
* - Checkpointing/Rewind System
|
|
9
|
+
* - EROSOLAR.md Memory System
|
|
10
|
+
* - Output Styles
|
|
11
|
+
* - Cost Tracking
|
|
12
|
+
* - Update Manager
|
|
13
|
+
* - Vim Mode
|
|
14
|
+
* - Keyboard Shortcuts
|
|
15
|
+
*/
|
|
16
|
+
export * from './checkpoint.js';
|
|
17
|
+
export * from './memorySystem.js';
|
|
18
|
+
export * from './outputStyles.js';
|
|
19
|
+
export * from './costTracker.js';
|
|
20
|
+
export * from './updateManager.js';
|
|
21
|
+
import { type CheckpointManager } from './checkpoint.js';
|
|
22
|
+
import { type MemorySystem, type MemoryFile } from './memorySystem.js';
|
|
23
|
+
import { type CostTracker } from './costTracker.js';
|
|
24
|
+
import { type VersionInfo } from './updateManager.js';
|
|
25
|
+
/**
|
|
26
|
+
* Claude Code Feature State
|
|
27
|
+
*/
|
|
28
|
+
export interface ClaudeCodeState {
|
|
29
|
+
checkpointManager: CheckpointManager;
|
|
30
|
+
memorySystem: MemorySystem;
|
|
31
|
+
costTracker: CostTracker;
|
|
32
|
+
currentOutputStyle: string;
|
|
33
|
+
memory: MemoryFile[];
|
|
34
|
+
lastUpdateCheck: VersionInfo | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Initialize all Claude Code features
|
|
38
|
+
*/
|
|
39
|
+
export declare function initializeClaudeCodeFeatures(workingDir: string, sessionId?: string): Promise<ClaudeCodeState>;
|
|
40
|
+
/**
|
|
41
|
+
* Build system prompt additions from Claude Code features
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildSystemPromptAdditions(state: ClaudeCodeState, workingDir: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Feature availability check
|
|
46
|
+
*/
|
|
47
|
+
export interface FeatureAvailability {
|
|
48
|
+
checkpointing: boolean;
|
|
49
|
+
memory: boolean;
|
|
50
|
+
outputStyles: boolean;
|
|
51
|
+
costTracking: boolean;
|
|
52
|
+
vimMode: boolean;
|
|
53
|
+
updates: boolean;
|
|
54
|
+
}
|
|
55
|
+
export declare function checkFeatureAvailability(): FeatureAvailability;
|
|
56
|
+
/**
|
|
57
|
+
* Format feature status for /doctor command
|
|
58
|
+
*/
|
|
59
|
+
export declare function formatFeatureStatus(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Help text for Claude Code features
|
|
62
|
+
*/
|
|
63
|
+
export declare function formatClaudeCodeHelp(): string;
|
|
64
|
+
//# sourceMappingURL=claudeCodeFeatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeCodeFeatures.d.ts","sourceRoot":"","sources":["../../src/core/claudeCodeFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAA0C,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAqC,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,eAAe,EAAE,WAAW,GAAG,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,CAAC,CAgC1B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EACtB,UAAU,EAAE,MAAM,GACjB,MAAM,CAeR;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,wBAAwB,IAAI,mBAAmB,CAS9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAsB5C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAkD7C"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code Features - Unified Integration Module
|
|
3
|
+
*
|
|
4
|
+
* This module exports all Claude Code style features integrated into erosolar-cli.
|
|
5
|
+
* Use this as the main entry point for accessing the new capabilities.
|
|
6
|
+
*
|
|
7
|
+
* Features included:
|
|
8
|
+
* - Checkpointing/Rewind System
|
|
9
|
+
* - EROSOLAR.md Memory System
|
|
10
|
+
* - Output Styles
|
|
11
|
+
* - Cost Tracking
|
|
12
|
+
* - Update Manager
|
|
13
|
+
* - Vim Mode
|
|
14
|
+
* - Keyboard Shortcuts
|
|
15
|
+
*/
|
|
16
|
+
// Re-export all feature modules
|
|
17
|
+
export * from './checkpoint.js';
|
|
18
|
+
export * from './memorySystem.js';
|
|
19
|
+
export * from './outputStyles.js';
|
|
20
|
+
export * from './costTracker.js';
|
|
21
|
+
export * from './updateManager.js';
|
|
22
|
+
// Import for unified initialization
|
|
23
|
+
import { getCheckpointManager } from './checkpoint.js';
|
|
24
|
+
import { getMemorySystem, formatMemoryForPrompt } from './memorySystem.js';
|
|
25
|
+
import { getOutputStyle, getCurrentStyleId, formatStyleForPrompt } from './outputStyles.js';
|
|
26
|
+
import { getCostTracker } from './costTracker.js';
|
|
27
|
+
import { checkForUpdates, isUpdateCheckDue } from './updateManager.js';
|
|
28
|
+
/**
|
|
29
|
+
* Initialize all Claude Code features
|
|
30
|
+
*/
|
|
31
|
+
export async function initializeClaudeCodeFeatures(workingDir, sessionId) {
|
|
32
|
+
// Initialize checkpoint manager
|
|
33
|
+
const checkpointManager = getCheckpointManager(workingDir);
|
|
34
|
+
// Initialize memory system and load memory files
|
|
35
|
+
const memorySystem = getMemorySystem();
|
|
36
|
+
const memory = memorySystem.loadAllMemory(workingDir);
|
|
37
|
+
// Initialize cost tracker
|
|
38
|
+
const costTracker = getCostTracker(sessionId);
|
|
39
|
+
// Check for updates (non-blocking)
|
|
40
|
+
let lastUpdateCheck = null;
|
|
41
|
+
if (isUpdateCheckDue()) {
|
|
42
|
+
try {
|
|
43
|
+
const result = await checkForUpdates();
|
|
44
|
+
if (result.success && result.versionInfo) {
|
|
45
|
+
lastUpdateCheck = result.versionInfo;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Ignore update check errors
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
checkpointManager,
|
|
54
|
+
memorySystem,
|
|
55
|
+
costTracker,
|
|
56
|
+
currentOutputStyle: getCurrentStyleId(),
|
|
57
|
+
memory,
|
|
58
|
+
lastUpdateCheck,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build system prompt additions from Claude Code features
|
|
63
|
+
*/
|
|
64
|
+
export function buildSystemPromptAdditions(state, workingDir) {
|
|
65
|
+
const additions = [];
|
|
66
|
+
// Add memory content
|
|
67
|
+
if (state.memory.length > 0) {
|
|
68
|
+
additions.push(formatMemoryForPrompt(state.memory));
|
|
69
|
+
}
|
|
70
|
+
// Add output style
|
|
71
|
+
const style = getOutputStyle(state.currentOutputStyle, workingDir);
|
|
72
|
+
if (style) {
|
|
73
|
+
additions.push(formatStyleForPrompt(style));
|
|
74
|
+
}
|
|
75
|
+
return additions.join('\n');
|
|
76
|
+
}
|
|
77
|
+
export function checkFeatureAvailability() {
|
|
78
|
+
return {
|
|
79
|
+
checkpointing: true,
|
|
80
|
+
memory: true,
|
|
81
|
+
outputStyles: true,
|
|
82
|
+
costTracking: true,
|
|
83
|
+
vimMode: true,
|
|
84
|
+
updates: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Format feature status for /doctor command
|
|
89
|
+
*/
|
|
90
|
+
export function formatFeatureStatus() {
|
|
91
|
+
const features = checkFeatureAvailability();
|
|
92
|
+
const lines = [
|
|
93
|
+
'Claude Code Features:',
|
|
94
|
+
'',
|
|
95
|
+
];
|
|
96
|
+
const formatStatus = (name, available, extra) => {
|
|
97
|
+
const icon = available ? '✓' : '✗';
|
|
98
|
+
const status = available ? 'enabled' : 'disabled';
|
|
99
|
+
return ` ${icon} ${name}: ${status}${extra ? ` (${extra})` : ''}`;
|
|
100
|
+
};
|
|
101
|
+
lines.push(formatStatus('Checkpointing', features.checkpointing, '/rewind'));
|
|
102
|
+
lines.push(formatStatus('Memory System', features.memory, 'EROSOLAR.md'));
|
|
103
|
+
lines.push(formatStatus('Output Styles', features.outputStyles, '/output-style'));
|
|
104
|
+
lines.push(formatStatus('Cost Tracking', features.costTracking, '/cost'));
|
|
105
|
+
lines.push(formatStatus('Vim Mode', features.vimMode, '/vim'));
|
|
106
|
+
lines.push(formatStatus('Auto Updates', features.updates, '/update'));
|
|
107
|
+
return lines.join('\n');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Help text for Claude Code features
|
|
111
|
+
*/
|
|
112
|
+
export function formatClaudeCodeHelp() {
|
|
113
|
+
return `
|
|
114
|
+
Claude Code Features in Erosolar CLI
|
|
115
|
+
=====================================
|
|
116
|
+
|
|
117
|
+
Checkpointing & Rewind (/rewind)
|
|
118
|
+
Automatic snapshots before code changes
|
|
119
|
+
Rewind to any checkpoint (code only, conversation only, or both)
|
|
120
|
+
Press Esc+Esc to open rewind menu
|
|
121
|
+
|
|
122
|
+
Memory System (EROSOLAR.md)
|
|
123
|
+
Hierarchical memory files for persistent context
|
|
124
|
+
~/.erosolar/EROSOLAR.md (user preferences)
|
|
125
|
+
./EROSOLAR.md (project memory)
|
|
126
|
+
Use @path/to/file to reference files in prompts
|
|
127
|
+
Use # prefix to quickly add to memory
|
|
128
|
+
|
|
129
|
+
Output Styles (/output-style)
|
|
130
|
+
default - Standard efficient coding mode
|
|
131
|
+
explanatory - Educational with detailed explanations
|
|
132
|
+
learning - Collaborative with TODO(human) markers
|
|
133
|
+
concise - Minimal output, code-focused only
|
|
134
|
+
Custom styles in ~/.erosolar/output-styles/
|
|
135
|
+
|
|
136
|
+
Cost Tracking (/cost, /usage)
|
|
137
|
+
Real-time token usage and cost display
|
|
138
|
+
Session and lifetime tracking
|
|
139
|
+
Breakdown by model
|
|
140
|
+
|
|
141
|
+
Vim Mode (/vim)
|
|
142
|
+
Toggle vim-style editing in input
|
|
143
|
+
Normal/Insert/Visual modes
|
|
144
|
+
Standard vim navigation (hjkl, w/b, etc.)
|
|
145
|
+
|
|
146
|
+
Keyboard Shortcuts
|
|
147
|
+
Ctrl+C Cancel/Clear
|
|
148
|
+
Ctrl+D Exit
|
|
149
|
+
Ctrl+B Background task
|
|
150
|
+
Esc+Esc Rewind menu
|
|
151
|
+
Shift+Tab Cycle edit modes
|
|
152
|
+
Tab Cycle thinking modes
|
|
153
|
+
Alt+V Toggle verification
|
|
154
|
+
Alt+C Toggle auto-continue
|
|
155
|
+
Alt+T Toggle thinking
|
|
156
|
+
PageUp/Down Scroll output
|
|
157
|
+
|
|
158
|
+
Updates (/update)
|
|
159
|
+
Check for new versions
|
|
160
|
+
Auto-update CLI
|
|
161
|
+
`.trim();
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=claudeCodeFeatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claudeCodeFeatures.js","sourceRoot":"","sources":["../../src/core/claudeCodeFeatures.ts"],"names":[],"mappings":"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"}
|