erosolar-cli 1.7.372 → 1.7.377

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 (97) hide show
  1. package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
  2. package/dist/capabilities/agentSpawningCapability.js +29 -1
  3. package/dist/capabilities/agentSpawningCapability.js.map +1 -1
  4. package/dist/contracts/agent-schemas.json +100 -0
  5. package/dist/core/alphaZeroEngine.d.ts +269 -0
  6. package/dist/core/alphaZeroEngine.d.ts.map +1 -0
  7. package/dist/core/alphaZeroEngine.js +523 -0
  8. package/dist/core/alphaZeroEngine.js.map +1 -0
  9. package/dist/core/alphaZeroOrchestrator.d.ts +140 -0
  10. package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
  11. package/dist/core/alphaZeroOrchestrator.js +418 -0
  12. package/dist/core/alphaZeroOrchestrator.js.map +1 -0
  13. package/dist/core/checkpoint.d.ts +76 -0
  14. package/dist/core/checkpoint.d.ts.map +1 -0
  15. package/dist/core/checkpoint.js +278 -0
  16. package/dist/core/checkpoint.js.map +1 -0
  17. package/dist/core/claudeCodeFeatures.d.ts +64 -0
  18. package/dist/core/claudeCodeFeatures.d.ts.map +1 -0
  19. package/dist/core/claudeCodeFeatures.js +163 -0
  20. package/dist/core/claudeCodeFeatures.js.map +1 -0
  21. package/dist/core/costTracker.d.ts +87 -0
  22. package/dist/core/costTracker.d.ts.map +1 -0
  23. package/dist/core/costTracker.js +285 -0
  24. package/dist/core/costTracker.js.map +1 -0
  25. package/dist/core/failureRecovery.d.ts +122 -0
  26. package/dist/core/failureRecovery.d.ts.map +1 -0
  27. package/dist/core/failureRecovery.js +477 -0
  28. package/dist/core/failureRecovery.js.map +1 -0
  29. package/dist/core/learningPersistence.d.ts +145 -0
  30. package/dist/core/learningPersistence.d.ts.map +1 -0
  31. package/dist/core/learningPersistence.js +477 -0
  32. package/dist/core/learningPersistence.js.map +1 -0
  33. package/dist/core/memorySystem.d.ts +67 -0
  34. package/dist/core/memorySystem.d.ts.map +1 -0
  35. package/dist/core/memorySystem.js +334 -0
  36. package/dist/core/memorySystem.js.map +1 -0
  37. package/dist/core/metricsTracker.d.ts +35 -0
  38. package/dist/core/metricsTracker.d.ts.map +1 -1
  39. package/dist/core/metricsTracker.js +67 -0
  40. package/dist/core/metricsTracker.js.map +1 -1
  41. package/dist/core/outputStyles.d.ts +48 -0
  42. package/dist/core/outputStyles.d.ts.map +1 -0
  43. package/dist/core/outputStyles.js +270 -0
  44. package/dist/core/outputStyles.js.map +1 -0
  45. package/dist/core/selfEvolution.d.ts +155 -0
  46. package/dist/core/selfEvolution.d.ts.map +1 -0
  47. package/dist/core/selfEvolution.js +1000 -0
  48. package/dist/core/selfEvolution.js.map +1 -0
  49. package/dist/core/selfImprovement.d.ts +141 -0
  50. package/dist/core/selfImprovement.d.ts.map +1 -0
  51. package/dist/core/selfImprovement.js +700 -0
  52. package/dist/core/selfImprovement.js.map +1 -0
  53. package/dist/core/updateManager.d.ts +62 -0
  54. package/dist/core/updateManager.d.ts.map +1 -0
  55. package/dist/core/updateManager.js +266 -0
  56. package/dist/core/updateManager.js.map +1 -0
  57. package/dist/shell/interactiveShell.d.ts +45 -0
  58. package/dist/shell/interactiveShell.d.ts.map +1 -1
  59. package/dist/shell/interactiveShell.js +1157 -4
  60. package/dist/shell/interactiveShell.js.map +1 -1
  61. package/dist/shell/keyboardShortcuts.d.ts +53 -0
  62. package/dist/shell/keyboardShortcuts.d.ts.map +1 -0
  63. package/dist/shell/keyboardShortcuts.js +163 -0
  64. package/dist/shell/keyboardShortcuts.js.map +1 -0
  65. package/dist/shell/terminalInput.d.ts +1 -1
  66. package/dist/shell/terminalInput.d.ts.map +1 -1
  67. package/dist/shell/terminalInput.js +8 -4
  68. package/dist/shell/terminalInput.js.map +1 -1
  69. package/dist/shell/vimMode.d.ts +66 -0
  70. package/dist/shell/vimMode.d.ts.map +1 -0
  71. package/dist/shell/vimMode.js +434 -0
  72. package/dist/shell/vimMode.js.map +1 -0
  73. package/dist/subagents/parallelAgentManager.d.ts +99 -0
  74. package/dist/subagents/parallelAgentManager.d.ts.map +1 -0
  75. package/dist/subagents/parallelAgentManager.js +249 -0
  76. package/dist/subagents/parallelAgentManager.js.map +1 -0
  77. package/dist/subagents/taskRunner.d.ts +6 -1
  78. package/dist/subagents/taskRunner.d.ts.map +1 -1
  79. package/dist/subagents/taskRunner.js +57 -2
  80. package/dist/subagents/taskRunner.js.map +1 -1
  81. package/dist/tools/planningTools.d.ts +9 -0
  82. package/dist/tools/planningTools.d.ts.map +1 -1
  83. package/dist/tools/planningTools.js +90 -0
  84. package/dist/tools/planningTools.js.map +1 -1
  85. package/dist/ui/ShellUIAdapter.d.ts +11 -1
  86. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  87. package/dist/ui/ShellUIAdapter.js +73 -9
  88. package/dist/ui/ShellUIAdapter.js.map +1 -1
  89. package/dist/ui/display.d.ts +5 -0
  90. package/dist/ui/display.d.ts.map +1 -1
  91. package/dist/ui/display.js +14 -0
  92. package/dist/ui/display.js.map +1 -1
  93. package/dist/ui/shortcutsHelp.d.ts +11 -0
  94. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  95. package/dist/ui/shortcutsHelp.js +59 -3
  96. package/dist/ui/shortcutsHelp.js.map +1 -1
  97. 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"}