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
|
+
* 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":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent Test Flow Generator
|
|
3
|
+
*
|
|
4
|
+
* Creates highly complex, intelligent test flows for runtime verification:
|
|
5
|
+
* - Edge case detection and generation
|
|
6
|
+
* - State machine exploration
|
|
7
|
+
* - Fuzzing with smart mutations
|
|
8
|
+
* - Regression test generation
|
|
9
|
+
* - UI interaction simulation
|
|
10
|
+
*
|
|
11
|
+
* Principal Investigator: Bo Shang
|
|
12
|
+
*/
|
|
13
|
+
export interface TestFlow {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
category: 'unit' | 'integration' | 'edge-case' | 'regression' | 'ui' | 'stress';
|
|
18
|
+
steps: TestStep[];
|
|
19
|
+
preconditions: string[];
|
|
20
|
+
postconditions: string[];
|
|
21
|
+
expectedOutcome: string;
|
|
22
|
+
complexity: 'simple' | 'moderate' | 'complex' | 'extreme';
|
|
23
|
+
priority: number;
|
|
24
|
+
generatedAt: string;
|
|
25
|
+
}
|
|
26
|
+
export interface TestStep {
|
|
27
|
+
order: number;
|
|
28
|
+
action: string;
|
|
29
|
+
input?: Record<string, unknown>;
|
|
30
|
+
expectedOutput?: unknown;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
retries?: number;
|
|
33
|
+
assertions: Assertion[];
|
|
34
|
+
}
|
|
35
|
+
export interface Assertion {
|
|
36
|
+
type: 'equals' | 'contains' | 'matches' | 'throws' | 'resolves' | 'type' | 'truthy' | 'falsy';
|
|
37
|
+
target: string;
|
|
38
|
+
expected?: unknown;
|
|
39
|
+
message?: string;
|
|
40
|
+
}
|
|
41
|
+
export interface EdgeCase {
|
|
42
|
+
id: string;
|
|
43
|
+
category: string;
|
|
44
|
+
description: string;
|
|
45
|
+
input: unknown;
|
|
46
|
+
expectedBehavior: string;
|
|
47
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
48
|
+
detected: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface TestResult {
|
|
51
|
+
flowId: string;
|
|
52
|
+
passed: boolean;
|
|
53
|
+
duration: number;
|
|
54
|
+
steps: StepResult[];
|
|
55
|
+
errors: string[];
|
|
56
|
+
coverage: number;
|
|
57
|
+
}
|
|
58
|
+
export interface StepResult {
|
|
59
|
+
order: number;
|
|
60
|
+
passed: boolean;
|
|
61
|
+
duration: number;
|
|
62
|
+
error?: string;
|
|
63
|
+
actualOutput?: unknown;
|
|
64
|
+
}
|
|
65
|
+
export interface BugReport {
|
|
66
|
+
id: string;
|
|
67
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
68
|
+
type: 'crash' | 'logic' | 'ui' | 'performance' | 'security' | 'edge-case';
|
|
69
|
+
title: string;
|
|
70
|
+
description: string;
|
|
71
|
+
reproSteps: string[];
|
|
72
|
+
expectedBehavior: string;
|
|
73
|
+
actualBehavior: string;
|
|
74
|
+
stackTrace?: string;
|
|
75
|
+
file?: string;
|
|
76
|
+
line?: number;
|
|
77
|
+
suggestedFix?: string;
|
|
78
|
+
testFlow?: TestFlow;
|
|
79
|
+
detectedAt: string;
|
|
80
|
+
}
|
|
81
|
+
export interface UIUpdate {
|
|
82
|
+
component: string;
|
|
83
|
+
type: 'style' | 'layout' | 'behavior' | 'accessibility' | 'performance';
|
|
84
|
+
description: string;
|
|
85
|
+
before: string;
|
|
86
|
+
after: string;
|
|
87
|
+
file: string;
|
|
88
|
+
line?: number;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate edge cases for a given function/component
|
|
92
|
+
*/
|
|
93
|
+
export declare function generateEdgeCases(targetName: string, paramTypes: Record<string, string>): EdgeCase[];
|
|
94
|
+
/**
|
|
95
|
+
* Generate intelligent test flows for a component
|
|
96
|
+
*/
|
|
97
|
+
export declare function generateTestFlows(workingDir: string, targetPath: string): TestFlow[];
|
|
98
|
+
/**
|
|
99
|
+
* Analyze code for potential bugs
|
|
100
|
+
*/
|
|
101
|
+
export declare function detectBugs(workingDir: string): BugReport[];
|
|
102
|
+
/**
|
|
103
|
+
* Detect needed UI updates
|
|
104
|
+
*/
|
|
105
|
+
export declare function detectUIUpdates(workingDir: string): UIUpdate[];
|
|
106
|
+
/**
|
|
107
|
+
* Save test flows to disk
|
|
108
|
+
*/
|
|
109
|
+
export declare function saveTestFlows(flows: TestFlow[]): void;
|
|
110
|
+
/**
|
|
111
|
+
* Load test flows from disk
|
|
112
|
+
*/
|
|
113
|
+
export declare function loadTestFlows(): TestFlow[];
|
|
114
|
+
/**
|
|
115
|
+
* Save bug reports
|
|
116
|
+
*/
|
|
117
|
+
export declare function saveBugReports(bugs: BugReport[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Save UI updates
|
|
120
|
+
*/
|
|
121
|
+
export declare function saveUIUpdates(updates: UIUpdate[]): void;
|
|
122
|
+
/**
|
|
123
|
+
* Get comprehensive test/bug status
|
|
124
|
+
*/
|
|
125
|
+
export declare function getTestFlowStatus(workingDir: string): string;
|
|
126
|
+
//# sourceMappingURL=intelligentTestFlows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligentTestFlows.d.ts","sourceRoot":"","sources":["../../src/core/intelligentTestFlows.ts"],"names":[],"mappings":"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"}
|