erosolar-cli 1.7.373 → 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.
- 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 +100 -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/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 +45 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +1156 -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 +1 -1
- package/dist/shell/terminalInput.d.ts.map +1 -1
- package/dist/shell/terminalInput.js +8 -4
- package/dist/shell/terminalInput.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 +34 -3
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent Failure Detection and Recovery System
|
|
3
|
+
*
|
|
4
|
+
* Detects non-working solutions and applies AlphaZero-style learning to:
|
|
5
|
+
* 1. Identify failure patterns
|
|
6
|
+
* 2. Generate alternative approaches
|
|
7
|
+
* 3. Store successful recoveries for reuse
|
|
8
|
+
* 4. Optionally update source code when patterns are reliable
|
|
9
|
+
*
|
|
10
|
+
* Principal Investigator: Bo Shang
|
|
11
|
+
*/
|
|
12
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { recordFailurePattern, addToolPattern, getFailurePatternsToAvoid, getBestToolPattern, } from './learningPersistence.js';
|
|
16
|
+
import { classifyTaskType, } from './alphaZeroEngine.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// FAILURE DETECTION
|
|
19
|
+
// ============================================================================
|
|
20
|
+
const FAILURE_INDICATORS = {
|
|
21
|
+
build: [
|
|
22
|
+
/error\s+TS\d+/i, // TypeScript errors
|
|
23
|
+
/SyntaxError/i, // Syntax errors
|
|
24
|
+
/Cannot find module/i, // Missing modules
|
|
25
|
+
/error:\s+/i, // Generic errors
|
|
26
|
+
/failed with exit code/i, // Build failures
|
|
27
|
+
/npm ERR!/i, // npm errors
|
|
28
|
+
],
|
|
29
|
+
test: [
|
|
30
|
+
/FAIL\s+/, // Jest failures
|
|
31
|
+
/AssertionError/i, // Assertion failures
|
|
32
|
+
/Expected.*but got/i, // Value mismatches
|
|
33
|
+
/\d+ failing/i, // Test count failures
|
|
34
|
+
/Error: expect/i, // Expect errors
|
|
35
|
+
],
|
|
36
|
+
runtime: [
|
|
37
|
+
/TypeError:/i,
|
|
38
|
+
/ReferenceError:/i,
|
|
39
|
+
/RangeError:/i,
|
|
40
|
+
/Uncaught/i,
|
|
41
|
+
/ENOENT/i,
|
|
42
|
+
/EACCES/i,
|
|
43
|
+
/ETIMEDOUT/i,
|
|
44
|
+
],
|
|
45
|
+
userFeedback: [
|
|
46
|
+
/doesn't work/i,
|
|
47
|
+
/didn't work/i,
|
|
48
|
+
/not working/i,
|
|
49
|
+
/still broken/i,
|
|
50
|
+
/wrong/i,
|
|
51
|
+
/incorrect/i,
|
|
52
|
+
/that's not right/i,
|
|
53
|
+
/try again/i,
|
|
54
|
+
/failed/i,
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Detect failure from output/response
|
|
59
|
+
*/
|
|
60
|
+
export function detectFailure(output, context) {
|
|
61
|
+
// Check for build failures
|
|
62
|
+
for (const pattern of FAILURE_INDICATORS.build) {
|
|
63
|
+
if (pattern.test(output)) {
|
|
64
|
+
return {
|
|
65
|
+
type: 'build',
|
|
66
|
+
severity: 'critical',
|
|
67
|
+
message: extractErrorMessage(output, pattern),
|
|
68
|
+
context: { pattern: pattern.source },
|
|
69
|
+
timestamp: new Date().toISOString(),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Check for test failures
|
|
74
|
+
for (const pattern of FAILURE_INDICATORS.test) {
|
|
75
|
+
if (pattern.test(output)) {
|
|
76
|
+
return {
|
|
77
|
+
type: 'test',
|
|
78
|
+
severity: 'major',
|
|
79
|
+
message: extractErrorMessage(output, pattern),
|
|
80
|
+
context: { pattern: pattern.source },
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Check for runtime errors
|
|
86
|
+
for (const pattern of FAILURE_INDICATORS.runtime) {
|
|
87
|
+
if (pattern.test(output)) {
|
|
88
|
+
return {
|
|
89
|
+
type: 'tool',
|
|
90
|
+
severity: 'major',
|
|
91
|
+
message: extractErrorMessage(output, pattern),
|
|
92
|
+
context: { pattern: pattern.source },
|
|
93
|
+
timestamp: new Date().toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Check for user feedback indicating failure
|
|
98
|
+
if (context.userMessage) {
|
|
99
|
+
for (const pattern of FAILURE_INDICATORS.userFeedback) {
|
|
100
|
+
if (pattern.test(context.userMessage)) {
|
|
101
|
+
return {
|
|
102
|
+
type: 'user-feedback',
|
|
103
|
+
severity: 'major',
|
|
104
|
+
message: context.userMessage.slice(0, 200),
|
|
105
|
+
timestamp: new Date().toISOString(),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Check for tool call failures
|
|
111
|
+
if (context.toolCalls) {
|
|
112
|
+
const failures = context.toolCalls.filter(t => !t.success);
|
|
113
|
+
if (failures.length > 0 && failures.length / context.toolCalls.length > 0.3) {
|
|
114
|
+
return {
|
|
115
|
+
type: 'tool',
|
|
116
|
+
severity: 'major',
|
|
117
|
+
message: `${failures.length}/${context.toolCalls.length} tool calls failed`,
|
|
118
|
+
context: { failedTools: failures.map(t => t.name) },
|
|
119
|
+
timestamp: new Date().toISOString(),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
function extractErrorMessage(output, pattern) {
|
|
126
|
+
const match = output.match(pattern);
|
|
127
|
+
if (!match)
|
|
128
|
+
return 'Unknown error';
|
|
129
|
+
// Get the line containing the match and a few surrounding lines
|
|
130
|
+
const lines = output.split('\n');
|
|
131
|
+
for (let i = 0; i < lines.length; i++) {
|
|
132
|
+
if (pattern.test(lines[i])) {
|
|
133
|
+
const start = Math.max(0, i);
|
|
134
|
+
const end = Math.min(lines.length, i + 3);
|
|
135
|
+
return lines.slice(start, end).join('\n').slice(0, 300);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return match[0].slice(0, 200);
|
|
139
|
+
}
|
|
140
|
+
const recentActions = [];
|
|
141
|
+
const MAX_ACTION_HISTORY = 20;
|
|
142
|
+
/**
|
|
143
|
+
* Record an action and detect if we're in a loop
|
|
144
|
+
*/
|
|
145
|
+
export function recordActionAndDetectLoop(action) {
|
|
146
|
+
const now = Date.now();
|
|
147
|
+
// Add to history
|
|
148
|
+
recentActions.push({ action, timestamp: now });
|
|
149
|
+
// Keep only recent actions
|
|
150
|
+
while (recentActions.length > MAX_ACTION_HISTORY) {
|
|
151
|
+
recentActions.shift();
|
|
152
|
+
}
|
|
153
|
+
// Detect loops: same action appearing 3+ times in last 10 actions
|
|
154
|
+
const recent = recentActions.slice(-10);
|
|
155
|
+
const actionCounts = new Map();
|
|
156
|
+
for (const r of recent) {
|
|
157
|
+
actionCounts.set(r.action, (actionCounts.get(r.action) || 0) + 1);
|
|
158
|
+
}
|
|
159
|
+
for (const [act, count] of actionCounts) {
|
|
160
|
+
if (count >= 3) {
|
|
161
|
+
return {
|
|
162
|
+
type: 'loop-detected',
|
|
163
|
+
severity: 'major',
|
|
164
|
+
message: `Detected repeated action: "${act}" (${count} times in last ${recent.length} actions)`,
|
|
165
|
+
context: { repeatedAction: act, count },
|
|
166
|
+
timestamp: new Date().toISOString(),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Clear action history (call after successful task completion)
|
|
174
|
+
*/
|
|
175
|
+
export function clearActionHistory() {
|
|
176
|
+
recentActions.length = 0;
|
|
177
|
+
}
|
|
178
|
+
// ============================================================================
|
|
179
|
+
// RECOVERY STRATEGIES
|
|
180
|
+
// ============================================================================
|
|
181
|
+
const RECOVERY_STRATEGIES_FILE = join(homedir(), '.erosolar', 'learning', 'recovery-strategies.json');
|
|
182
|
+
function loadRecoveryStrategies() {
|
|
183
|
+
const defaultData = {
|
|
184
|
+
version: 1,
|
|
185
|
+
strategies: [],
|
|
186
|
+
};
|
|
187
|
+
try {
|
|
188
|
+
if (!existsSync(RECOVERY_STRATEGIES_FILE)) {
|
|
189
|
+
return defaultData;
|
|
190
|
+
}
|
|
191
|
+
const content = readFileSync(RECOVERY_STRATEGIES_FILE, 'utf-8');
|
|
192
|
+
return JSON.parse(content);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return defaultData;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function saveRecoveryStrategies(data) {
|
|
199
|
+
const dir = dirname(RECOVERY_STRATEGIES_FILE);
|
|
200
|
+
if (!existsSync(dir)) {
|
|
201
|
+
mkdirSync(dir, { recursive: true });
|
|
202
|
+
}
|
|
203
|
+
writeFileSync(RECOVERY_STRATEGIES_FILE, JSON.stringify(data, null, 2));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Find a recovery strategy for a failure type
|
|
207
|
+
*/
|
|
208
|
+
export function findRecoveryStrategy(failure) {
|
|
209
|
+
const data = loadRecoveryStrategies();
|
|
210
|
+
// Look for matching strategy
|
|
211
|
+
const candidates = data.strategies.filter(s => {
|
|
212
|
+
if (s.failureType !== failure.type)
|
|
213
|
+
return false;
|
|
214
|
+
// Check if error pattern matches
|
|
215
|
+
try {
|
|
216
|
+
const pattern = new RegExp(s.errorPattern, 'i');
|
|
217
|
+
return pattern.test(failure.message);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return s.errorPattern.toLowerCase().includes(failure.message.toLowerCase().slice(0, 50));
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
if (candidates.length === 0)
|
|
224
|
+
return null;
|
|
225
|
+
// Return strategy with best success rate that has been used enough
|
|
226
|
+
const reliable = candidates.filter(s => s.timesUsed >= 2 && s.successRate >= 0.5);
|
|
227
|
+
if (reliable.length > 0) {
|
|
228
|
+
return reliable.sort((a, b) => b.successRate - a.successRate)[0];
|
|
229
|
+
}
|
|
230
|
+
return candidates[0];
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Record a successful recovery strategy
|
|
234
|
+
*/
|
|
235
|
+
export function recordRecoveryStrategy(failure, recoverySteps, success) {
|
|
236
|
+
const data = loadRecoveryStrategies();
|
|
237
|
+
// Create error pattern signature
|
|
238
|
+
const errorPattern = createErrorSignature(failure.message);
|
|
239
|
+
// Find existing strategy
|
|
240
|
+
const existing = data.strategies.find(s => s.failureType === failure.type && s.errorPattern === errorPattern);
|
|
241
|
+
if (existing) {
|
|
242
|
+
existing.timesUsed++;
|
|
243
|
+
existing.successRate = (existing.successRate * (existing.timesUsed - 1) + (success ? 1 : 0)) / existing.timesUsed;
|
|
244
|
+
if (success) {
|
|
245
|
+
existing.lastSuccess = new Date().toISOString();
|
|
246
|
+
// Merge recovery steps if different
|
|
247
|
+
for (const step of recoverySteps) {
|
|
248
|
+
if (!existing.recoverySteps.includes(step)) {
|
|
249
|
+
existing.recoverySteps.push(step);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
data.strategies.push({
|
|
256
|
+
id: `recovery-${Date.now()}`,
|
|
257
|
+
failureType: failure.type,
|
|
258
|
+
errorPattern,
|
|
259
|
+
recoverySteps,
|
|
260
|
+
successRate: success ? 1 : 0,
|
|
261
|
+
timesUsed: 1,
|
|
262
|
+
lastSuccess: success ? new Date().toISOString() : '',
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
// Keep top 100 strategies
|
|
266
|
+
data.strategies.sort((a, b) => b.successRate * b.timesUsed - a.successRate * a.timesUsed);
|
|
267
|
+
if (data.strategies.length > 100) {
|
|
268
|
+
data.strategies.length = 100;
|
|
269
|
+
}
|
|
270
|
+
saveRecoveryStrategies(data);
|
|
271
|
+
}
|
|
272
|
+
function createErrorSignature(message) {
|
|
273
|
+
// Extract key parts of error message
|
|
274
|
+
return message
|
|
275
|
+
.replace(/\d+/g, 'N') // Replace numbers
|
|
276
|
+
.replace(/['"`].*?['"`]/g, 'S') // Replace quoted strings
|
|
277
|
+
.replace(/\/\S+/g, 'P') // Replace paths
|
|
278
|
+
.slice(0, 100);
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// GENERATE RECOVERY PROMPTS
|
|
282
|
+
// ============================================================================
|
|
283
|
+
/**
|
|
284
|
+
* Generate a prompt for recovering from failure
|
|
285
|
+
*/
|
|
286
|
+
export function generateRecoveryPrompt(failure, originalApproach, taskType) {
|
|
287
|
+
// Check for existing recovery strategy
|
|
288
|
+
const strategy = findRecoveryStrategy(failure);
|
|
289
|
+
// Check for failure patterns to avoid
|
|
290
|
+
const avoidPatterns = getFailurePatternsToAvoid(taskType);
|
|
291
|
+
// Get best tool pattern for this task type
|
|
292
|
+
const bestPattern = getBestToolPattern(taskType);
|
|
293
|
+
let prompt = `The previous approach failed. Here's what went wrong:\n\n`;
|
|
294
|
+
prompt += `FAILURE TYPE: ${failure.type}\n`;
|
|
295
|
+
prompt += `ERROR: ${failure.message}\n\n`;
|
|
296
|
+
prompt += `ORIGINAL APPROACH:\n${originalApproach.slice(0, 500)}\n\n`;
|
|
297
|
+
if (strategy) {
|
|
298
|
+
prompt += `KNOWN RECOVERY STRATEGY (${Math.round(strategy.successRate * 100)}% success rate):\n`;
|
|
299
|
+
for (const step of strategy.recoverySteps) {
|
|
300
|
+
prompt += `- ${step}\n`;
|
|
301
|
+
}
|
|
302
|
+
prompt += '\n';
|
|
303
|
+
}
|
|
304
|
+
if (avoidPatterns.length > 0) {
|
|
305
|
+
prompt += `AVOID THESE APPROACHES (known to fail):\n`;
|
|
306
|
+
for (const p of avoidPatterns.slice(0, 3)) {
|
|
307
|
+
prompt += `- ${p.avoidanceHint}\n`;
|
|
308
|
+
}
|
|
309
|
+
prompt += '\n';
|
|
310
|
+
}
|
|
311
|
+
if (bestPattern) {
|
|
312
|
+
prompt += `RECOMMENDED TOOL SEQUENCE for ${taskType}:\n`;
|
|
313
|
+
prompt += `${bestPattern.toolSequence.join(' → ')}\n\n`;
|
|
314
|
+
}
|
|
315
|
+
prompt += `Generate an alternative approach that:\n`;
|
|
316
|
+
prompt += `1. Addresses the root cause of the failure\n`;
|
|
317
|
+
prompt += `2. Uses a different strategy than the original\n`;
|
|
318
|
+
prompt += `3. Avoids known failure patterns\n`;
|
|
319
|
+
prompt += `4. Can be verified to work\n`;
|
|
320
|
+
return prompt;
|
|
321
|
+
}
|
|
322
|
+
// ============================================================================
|
|
323
|
+
// SOURCE CODE FIX TRACKING
|
|
324
|
+
// ============================================================================
|
|
325
|
+
const SOURCE_FIXES_FILE = join(homedir(), '.erosolar', 'learning', 'source-fixes.json');
|
|
326
|
+
function loadSourceFixes() {
|
|
327
|
+
const defaultData = { version: 1, fixes: [] };
|
|
328
|
+
try {
|
|
329
|
+
if (!existsSync(SOURCE_FIXES_FILE))
|
|
330
|
+
return defaultData;
|
|
331
|
+
return JSON.parse(readFileSync(SOURCE_FIXES_FILE, 'utf-8'));
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return defaultData;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
function saveSourceFixes(data) {
|
|
338
|
+
const dir = dirname(SOURCE_FIXES_FILE);
|
|
339
|
+
if (!existsSync(dir))
|
|
340
|
+
mkdirSync(dir, { recursive: true });
|
|
341
|
+
writeFileSync(SOURCE_FIXES_FILE, JSON.stringify(data, null, 2));
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Record a potential source code fix
|
|
345
|
+
*/
|
|
346
|
+
export function recordPotentialSourceFix(filePath, description, originalCode, fixedCode, failureType) {
|
|
347
|
+
const data = loadSourceFixes();
|
|
348
|
+
// Check for similar fix
|
|
349
|
+
const existing = data.fixes.find(f => f.filePath === filePath && f.fixedCode === fixedCode);
|
|
350
|
+
if (existing) {
|
|
351
|
+
existing.validatedCount++;
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
data.fixes.push({
|
|
355
|
+
id: `fix-${Date.now()}`,
|
|
356
|
+
filePath,
|
|
357
|
+
description,
|
|
358
|
+
originalCode: originalCode.slice(0, 1000),
|
|
359
|
+
fixedCode: fixedCode.slice(0, 1000),
|
|
360
|
+
failureType,
|
|
361
|
+
validatedCount: 1,
|
|
362
|
+
appliedToSource: false,
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
saveSourceFixes(data);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Get all source code fixes
|
|
369
|
+
*/
|
|
370
|
+
export function getSourceCodeFixes() {
|
|
371
|
+
const data = loadSourceFixes();
|
|
372
|
+
return data.fixes;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Get validated source fixes that should be applied
|
|
376
|
+
*/
|
|
377
|
+
export function getValidatedSourceFixes(minValidations = 3) {
|
|
378
|
+
const data = loadSourceFixes();
|
|
379
|
+
return data.fixes.filter(f => f.validatedCount >= minValidations && !f.appliedToSource);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Mark a fix as applied to source
|
|
383
|
+
*/
|
|
384
|
+
export function markFixApplied(fixId) {
|
|
385
|
+
const data = loadSourceFixes();
|
|
386
|
+
const fix = data.fixes.find(f => f.id === fixId);
|
|
387
|
+
if (fix) {
|
|
388
|
+
fix.appliedToSource = true;
|
|
389
|
+
saveSourceFixes(data);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// ============================================================================
|
|
393
|
+
// APPLY LEARNED FIXES TO EROSOLAR SOURCE
|
|
394
|
+
// ============================================================================
|
|
395
|
+
/**
|
|
396
|
+
* Check if we should suggest applying fixes to erosolar source
|
|
397
|
+
*/
|
|
398
|
+
export function suggestSourceUpdates(workingDir) {
|
|
399
|
+
const validatedFixes = getValidatedSourceFixes();
|
|
400
|
+
if (validatedFixes.length === 0) {
|
|
401
|
+
return {
|
|
402
|
+
shouldSuggest: false,
|
|
403
|
+
fixes: [],
|
|
404
|
+
reason: 'No fixes have been validated enough times yet.',
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
// Check if we're in the erosolar repo
|
|
408
|
+
const isErosolarRepo = workingDir.includes('erosolar') || existsSync(join(workingDir, 'src/shell/interactiveShell.ts'));
|
|
409
|
+
if (!isErosolarRepo) {
|
|
410
|
+
return {
|
|
411
|
+
shouldSuggest: false,
|
|
412
|
+
fixes: validatedFixes,
|
|
413
|
+
reason: 'Not in erosolar repository. Run /learn commit to save fixes for later.',
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
return {
|
|
417
|
+
shouldSuggest: true,
|
|
418
|
+
fixes: validatedFixes,
|
|
419
|
+
reason: `${validatedFixes.length} validated fix(es) ready to apply.`,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Generate commit message for learning-based updates
|
|
424
|
+
*/
|
|
425
|
+
export function generateLearningCommitMessage(fixes) {
|
|
426
|
+
const types = [...new Set(fixes.map(f => f.failureType))];
|
|
427
|
+
const files = [...new Set(fixes.map(f => f.filePath.split('/').pop()))];
|
|
428
|
+
return `fix: apply AlphaZero-learned improvements
|
|
429
|
+
|
|
430
|
+
Automated fixes based on ${fixes.length} validated recovery patterns:
|
|
431
|
+
- Failure types addressed: ${types.join(', ')}
|
|
432
|
+
- Files affected: ${files.join(', ')}
|
|
433
|
+
|
|
434
|
+
These fixes were learned from repeated successful recoveries and have been
|
|
435
|
+
validated ${Math.min(...fixes.map(f => f.validatedCount))}+ times each.
|
|
436
|
+
|
|
437
|
+
🤖 Auto-generated by erosolar-cli AlphaZero learning system`;
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Main entry point for failure recovery
|
|
441
|
+
* Call this when a failure is detected
|
|
442
|
+
*/
|
|
443
|
+
export function initiateRecovery(failure, originalApproach, toolCalls, userQuery) {
|
|
444
|
+
const taskType = classifyTaskType(userQuery);
|
|
445
|
+
// Record the failure
|
|
446
|
+
recordFailurePattern(taskType, toolCalls.map(t => t.name), failure.message, `Avoid this approach for ${failure.type} errors`);
|
|
447
|
+
// Find or generate recovery strategy
|
|
448
|
+
const strategy = findRecoveryStrategy(failure);
|
|
449
|
+
// Generate recovery prompt
|
|
450
|
+
const recoveryPrompt = generateRecoveryPrompt(failure, originalApproach, taskType);
|
|
451
|
+
return {
|
|
452
|
+
recoveryPrompt,
|
|
453
|
+
strategy,
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Record successful recovery for future use
|
|
458
|
+
*/
|
|
459
|
+
export function recordSuccessfulRecovery(failure, recoveryApproach, toolCalls, userQuery, qualityScore) {
|
|
460
|
+
const taskType = classifyTaskType(userQuery);
|
|
461
|
+
// Record the successful recovery strategy
|
|
462
|
+
const steps = toolCalls.map(t => `${t.name}: ${t.success ? 'success' : 'failed'}`);
|
|
463
|
+
recordRecoveryStrategy(failure, steps, true);
|
|
464
|
+
// Record successful tool pattern
|
|
465
|
+
if (toolCalls.length > 0) {
|
|
466
|
+
addToolPattern(taskType, {
|
|
467
|
+
taskType,
|
|
468
|
+
toolSequence: toolCalls.map(t => t.name),
|
|
469
|
+
successRate: 1,
|
|
470
|
+
avgDuration: toolCalls.reduce((sum, t) => sum + t.duration, 0),
|
|
471
|
+
occurrences: 1,
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
// Clear action history since we succeeded
|
|
475
|
+
clearActionHistory();
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=failureRecovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failureRecovery.js","sourceRoot":"","sources":["../../src/core/failureRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEd,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,gBAAgB,GAKjB,MAAM,sBAAsB,CAAC;AA8C9B,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,MAAM,kBAAkB,GAAG;IACzB,KAAK,EAAE;QACL,gBAAgB,EAAe,oBAAoB;QACnD,cAAc,EAAkB,gBAAgB;QAChD,qBAAqB,EAAW,kBAAkB;QAClD,YAAY,EAAoB,iBAAiB;QACjD,wBAAwB,EAAQ,iBAAiB;QACjD,WAAW,EAAqB,aAAa;KAC9C;IACD,IAAI,EAAE;QACJ,SAAS,EAAuB,gBAAgB;QAChD,iBAAiB,EAAe,qBAAqB;QACrD,oBAAoB,EAAY,mBAAmB;QACnD,cAAc,EAAkB,sBAAsB;QACtD,gBAAgB,EAAgB,gBAAgB;KACjD;IACD,OAAO,EAAE;QACP,aAAa;QACb,kBAAkB;QAClB,cAAc;QACd,WAAW;QACX,SAAS;QACT,SAAS;QACT,YAAY;KACb;IACD,YAAY,EAAE;QACZ,eAAe;QACf,cAAc;QACd,cAAc;QACd,eAAe;QACf,QAAQ;QACR,YAAY;QACZ,mBAAmB;QACnB,YAAY;QACZ,SAAS;KACV;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,OAA+D;IAE/D,2BAA2B;IAC3B,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,KAAK,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC7C,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;gBACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC7C,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;gBACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC7C,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE;gBACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,YAAY,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtC,OAAO;oBACL,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBAC1C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5E,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,oBAAoB;gBAC3E,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACnD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,OAAe;IAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IAEnC,gEAAgE;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC;AAWD,MAAM,aAAa,GAAmB,EAAE,CAAC;AACzC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAc;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,iBAAiB;IACjB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAE/C,2BAA2B;IAC3B,OAAO,aAAa,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACjD,aAAa,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,kEAAkE;IAClE,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,8BAA8B,GAAG,MAAM,KAAK,kBAAkB,MAAM,CAAC,MAAM,WAAW;gBAC/F,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE;gBACvC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,0BAA0B,CAAC,CAAC;AAOtG,SAAS,sBAAsB;IAC7B,MAAM,WAAW,GAA2B;QAC1C,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAC1C,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA2B,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAA4B;IAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,aAAa,CAAC,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsB;IACzD,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;IAEtC,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC5C,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACjD,iCAAiC;QACjC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAChD,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,mEAAmE;IACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IAClF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,CAAC;IACpE,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAsB,EACtB,aAAuB,EACvB,OAAgB;IAEhB,MAAM,IAAI,GAAG,sBAAsB,EAAE,CAAC;IAEtC,iCAAiC;IACjC,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CACvE,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,SAAS,EAAE,CAAC;QACrB,QAAQ,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC;QAClH,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAChD,oCAAoC;YACpC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE;YAC5B,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,YAAY;YACZ,aAAa;YACb,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;SACrD,CAAC,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC;IAC/B,CAAC;IAED,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,qCAAqC;IACrC,OAAO,OAAO;SACX,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAW,kBAAkB;SACjD,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,yBAAyB;SACxD,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAS,gBAAgB;SAC/C,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAsB,EACtB,gBAAwB,EACxB,QAAgB;IAEhB,uCAAuC;IACvC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE/C,sCAAsC;IACtC,MAAM,aAAa,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAE1D,2CAA2C;IAC3C,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,MAAM,GAAG,2DAA2D,CAAC;IACzE,MAAM,IAAI,iBAAiB,OAAO,CAAC,IAAI,IAAI,CAAC;IAC5C,MAAM,IAAI,UAAU,OAAO,CAAC,OAAO,MAAM,CAAC;IAC1C,MAAM,IAAI,uBAAuB,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAEtE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,4BAA4B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC,oBAAoB,CAAC;QACjG,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,2CAA2C,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,CAAC,aAAa,IAAI,CAAC;QACrC,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,iCAAiC,QAAQ,KAAK,CAAC;QACzD,MAAM,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1D,CAAC;IAED,MAAM,IAAI,0CAA0C,CAAC;IACrD,MAAM,IAAI,8CAA8C,CAAC;IACzD,MAAM,IAAI,kDAAkD,CAAC;IAC7D,MAAM,IAAI,oCAAoC,CAAC;IAC/C,MAAM,IAAI,8BAA8B,CAAC;IAEzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAOxF,SAAS,eAAe;IACtB,MAAM,WAAW,GAAoB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC/D,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAAE,OAAO,WAAW,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAoB,CAAC;IACjF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAqB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,WAAmB,EACnB,YAAoB,EACpB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAE/B,wBAAwB;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAC1D,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE;YACvB,QAAQ;YACR,WAAW;YACX,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACzC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;YACnC,WAAW;YACX,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,iBAAyB,CAAC;IAChE,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,cAAc,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACjD,IAAI,GAAG,EAAE,CAAC;QACR,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;QAC3B,eAAe,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,yCAAyC;AACzC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IAKrD,MAAM,cAAc,GAAG,uBAAuB,EAAE,CAAC;IAEjD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,gDAAgD;SACzD,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAExH,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,wEAAwE;SACjF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,oCAAoC;KACrE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAsB;IAClE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAExE,OAAO;;2BAEkB,KAAK,CAAC,MAAM;6BACV,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;;YAGxB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;;4DAEG,CAAC;AAC7D,CAAC;AAaD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAsB,EACtB,gBAAwB,EACxB,SAA2B,EAC3B,SAAiB;IAEjB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE7C,qBAAqB;IACrB,oBAAoB,CAClB,QAAQ,EACR,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAC1B,OAAO,CAAC,OAAO,EACf,2BAA2B,OAAO,CAAC,IAAI,SAAS,CACjD,CAAC;IAEF,qCAAqC;IACrC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE/C,2BAA2B;IAC3B,MAAM,cAAc,GAAG,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAEnF,OAAO;QACL,cAAc;QACd,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAsB,EACtB,gBAAwB,EACxB,SAA2B,EAC3B,SAAiB,EACjB,YAAoB;IAEpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnF,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAE7C,iCAAiC;IACjC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,cAAc,CAAC,QAAQ,EAAE;YACvB,QAAQ;YACR,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACxC,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9D,WAAW,EAAE,CAAC;SACf,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,kBAAkB,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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 type { ToolPattern } from './alphaZeroEngine.js';
|
|
16
|
+
export interface LearnedToolPatterns {
|
|
17
|
+
version: number;
|
|
18
|
+
lastUpdated: string;
|
|
19
|
+
patterns: Record<string, ToolPattern[]>;
|
|
20
|
+
}
|
|
21
|
+
export interface QualityThreshold {
|
|
22
|
+
taskType: string;
|
|
23
|
+
minAcceptable: number;
|
|
24
|
+
targetQuality: number;
|
|
25
|
+
samplesUsed: number;
|
|
26
|
+
lastUpdated: string;
|
|
27
|
+
}
|
|
28
|
+
export interface LearnedQualityThresholds {
|
|
29
|
+
version: number;
|
|
30
|
+
lastUpdated: string;
|
|
31
|
+
thresholds: Record<string, QualityThreshold>;
|
|
32
|
+
}
|
|
33
|
+
export interface FailurePattern {
|
|
34
|
+
id: string;
|
|
35
|
+
taskType: string;
|
|
36
|
+
description: string;
|
|
37
|
+
toolSequence: string[];
|
|
38
|
+
errorSignature: string;
|
|
39
|
+
occurrences: number;
|
|
40
|
+
lastSeen: string;
|
|
41
|
+
avoidanceHint: string;
|
|
42
|
+
}
|
|
43
|
+
export interface LearnedFailurePatterns {
|
|
44
|
+
version: number;
|
|
45
|
+
lastUpdated: string;
|
|
46
|
+
patterns: FailurePattern[];
|
|
47
|
+
}
|
|
48
|
+
export interface PromptImprovement {
|
|
49
|
+
id: string;
|
|
50
|
+
category: 'system' | 'tool-selection' | 'error-recovery' | 'task-decomposition';
|
|
51
|
+
originalPrompt: string;
|
|
52
|
+
improvedPrompt: string;
|
|
53
|
+
qualityGain: number;
|
|
54
|
+
validatedCount: number;
|
|
55
|
+
discoveredAt: string;
|
|
56
|
+
lastValidated: string;
|
|
57
|
+
}
|
|
58
|
+
export interface LearnedPromptImprovements {
|
|
59
|
+
version: number;
|
|
60
|
+
lastUpdated: string;
|
|
61
|
+
improvements: PromptImprovement[];
|
|
62
|
+
}
|
|
63
|
+
export interface LearningHistoryEntry {
|
|
64
|
+
timestamp: string;
|
|
65
|
+
type: 'tool-pattern' | 'quality-threshold' | 'failure-pattern' | 'prompt-improvement';
|
|
66
|
+
description: string;
|
|
67
|
+
taskType?: string;
|
|
68
|
+
qualityBefore?: number;
|
|
69
|
+
qualityAfter?: number;
|
|
70
|
+
}
|
|
71
|
+
export interface LearningHistory {
|
|
72
|
+
version: number;
|
|
73
|
+
entries: LearningHistoryEntry[];
|
|
74
|
+
}
|
|
75
|
+
export declare function loadToolPatterns(): LearnedToolPatterns;
|
|
76
|
+
export declare function saveToolPatterns(patterns: LearnedToolPatterns): void;
|
|
77
|
+
export declare function addToolPattern(taskType: string, pattern: ToolPattern): void;
|
|
78
|
+
export declare function getBestToolPattern(taskType: string): ToolPattern | null;
|
|
79
|
+
export declare function loadQualityThresholds(): LearnedQualityThresholds;
|
|
80
|
+
export declare function saveQualityThresholds(thresholds: LearnedQualityThresholds): void;
|
|
81
|
+
export declare function updateQualityThreshold(taskType: string, observedQuality: number, wasSuccessful: boolean): void;
|
|
82
|
+
export declare function getQualityThreshold(taskType: string): QualityThreshold;
|
|
83
|
+
export declare function loadFailurePatterns(): LearnedFailurePatterns;
|
|
84
|
+
export declare function saveFailurePatterns(patterns: LearnedFailurePatterns): void;
|
|
85
|
+
export declare function recordFailurePattern(taskType: string, toolSequence: string[], errorMessage: string, avoidanceHint: string): void;
|
|
86
|
+
export declare function getFailurePatternsToAvoid(taskType: string): FailurePattern[];
|
|
87
|
+
export declare function loadPromptImprovements(): LearnedPromptImprovements;
|
|
88
|
+
export declare function savePromptImprovements(improvements: LearnedPromptImprovements): void;
|
|
89
|
+
export declare function recordPromptImprovement(category: PromptImprovement['category'], originalPrompt: string, improvedPrompt: string, qualityGain: number): void;
|
|
90
|
+
export declare function getPromptImprovements(category?: PromptImprovement['category']): PromptImprovement[];
|
|
91
|
+
export declare function getRecentLearning(count?: number): LearningHistoryEntry[];
|
|
92
|
+
export interface CommitResult {
|
|
93
|
+
success: boolean;
|
|
94
|
+
commitHash?: string;
|
|
95
|
+
message?: string;
|
|
96
|
+
error?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Commit learning files to git (if in a git repo)
|
|
100
|
+
*/
|
|
101
|
+
export declare function commitLearning(description: string, workingDir: string): CommitResult;
|
|
102
|
+
export interface LearningSummary {
|
|
103
|
+
toolPatterns: {
|
|
104
|
+
totalPatterns: number;
|
|
105
|
+
taskTypes: string[];
|
|
106
|
+
bestPatterns: Array<{
|
|
107
|
+
taskType: string;
|
|
108
|
+
pattern: string;
|
|
109
|
+
successRate: number;
|
|
110
|
+
}>;
|
|
111
|
+
};
|
|
112
|
+
qualityThresholds: {
|
|
113
|
+
taskTypes: string[];
|
|
114
|
+
avgMinAcceptable: number;
|
|
115
|
+
avgTargetQuality: number;
|
|
116
|
+
};
|
|
117
|
+
failurePatterns: {
|
|
118
|
+
totalPatterns: number;
|
|
119
|
+
mostFrequent: Array<{
|
|
120
|
+
description: string;
|
|
121
|
+
occurrences: number;
|
|
122
|
+
}>;
|
|
123
|
+
};
|
|
124
|
+
promptImprovements: {
|
|
125
|
+
totalImprovements: number;
|
|
126
|
+
categories: string[];
|
|
127
|
+
avgQualityGain: number;
|
|
128
|
+
};
|
|
129
|
+
recentActivity: number;
|
|
130
|
+
}
|
|
131
|
+
export declare function getLearningSummary(): LearningSummary;
|
|
132
|
+
export interface ExportedLearning {
|
|
133
|
+
exportedAt: string;
|
|
134
|
+
toolPatterns: LearnedToolPatterns;
|
|
135
|
+
qualityThresholds: LearnedQualityThresholds;
|
|
136
|
+
failurePatterns: LearnedFailurePatterns;
|
|
137
|
+
promptImprovements: LearnedPromptImprovements;
|
|
138
|
+
}
|
|
139
|
+
export declare function exportAllLearning(): ExportedLearning;
|
|
140
|
+
export declare function importAllLearning(data: ExportedLearning): void;
|
|
141
|
+
/**
|
|
142
|
+
* Get the learning directory path
|
|
143
|
+
*/
|
|
144
|
+
export declare function getLearningDir(): string;
|
|
145
|
+
//# sourceMappingURL=learningPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learningPersistence.d.ts","sourceRoot":"","sources":["../../src/core/learningPersistence.ts"],"names":[],"mappings":"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"}
|