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,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Learning Persistence System
|
|
3
|
+
*
|
|
4
|
+
* Persists AlphaZero-style learning across sessions:
|
|
5
|
+
* - Tool sequence patterns that work for different task types
|
|
6
|
+
* - Quality thresholds learned from successful completions
|
|
7
|
+
* - Failure patterns to avoid
|
|
8
|
+
* - Prompt improvements discovered through self-critique
|
|
9
|
+
*
|
|
10
|
+
* Data is stored in ~/.erosolar/learning/ with versioning.
|
|
11
|
+
* Significant learnings can be committed to version control.
|
|
12
|
+
*
|
|
13
|
+
* Principal Investigator: Bo Shang
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
16
|
+
import { homedir } from 'node:os';
|
|
17
|
+
import { join } from 'node:path';
|
|
18
|
+
import { execSync } from 'node:child_process';
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// PATHS
|
|
21
|
+
// ============================================================================
|
|
22
|
+
const LEARNING_DIR = join(homedir(), '.erosolar', 'learning');
|
|
23
|
+
const TOOL_PATTERNS_FILE = join(LEARNING_DIR, 'tool-patterns.json');
|
|
24
|
+
const QUALITY_THRESHOLDS_FILE = join(LEARNING_DIR, 'quality-thresholds.json');
|
|
25
|
+
const FAILURE_PATTERNS_FILE = join(LEARNING_DIR, 'failure-patterns.json');
|
|
26
|
+
const PROMPT_IMPROVEMENTS_FILE = join(LEARNING_DIR, 'prompt-improvements.json');
|
|
27
|
+
const LEARNING_HISTORY_FILE = join(LEARNING_DIR, 'history.json');
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// INITIALIZATION
|
|
30
|
+
// ============================================================================
|
|
31
|
+
function ensureLearningDir() {
|
|
32
|
+
if (!existsSync(LEARNING_DIR)) {
|
|
33
|
+
mkdirSync(LEARNING_DIR, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function initializeFileIfMissing(path, defaultValue) {
|
|
37
|
+
if (!existsSync(path)) {
|
|
38
|
+
ensureLearningDir();
|
|
39
|
+
writeFileSync(path, JSON.stringify(defaultValue, null, 2));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// TOOL PATTERNS
|
|
44
|
+
// ============================================================================
|
|
45
|
+
export function loadToolPatterns() {
|
|
46
|
+
const defaultValue = {
|
|
47
|
+
version: 1,
|
|
48
|
+
lastUpdated: new Date().toISOString(),
|
|
49
|
+
patterns: {},
|
|
50
|
+
};
|
|
51
|
+
initializeFileIfMissing(TOOL_PATTERNS_FILE, defaultValue);
|
|
52
|
+
try {
|
|
53
|
+
const content = readFileSync(TOOL_PATTERNS_FILE, 'utf-8');
|
|
54
|
+
return JSON.parse(content);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return defaultValue;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function saveToolPatterns(patterns) {
|
|
61
|
+
ensureLearningDir();
|
|
62
|
+
patterns.lastUpdated = new Date().toISOString();
|
|
63
|
+
patterns.version++;
|
|
64
|
+
writeFileSync(TOOL_PATTERNS_FILE, JSON.stringify(patterns, null, 2));
|
|
65
|
+
}
|
|
66
|
+
export function addToolPattern(taskType, pattern) {
|
|
67
|
+
const data = loadToolPatterns();
|
|
68
|
+
if (!data.patterns[taskType]) {
|
|
69
|
+
data.patterns[taskType] = [];
|
|
70
|
+
}
|
|
71
|
+
// Check for existing pattern with same sequence
|
|
72
|
+
const existing = data.patterns[taskType].find(p => p.toolSequence.join('→') === pattern.toolSequence.join('→'));
|
|
73
|
+
if (existing) {
|
|
74
|
+
// Update existing pattern statistics
|
|
75
|
+
existing.occurrences++;
|
|
76
|
+
existing.successRate = (existing.successRate * (existing.occurrences - 1) + pattern.successRate) / existing.occurrences;
|
|
77
|
+
existing.avgDuration = (existing.avgDuration * (existing.occurrences - 1) + pattern.avgDuration) / existing.occurrences;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
data.patterns[taskType].push(pattern);
|
|
81
|
+
}
|
|
82
|
+
// Sort by success rate and keep top 20 per task type
|
|
83
|
+
data.patterns[taskType].sort((a, b) => b.successRate - a.successRate);
|
|
84
|
+
if (data.patterns[taskType].length > 20) {
|
|
85
|
+
data.patterns[taskType].length = 20;
|
|
86
|
+
}
|
|
87
|
+
saveToolPatterns(data);
|
|
88
|
+
// Record in history
|
|
89
|
+
addHistoryEntry({
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
type: 'tool-pattern',
|
|
92
|
+
description: `Learned tool pattern for ${taskType}: ${pattern.toolSequence.join(' → ')}`,
|
|
93
|
+
taskType,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
export function getBestToolPattern(taskType) {
|
|
97
|
+
const data = loadToolPatterns();
|
|
98
|
+
const patterns = data.patterns[taskType];
|
|
99
|
+
if (!patterns || patterns.length === 0)
|
|
100
|
+
return null;
|
|
101
|
+
// Return pattern with highest success rate that has enough occurrences
|
|
102
|
+
const reliable = patterns.find(p => p.occurrences >= 3 && p.successRate >= 0.7);
|
|
103
|
+
return reliable ?? patterns[0] ?? null;
|
|
104
|
+
}
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// QUALITY THRESHOLDS
|
|
107
|
+
// ============================================================================
|
|
108
|
+
export function loadQualityThresholds() {
|
|
109
|
+
const defaultValue = {
|
|
110
|
+
version: 1,
|
|
111
|
+
lastUpdated: new Date().toISOString(),
|
|
112
|
+
thresholds: {
|
|
113
|
+
'general': { taskType: 'general', minAcceptable: 50, targetQuality: 75, samplesUsed: 0, lastUpdated: new Date().toISOString() },
|
|
114
|
+
'bug-fix': { taskType: 'bug-fix', minAcceptable: 60, targetQuality: 85, samplesUsed: 0, lastUpdated: new Date().toISOString() },
|
|
115
|
+
'feature-add': { taskType: 'feature-add', minAcceptable: 55, targetQuality: 80, samplesUsed: 0, lastUpdated: new Date().toISOString() },
|
|
116
|
+
'refactor': { taskType: 'refactor', minAcceptable: 60, targetQuality: 80, samplesUsed: 0, lastUpdated: new Date().toISOString() },
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
initializeFileIfMissing(QUALITY_THRESHOLDS_FILE, defaultValue);
|
|
120
|
+
try {
|
|
121
|
+
const content = readFileSync(QUALITY_THRESHOLDS_FILE, 'utf-8');
|
|
122
|
+
return JSON.parse(content);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return defaultValue;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export function saveQualityThresholds(thresholds) {
|
|
129
|
+
ensureLearningDir();
|
|
130
|
+
thresholds.lastUpdated = new Date().toISOString();
|
|
131
|
+
thresholds.version++;
|
|
132
|
+
writeFileSync(QUALITY_THRESHOLDS_FILE, JSON.stringify(thresholds, null, 2));
|
|
133
|
+
}
|
|
134
|
+
export function updateQualityThreshold(taskType, observedQuality, wasSuccessful) {
|
|
135
|
+
const data = loadQualityThresholds();
|
|
136
|
+
if (!data.thresholds[taskType]) {
|
|
137
|
+
data.thresholds[taskType] = {
|
|
138
|
+
taskType,
|
|
139
|
+
minAcceptable: 50,
|
|
140
|
+
targetQuality: 75,
|
|
141
|
+
samplesUsed: 0,
|
|
142
|
+
lastUpdated: new Date().toISOString(),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const threshold = data.thresholds[taskType];
|
|
146
|
+
threshold.samplesUsed++;
|
|
147
|
+
// Adjust thresholds based on observed outcomes
|
|
148
|
+
if (wasSuccessful && observedQuality < threshold.minAcceptable) {
|
|
149
|
+
// Successful at lower quality than expected - can lower threshold slightly
|
|
150
|
+
threshold.minAcceptable = Math.max(30, threshold.minAcceptable - 2);
|
|
151
|
+
}
|
|
152
|
+
else if (!wasSuccessful && observedQuality > threshold.minAcceptable) {
|
|
153
|
+
// Failed at higher quality than threshold - raise threshold
|
|
154
|
+
threshold.minAcceptable = Math.min(80, threshold.minAcceptable + 3);
|
|
155
|
+
}
|
|
156
|
+
// Update target based on successful completions
|
|
157
|
+
if (wasSuccessful) {
|
|
158
|
+
threshold.targetQuality = (threshold.targetQuality * (threshold.samplesUsed - 1) + observedQuality) / threshold.samplesUsed;
|
|
159
|
+
}
|
|
160
|
+
threshold.lastUpdated = new Date().toISOString();
|
|
161
|
+
saveQualityThresholds(data);
|
|
162
|
+
}
|
|
163
|
+
export function getQualityThreshold(taskType) {
|
|
164
|
+
const data = loadQualityThresholds();
|
|
165
|
+
return data.thresholds[taskType] ?? data.thresholds['general'];
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// FAILURE PATTERNS
|
|
169
|
+
// ============================================================================
|
|
170
|
+
export function loadFailurePatterns() {
|
|
171
|
+
const defaultValue = {
|
|
172
|
+
version: 1,
|
|
173
|
+
lastUpdated: new Date().toISOString(),
|
|
174
|
+
patterns: [],
|
|
175
|
+
};
|
|
176
|
+
initializeFileIfMissing(FAILURE_PATTERNS_FILE, defaultValue);
|
|
177
|
+
try {
|
|
178
|
+
const content = readFileSync(FAILURE_PATTERNS_FILE, 'utf-8');
|
|
179
|
+
return JSON.parse(content);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return defaultValue;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function saveFailurePatterns(patterns) {
|
|
186
|
+
ensureLearningDir();
|
|
187
|
+
patterns.lastUpdated = new Date().toISOString();
|
|
188
|
+
patterns.version++;
|
|
189
|
+
writeFileSync(FAILURE_PATTERNS_FILE, JSON.stringify(patterns, null, 2));
|
|
190
|
+
}
|
|
191
|
+
export function recordFailurePattern(taskType, toolSequence, errorMessage, avoidanceHint) {
|
|
192
|
+
const data = loadFailurePatterns();
|
|
193
|
+
// Create signature from tool sequence and error type
|
|
194
|
+
const signature = `${toolSequence.join('→')}::${errorMessage.slice(0, 100)}`;
|
|
195
|
+
const existing = data.patterns.find(p => p.errorSignature === signature);
|
|
196
|
+
if (existing) {
|
|
197
|
+
existing.occurrences++;
|
|
198
|
+
existing.lastSeen = new Date().toISOString();
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
data.patterns.push({
|
|
202
|
+
id: `fail-${Date.now()}`,
|
|
203
|
+
taskType,
|
|
204
|
+
description: `Failed pattern for ${taskType}`,
|
|
205
|
+
toolSequence,
|
|
206
|
+
errorSignature: signature,
|
|
207
|
+
occurrences: 1,
|
|
208
|
+
lastSeen: new Date().toISOString(),
|
|
209
|
+
avoidanceHint,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
// Keep only recent/frequent failures
|
|
213
|
+
data.patterns.sort((a, b) => b.occurrences - a.occurrences);
|
|
214
|
+
if (data.patterns.length > 50) {
|
|
215
|
+
data.patterns.length = 50;
|
|
216
|
+
}
|
|
217
|
+
saveFailurePatterns(data);
|
|
218
|
+
addHistoryEntry({
|
|
219
|
+
timestamp: new Date().toISOString(),
|
|
220
|
+
type: 'failure-pattern',
|
|
221
|
+
description: `Recorded failure pattern: ${toolSequence.join(' → ')}`,
|
|
222
|
+
taskType,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
export function getFailurePatternsToAvoid(taskType) {
|
|
226
|
+
const data = loadFailurePatterns();
|
|
227
|
+
return data.patterns.filter(p => p.taskType === taskType && p.occurrences >= 2);
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// PROMPT IMPROVEMENTS
|
|
231
|
+
// ============================================================================
|
|
232
|
+
export function loadPromptImprovements() {
|
|
233
|
+
const defaultValue = {
|
|
234
|
+
version: 1,
|
|
235
|
+
lastUpdated: new Date().toISOString(),
|
|
236
|
+
improvements: [],
|
|
237
|
+
};
|
|
238
|
+
initializeFileIfMissing(PROMPT_IMPROVEMENTS_FILE, defaultValue);
|
|
239
|
+
try {
|
|
240
|
+
const content = readFileSync(PROMPT_IMPROVEMENTS_FILE, 'utf-8');
|
|
241
|
+
return JSON.parse(content);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return defaultValue;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
export function savePromptImprovements(improvements) {
|
|
248
|
+
ensureLearningDir();
|
|
249
|
+
improvements.lastUpdated = new Date().toISOString();
|
|
250
|
+
improvements.version++;
|
|
251
|
+
writeFileSync(PROMPT_IMPROVEMENTS_FILE, JSON.stringify(improvements, null, 2));
|
|
252
|
+
}
|
|
253
|
+
export function recordPromptImprovement(category, originalPrompt, improvedPrompt, qualityGain) {
|
|
254
|
+
const data = loadPromptImprovements();
|
|
255
|
+
// Check if we already have this improvement
|
|
256
|
+
const existing = data.improvements.find(i => i.category === category && i.improvedPrompt === improvedPrompt);
|
|
257
|
+
if (existing) {
|
|
258
|
+
existing.validatedCount++;
|
|
259
|
+
existing.lastValidated = new Date().toISOString();
|
|
260
|
+
existing.qualityGain = (existing.qualityGain + qualityGain) / 2;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
data.improvements.push({
|
|
264
|
+
id: `prompt-${Date.now()}`,
|
|
265
|
+
category,
|
|
266
|
+
originalPrompt: originalPrompt.slice(0, 500),
|
|
267
|
+
improvedPrompt: improvedPrompt.slice(0, 500),
|
|
268
|
+
qualityGain,
|
|
269
|
+
validatedCount: 1,
|
|
270
|
+
discoveredAt: new Date().toISOString(),
|
|
271
|
+
lastValidated: new Date().toISOString(),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
// Keep top improvements per category
|
|
275
|
+
data.improvements.sort((a, b) => b.qualityGain * b.validatedCount - a.qualityGain * a.validatedCount);
|
|
276
|
+
if (data.improvements.length > 30) {
|
|
277
|
+
data.improvements.length = 30;
|
|
278
|
+
}
|
|
279
|
+
savePromptImprovements(data);
|
|
280
|
+
addHistoryEntry({
|
|
281
|
+
timestamp: new Date().toISOString(),
|
|
282
|
+
type: 'prompt-improvement',
|
|
283
|
+
description: `Discovered ${category} prompt improvement with ${qualityGain}% quality gain`,
|
|
284
|
+
qualityBefore: 0,
|
|
285
|
+
qualityAfter: qualityGain,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
export function getPromptImprovements(category) {
|
|
289
|
+
const data = loadPromptImprovements();
|
|
290
|
+
const validated = data.improvements.filter(i => i.validatedCount >= 2 && i.qualityGain > 5);
|
|
291
|
+
if (category) {
|
|
292
|
+
return validated.filter(i => i.category === category);
|
|
293
|
+
}
|
|
294
|
+
return validated;
|
|
295
|
+
}
|
|
296
|
+
// ============================================================================
|
|
297
|
+
// HISTORY
|
|
298
|
+
// ============================================================================
|
|
299
|
+
function loadHistory() {
|
|
300
|
+
const defaultValue = {
|
|
301
|
+
version: 1,
|
|
302
|
+
entries: [],
|
|
303
|
+
};
|
|
304
|
+
initializeFileIfMissing(LEARNING_HISTORY_FILE, defaultValue);
|
|
305
|
+
try {
|
|
306
|
+
const content = readFileSync(LEARNING_HISTORY_FILE, 'utf-8');
|
|
307
|
+
return JSON.parse(content);
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return defaultValue;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
function saveHistory(history) {
|
|
314
|
+
ensureLearningDir();
|
|
315
|
+
writeFileSync(LEARNING_HISTORY_FILE, JSON.stringify(history, null, 2));
|
|
316
|
+
}
|
|
317
|
+
function addHistoryEntry(entry) {
|
|
318
|
+
const history = loadHistory();
|
|
319
|
+
history.entries.unshift(entry);
|
|
320
|
+
// Keep last 200 entries
|
|
321
|
+
if (history.entries.length > 200) {
|
|
322
|
+
history.entries.length = 200;
|
|
323
|
+
}
|
|
324
|
+
saveHistory(history);
|
|
325
|
+
}
|
|
326
|
+
export function getRecentLearning(count = 20) {
|
|
327
|
+
const history = loadHistory();
|
|
328
|
+
return history.entries.slice(0, count);
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Commit learning files to git (if in a git repo)
|
|
332
|
+
*/
|
|
333
|
+
export function commitLearning(description, workingDir) {
|
|
334
|
+
try {
|
|
335
|
+
// Check if we're in a git repo
|
|
336
|
+
try {
|
|
337
|
+
execSync('git rev-parse --git-dir', { cwd: workingDir, stdio: 'pipe' });
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return { success: false, error: 'Not in a git repository' };
|
|
341
|
+
}
|
|
342
|
+
// Check if learning files exist and are tracked
|
|
343
|
+
const learningFiles = [
|
|
344
|
+
TOOL_PATTERNS_FILE,
|
|
345
|
+
QUALITY_THRESHOLDS_FILE,
|
|
346
|
+
FAILURE_PATTERNS_FILE,
|
|
347
|
+
PROMPT_IMPROVEMENTS_FILE,
|
|
348
|
+
].filter(f => existsSync(f));
|
|
349
|
+
if (learningFiles.length === 0) {
|
|
350
|
+
return { success: false, error: 'No learning files to commit' };
|
|
351
|
+
}
|
|
352
|
+
// Stage learning files
|
|
353
|
+
for (const file of learningFiles) {
|
|
354
|
+
try {
|
|
355
|
+
execSync(`git add "${file}"`, { cwd: workingDir, stdio: 'pipe' });
|
|
356
|
+
}
|
|
357
|
+
catch {
|
|
358
|
+
// File might not be in repo, that's OK
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Check if there are staged changes
|
|
362
|
+
const status = execSync('git status --porcelain', { cwd: workingDir, encoding: 'utf-8' });
|
|
363
|
+
if (!status.trim()) {
|
|
364
|
+
return { success: false, error: 'No changes to commit' };
|
|
365
|
+
}
|
|
366
|
+
// Commit with descriptive message
|
|
367
|
+
const commitMessage = `chore(learning): ${description}
|
|
368
|
+
|
|
369
|
+
AlphaZero learning update:
|
|
370
|
+
- Tool patterns: ${existsSync(TOOL_PATTERNS_FILE) ? 'updated' : 'n/a'}
|
|
371
|
+
- Quality thresholds: ${existsSync(QUALITY_THRESHOLDS_FILE) ? 'updated' : 'n/a'}
|
|
372
|
+
- Failure patterns: ${existsSync(FAILURE_PATTERNS_FILE) ? 'updated' : 'n/a'}
|
|
373
|
+
- Prompt improvements: ${existsSync(PROMPT_IMPROVEMENTS_FILE) ? 'updated' : 'n/a'}
|
|
374
|
+
|
|
375
|
+
🤖 Auto-generated by erosolar-cli learning system`;
|
|
376
|
+
execSync(`git commit -m "${commitMessage.replace(/"/g, '\\"')}"`, {
|
|
377
|
+
cwd: workingDir,
|
|
378
|
+
stdio: 'pipe',
|
|
379
|
+
});
|
|
380
|
+
// Get commit hash
|
|
381
|
+
const hash = execSync('git rev-parse --short HEAD', {
|
|
382
|
+
cwd: workingDir,
|
|
383
|
+
encoding: 'utf-8',
|
|
384
|
+
}).trim();
|
|
385
|
+
return {
|
|
386
|
+
success: true,
|
|
387
|
+
commitHash: hash,
|
|
388
|
+
message: `Committed learning update: ${hash}`,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
return {
|
|
393
|
+
success: false,
|
|
394
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
export function getLearningSummary() {
|
|
399
|
+
const toolData = loadToolPatterns();
|
|
400
|
+
const qualityData = loadQualityThresholds();
|
|
401
|
+
const failureData = loadFailurePatterns();
|
|
402
|
+
const promptData = loadPromptImprovements();
|
|
403
|
+
const history = loadHistory();
|
|
404
|
+
// Tool patterns summary
|
|
405
|
+
const taskTypes = Object.keys(toolData.patterns);
|
|
406
|
+
const totalPatterns = taskTypes.reduce((sum, t) => sum + (toolData.patterns[t]?.length ?? 0), 0);
|
|
407
|
+
const bestPatterns = taskTypes
|
|
408
|
+
.map(t => {
|
|
409
|
+
const best = toolData.patterns[t]?.[0];
|
|
410
|
+
return best ? { taskType: t, pattern: best.toolSequence.join(' → '), successRate: best.successRate } : null;
|
|
411
|
+
})
|
|
412
|
+
.filter((p) => p !== null)
|
|
413
|
+
.slice(0, 5);
|
|
414
|
+
// Quality thresholds summary
|
|
415
|
+
const thresholdValues = Object.values(qualityData.thresholds);
|
|
416
|
+
const avgMinAcceptable = thresholdValues.length > 0
|
|
417
|
+
? thresholdValues.reduce((sum, t) => sum + t.minAcceptable, 0) / thresholdValues.length
|
|
418
|
+
: 50;
|
|
419
|
+
const avgTargetQuality = thresholdValues.length > 0
|
|
420
|
+
? thresholdValues.reduce((sum, t) => sum + t.targetQuality, 0) / thresholdValues.length
|
|
421
|
+
: 75;
|
|
422
|
+
// Failure patterns summary
|
|
423
|
+
const mostFrequent = failureData.patterns
|
|
424
|
+
.slice(0, 3)
|
|
425
|
+
.map(p => ({ description: p.avoidanceHint, occurrences: p.occurrences }));
|
|
426
|
+
// Prompt improvements summary
|
|
427
|
+
const categories = [...new Set(promptData.improvements.map(i => i.category))];
|
|
428
|
+
const avgQualityGain = promptData.improvements.length > 0
|
|
429
|
+
? promptData.improvements.reduce((sum, i) => sum + i.qualityGain, 0) / promptData.improvements.length
|
|
430
|
+
: 0;
|
|
431
|
+
// Recent activity (last 24 hours)
|
|
432
|
+
const oneDayAgo = Date.now() - 24 * 60 * 60 * 1000;
|
|
433
|
+
const recentActivity = history.entries.filter(e => new Date(e.timestamp).getTime() > oneDayAgo).length;
|
|
434
|
+
return {
|
|
435
|
+
toolPatterns: { totalPatterns, taskTypes, bestPatterns },
|
|
436
|
+
qualityThresholds: { taskTypes: Object.keys(qualityData.thresholds), avgMinAcceptable, avgTargetQuality },
|
|
437
|
+
failurePatterns: { totalPatterns: failureData.patterns.length, mostFrequent },
|
|
438
|
+
promptImprovements: { totalImprovements: promptData.improvements.length, categories, avgQualityGain },
|
|
439
|
+
recentActivity,
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
export function exportAllLearning() {
|
|
443
|
+
return {
|
|
444
|
+
exportedAt: new Date().toISOString(),
|
|
445
|
+
toolPatterns: loadToolPatterns(),
|
|
446
|
+
qualityThresholds: loadQualityThresholds(),
|
|
447
|
+
failurePatterns: loadFailurePatterns(),
|
|
448
|
+
promptImprovements: loadPromptImprovements(),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
export function importAllLearning(data) {
|
|
452
|
+
ensureLearningDir();
|
|
453
|
+
if (data.toolPatterns) {
|
|
454
|
+
saveToolPatterns(data.toolPatterns);
|
|
455
|
+
}
|
|
456
|
+
if (data.qualityThresholds) {
|
|
457
|
+
saveQualityThresholds(data.qualityThresholds);
|
|
458
|
+
}
|
|
459
|
+
if (data.failurePatterns) {
|
|
460
|
+
saveFailurePatterns(data.failurePatterns);
|
|
461
|
+
}
|
|
462
|
+
if (data.promptImprovements) {
|
|
463
|
+
savePromptImprovements(data.promptImprovements);
|
|
464
|
+
}
|
|
465
|
+
addHistoryEntry({
|
|
466
|
+
timestamp: new Date().toISOString(),
|
|
467
|
+
type: 'tool-pattern',
|
|
468
|
+
description: `Imported learning data from ${data.exportedAt}`,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Get the learning directory path
|
|
473
|
+
*/
|
|
474
|
+
export function getLearningDir() {
|
|
475
|
+
return LEARNING_DIR;
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=learningPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learningPersistence.js","sourceRoot":"","sources":["../../src/core/learningPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory System - Claude Code Style (EROSOLAR.md)
|
|
3
|
+
*
|
|
4
|
+
* Hierarchical memory files for persistent context and project-specific instructions.
|
|
5
|
+
* Similar to Claude Code's CLAUDE.md system.
|
|
6
|
+
*
|
|
7
|
+
* Memory Hierarchy (highest to lowest priority):
|
|
8
|
+
* 1. Enterprise policy (~/.erosolar/EROSOLAR.md at OS level)
|
|
9
|
+
* 2. User memory (~/.erosolar/EROSOLAR.md)
|
|
10
|
+
* 3. Project memory (./EROSOLAR.md or ./.erosolar/EROSOLAR.md)
|
|
11
|
+
* 4. Directory memory (./subdirectory/EROSOLAR.md - recursive discovery)
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Automatic loading on session start
|
|
15
|
+
* - Recursive discovery in file tree
|
|
16
|
+
* - Import syntax (@path/to/import) for referencing other files
|
|
17
|
+
* - Maximum 5-level import depth
|
|
18
|
+
* - Quick addition via # prefix input
|
|
19
|
+
* - Direct editing with /memory command
|
|
20
|
+
*/
|
|
21
|
+
export interface MemoryFile {
|
|
22
|
+
path: string;
|
|
23
|
+
content: string;
|
|
24
|
+
source: 'enterprise' | 'user' | 'project' | 'directory';
|
|
25
|
+
priority: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MemoryEntry {
|
|
28
|
+
content: string;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
source: string;
|
|
31
|
+
}
|
|
32
|
+
export interface MemorySystem {
|
|
33
|
+
loadAllMemory(workingDir: string): MemoryFile[];
|
|
34
|
+
loadMemoryFile(path: string): MemoryFile | null;
|
|
35
|
+
saveToProjectMemory(workingDir: string, content: string): boolean;
|
|
36
|
+
saveToUserMemory(content: string): boolean;
|
|
37
|
+
appendToProjectMemory(workingDir: string, content: string): boolean;
|
|
38
|
+
appendToUserMemory(content: string): boolean;
|
|
39
|
+
getMemoryPaths(workingDir: string): string[];
|
|
40
|
+
resolveImports(content: string, basePath: string, depth?: number): string;
|
|
41
|
+
parseAtReferences(input: string, workingDir: string): {
|
|
42
|
+
cleanInput: string;
|
|
43
|
+
references: ReferencedFile[];
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export interface ReferencedFile {
|
|
47
|
+
path: string;
|
|
48
|
+
content: string;
|
|
49
|
+
lineRange?: {
|
|
50
|
+
start: number;
|
|
51
|
+
end: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create the memory system
|
|
56
|
+
*/
|
|
57
|
+
export declare function createMemorySystem(): MemorySystem;
|
|
58
|
+
/**
|
|
59
|
+
* Format memory content for display in system prompt
|
|
60
|
+
*/
|
|
61
|
+
export declare function formatMemoryForPrompt(memoryFiles: MemoryFile[]): string;
|
|
62
|
+
/**
|
|
63
|
+
* Format referenced files for prompt context
|
|
64
|
+
*/
|
|
65
|
+
export declare function formatReferencesForPrompt(references: ReferencedFile[]): string;
|
|
66
|
+
export declare function getMemorySystem(): MemorySystem;
|
|
67
|
+
//# sourceMappingURL=memorySystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memorySystem.d.ts","sourceRoot":"","sources":["../../src/core/memorySystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAUH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,CAAC;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IAChD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAChD,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3C,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7C,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1E,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,cAAc,EAAE,CAAA;KAAE,CAAC;CAC5G;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAsKD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAwJjD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,MAAM,CAmBvE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CAe9E;AAOD,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
|