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.
Files changed (84) 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/alphaZeroOrchestrator.d.ts +140 -0
  6. package/dist/core/alphaZeroOrchestrator.d.ts.map +1 -0
  7. package/dist/core/alphaZeroOrchestrator.js +418 -0
  8. package/dist/core/alphaZeroOrchestrator.js.map +1 -0
  9. package/dist/core/checkpoint.d.ts +76 -0
  10. package/dist/core/checkpoint.d.ts.map +1 -0
  11. package/dist/core/checkpoint.js +278 -0
  12. package/dist/core/checkpoint.js.map +1 -0
  13. package/dist/core/claudeCodeFeatures.d.ts +64 -0
  14. package/dist/core/claudeCodeFeatures.d.ts.map +1 -0
  15. package/dist/core/claudeCodeFeatures.js +163 -0
  16. package/dist/core/claudeCodeFeatures.js.map +1 -0
  17. package/dist/core/costTracker.d.ts +87 -0
  18. package/dist/core/costTracker.d.ts.map +1 -0
  19. package/dist/core/costTracker.js +285 -0
  20. package/dist/core/costTracker.js.map +1 -0
  21. package/dist/core/failureRecovery.d.ts +122 -0
  22. package/dist/core/failureRecovery.d.ts.map +1 -0
  23. package/dist/core/failureRecovery.js +477 -0
  24. package/dist/core/failureRecovery.js.map +1 -0
  25. package/dist/core/learningPersistence.d.ts +145 -0
  26. package/dist/core/learningPersistence.d.ts.map +1 -0
  27. package/dist/core/learningPersistence.js +477 -0
  28. package/dist/core/learningPersistence.js.map +1 -0
  29. package/dist/core/memorySystem.d.ts +67 -0
  30. package/dist/core/memorySystem.d.ts.map +1 -0
  31. package/dist/core/memorySystem.js +334 -0
  32. package/dist/core/memorySystem.js.map +1 -0
  33. package/dist/core/outputStyles.d.ts +48 -0
  34. package/dist/core/outputStyles.d.ts.map +1 -0
  35. package/dist/core/outputStyles.js +270 -0
  36. package/dist/core/outputStyles.js.map +1 -0
  37. package/dist/core/selfEvolution.d.ts +155 -0
  38. package/dist/core/selfEvolution.d.ts.map +1 -0
  39. package/dist/core/selfEvolution.js +1000 -0
  40. package/dist/core/selfEvolution.js.map +1 -0
  41. package/dist/core/selfImprovement.d.ts +141 -0
  42. package/dist/core/selfImprovement.d.ts.map +1 -0
  43. package/dist/core/selfImprovement.js +700 -0
  44. package/dist/core/selfImprovement.js.map +1 -0
  45. package/dist/core/updateManager.d.ts +62 -0
  46. package/dist/core/updateManager.d.ts.map +1 -0
  47. package/dist/core/updateManager.js +266 -0
  48. package/dist/core/updateManager.js.map +1 -0
  49. package/dist/shell/interactiveShell.d.ts +45 -0
  50. package/dist/shell/interactiveShell.d.ts.map +1 -1
  51. package/dist/shell/interactiveShell.js +1156 -3
  52. package/dist/shell/interactiveShell.js.map +1 -1
  53. package/dist/shell/keyboardShortcuts.d.ts +53 -0
  54. package/dist/shell/keyboardShortcuts.d.ts.map +1 -0
  55. package/dist/shell/keyboardShortcuts.js +163 -0
  56. package/dist/shell/keyboardShortcuts.js.map +1 -0
  57. package/dist/shell/terminalInput.d.ts +1 -1
  58. package/dist/shell/terminalInput.d.ts.map +1 -1
  59. package/dist/shell/terminalInput.js +8 -4
  60. package/dist/shell/terminalInput.js.map +1 -1
  61. package/dist/shell/vimMode.d.ts +66 -0
  62. package/dist/shell/vimMode.d.ts.map +1 -0
  63. package/dist/shell/vimMode.js +434 -0
  64. package/dist/shell/vimMode.js.map +1 -0
  65. package/dist/subagents/parallelAgentManager.d.ts +99 -0
  66. package/dist/subagents/parallelAgentManager.d.ts.map +1 -0
  67. package/dist/subagents/parallelAgentManager.js +249 -0
  68. package/dist/subagents/parallelAgentManager.js.map +1 -0
  69. package/dist/subagents/taskRunner.d.ts +6 -1
  70. package/dist/subagents/taskRunner.d.ts.map +1 -1
  71. package/dist/subagents/taskRunner.js +57 -2
  72. package/dist/subagents/taskRunner.js.map +1 -1
  73. package/dist/tools/planningTools.d.ts +9 -0
  74. package/dist/tools/planningTools.d.ts.map +1 -1
  75. package/dist/tools/planningTools.js +90 -0
  76. package/dist/tools/planningTools.js.map +1 -1
  77. package/dist/ui/display.d.ts +5 -0
  78. package/dist/ui/display.d.ts.map +1 -1
  79. package/dist/ui/display.js +14 -0
  80. package/dist/ui/display.js.map +1 -1
  81. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  82. package/dist/ui/shortcutsHelp.js +34 -3
  83. package/dist/ui/shortcutsHelp.js.map +1 -1
  84. package/package.json +1 -1
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Cost Tracker - Claude Code Style
3
+ *
4
+ * Tracks token usage and API costs across the session.
5
+ * Provides real-time cost display and detailed breakdowns.
6
+ *
7
+ * Features:
8
+ * - Real-time token counting (input/output)
9
+ * - Cost estimation based on model pricing
10
+ * - Session and lifetime cost tracking
11
+ * - Detailed breakdown by model and request
12
+ */
13
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
14
+ import { homedir } from 'node:os';
15
+ import { join } from 'node:path';
16
+ const USAGE_FILE = join(homedir(), '.erosolar', 'usage.json');
17
+ /**
18
+ * Model pricing (per 1M tokens)
19
+ */
20
+ const MODEL_PRICING = {
21
+ // Anthropic
22
+ 'claude-sonnet-4-5-20250929': { input: 3.0, output: 15.0 },
23
+ 'claude-opus-4-20250514': { input: 15.0, output: 75.0 },
24
+ 'claude-haiku-4-5-20251001': { input: 0.25, output: 1.25 },
25
+ // OpenAI
26
+ 'gpt-5.1-codex-mini': { input: 0.15, output: 0.60 },
27
+ 'gpt-5.1-codex': { input: 2.5, output: 10.0 },
28
+ 'gpt-5.1': { input: 5.0, output: 15.0 },
29
+ 'gpt-5-pro': { input: 15.0, output: 60.0 },
30
+ 'gpt-5-mini': { input: 0.3, output: 1.2 },
31
+ 'gpt-5-nano': { input: 0.075, output: 0.30 },
32
+ // Google
33
+ 'gemini-2.5-pro': { input: 1.25, output: 5.0 },
34
+ 'gemini-2.5-flash': { input: 0.075, output: 0.30 },
35
+ // xAI
36
+ 'grok-4': { input: 5.0, output: 15.0 },
37
+ 'grok-4-1-fast-reasoning': { input: 2.0, output: 10.0 },
38
+ 'grok-4-1-fast-non-reasoning': { input: 0.5, output: 2.0 },
39
+ 'grok-code-fast-1': { input: 0.5, output: 2.0 },
40
+ // DeepSeek
41
+ 'deepseek-reasoner': { input: 0.55, output: 2.19 },
42
+ 'deepseek-chat': { input: 0.27, output: 1.10 },
43
+ // Default for unknown models
44
+ 'default': { input: 1.0, output: 3.0 },
45
+ };
46
+ /**
47
+ * Get pricing for a model
48
+ */
49
+ function getModelPricing(model) {
50
+ // Try exact match first
51
+ if (MODEL_PRICING[model]) {
52
+ return MODEL_PRICING[model];
53
+ }
54
+ // Try prefix match (for versioned models)
55
+ for (const [key, pricing] of Object.entries(MODEL_PRICING)) {
56
+ if (model.startsWith(key) || key.startsWith(model)) {
57
+ return pricing;
58
+ }
59
+ }
60
+ return MODEL_PRICING['default'];
61
+ }
62
+ /**
63
+ * Calculate cost for tokens
64
+ */
65
+ function calculateCost(model, inputTokens, outputTokens) {
66
+ const pricing = getModelPricing(model);
67
+ const inputCost = (inputTokens / 1_000_000) * pricing.input;
68
+ const outputCost = (outputTokens / 1_000_000) * pricing.output;
69
+ return {
70
+ inputCost,
71
+ outputCost,
72
+ totalCost: inputCost + outputCost,
73
+ };
74
+ }
75
+ /**
76
+ * Cost Tracker class
77
+ */
78
+ export class CostTracker {
79
+ sessionId;
80
+ startTime;
81
+ requests = [];
82
+ constructor(sessionId) {
83
+ this.sessionId = sessionId ?? `session_${Date.now().toString(36)}`;
84
+ this.startTime = Date.now();
85
+ }
86
+ /**
87
+ * Record a request's token usage
88
+ */
89
+ recordUsage(model, inputTokens, outputTokens, requestType = 'chat') {
90
+ const costs = calculateCost(model, inputTokens, outputTokens);
91
+ const request = {
92
+ timestamp: Date.now(),
93
+ model,
94
+ inputTokens,
95
+ outputTokens,
96
+ inputCost: costs.inputCost,
97
+ outputCost: costs.outputCost,
98
+ totalCost: costs.totalCost,
99
+ requestType,
100
+ };
101
+ this.requests.push(request);
102
+ this.saveToLifetime(request);
103
+ return request;
104
+ }
105
+ /**
106
+ * Get session usage summary
107
+ */
108
+ getSessionUsage() {
109
+ let totalInputTokens = 0;
110
+ let totalOutputTokens = 0;
111
+ let totalCost = 0;
112
+ for (const req of this.requests) {
113
+ totalInputTokens += req.inputTokens;
114
+ totalOutputTokens += req.outputTokens;
115
+ totalCost += req.totalCost;
116
+ }
117
+ return {
118
+ sessionId: this.sessionId,
119
+ startTime: this.startTime,
120
+ requests: [...this.requests],
121
+ totalInputTokens,
122
+ totalOutputTokens,
123
+ totalCost,
124
+ };
125
+ }
126
+ /**
127
+ * Get lifetime usage
128
+ */
129
+ getLifetimeUsage() {
130
+ try {
131
+ if (!existsSync(USAGE_FILE)) {
132
+ return {
133
+ totalInputTokens: 0,
134
+ totalOutputTokens: 0,
135
+ totalCost: 0,
136
+ sessions: 0,
137
+ firstUse: Date.now(),
138
+ lastUse: Date.now(),
139
+ };
140
+ }
141
+ const data = JSON.parse(readFileSync(USAGE_FILE, 'utf8'));
142
+ return data;
143
+ }
144
+ catch {
145
+ return {
146
+ totalInputTokens: 0,
147
+ totalOutputTokens: 0,
148
+ totalCost: 0,
149
+ sessions: 0,
150
+ firstUse: Date.now(),
151
+ lastUse: Date.now(),
152
+ };
153
+ }
154
+ }
155
+ /**
156
+ * Save request to lifetime usage
157
+ */
158
+ saveToLifetime(request) {
159
+ try {
160
+ const usage = this.getLifetimeUsage();
161
+ usage.totalInputTokens += request.inputTokens;
162
+ usage.totalOutputTokens += request.outputTokens;
163
+ usage.totalCost += request.totalCost;
164
+ usage.lastUse = Date.now();
165
+ mkdirSync(join(homedir(), '.erosolar'), { recursive: true });
166
+ writeFileSync(USAGE_FILE, JSON.stringify(usage, null, 2));
167
+ }
168
+ catch {
169
+ // Ignore save errors
170
+ }
171
+ }
172
+ /**
173
+ * Format session usage for display
174
+ */
175
+ formatSessionUsage() {
176
+ const usage = this.getSessionUsage();
177
+ const duration = Math.floor((Date.now() - this.startTime) / 1000);
178
+ const mins = Math.floor(duration / 60);
179
+ const secs = duration % 60;
180
+ const lines = [
181
+ 'Session Usage:',
182
+ '',
183
+ ` Duration: ${mins}m ${secs}s`,
184
+ ` Requests: ${usage.requests.length}`,
185
+ '',
186
+ ' Tokens:',
187
+ ` Input: ${formatNumber(usage.totalInputTokens)}`,
188
+ ` Output: ${formatNumber(usage.totalOutputTokens)}`,
189
+ ` Total: ${formatNumber(usage.totalInputTokens + usage.totalOutputTokens)}`,
190
+ '',
191
+ ' Cost:',
192
+ ` Input: $${usage.requests.reduce((sum, r) => sum + r.inputCost, 0).toFixed(4)}`,
193
+ ` Output: $${usage.requests.reduce((sum, r) => sum + r.outputCost, 0).toFixed(4)}`,
194
+ ` Total: $${usage.totalCost.toFixed(4)}`,
195
+ ];
196
+ return lines.join('\n');
197
+ }
198
+ /**
199
+ * Format cost breakdown for display
200
+ */
201
+ formatCostBreakdown() {
202
+ const usage = this.getSessionUsage();
203
+ const lifetime = this.getLifetimeUsage();
204
+ // Group by model
205
+ const byModel = new Map();
206
+ for (const req of usage.requests) {
207
+ const existing = byModel.get(req.model) ?? { input: 0, output: 0, cost: 0, count: 0 };
208
+ existing.input += req.inputTokens;
209
+ existing.output += req.outputTokens;
210
+ existing.cost += req.totalCost;
211
+ existing.count += 1;
212
+ byModel.set(req.model, existing);
213
+ }
214
+ const lines = [
215
+ 'Cost Breakdown:',
216
+ '',
217
+ '┌─ Session ─────────────────────────────────────┐',
218
+ `│ Total Cost: $${usage.totalCost.toFixed(4)}`,
219
+ `│ Tokens: ${formatNumber(usage.totalInputTokens + usage.totalOutputTokens)} (${formatNumber(usage.totalInputTokens)} in / ${formatNumber(usage.totalOutputTokens)} out)`,
220
+ '│',
221
+ ];
222
+ if (byModel.size > 0) {
223
+ lines.push('│ By Model:');
224
+ for (const [model, data] of byModel) {
225
+ const shortModel = model.length > 25 ? model.slice(0, 22) + '...' : model;
226
+ lines.push(`│ ${shortModel}: $${data.cost.toFixed(4)} (${data.count} req)`);
227
+ }
228
+ }
229
+ lines.push('└───────────────────────────────────────────────┘');
230
+ lines.push('');
231
+ lines.push('┌─ Lifetime ────────────────────────────────────┐');
232
+ lines.push(`│ Total Cost: $${lifetime.totalCost.toFixed(4)}`);
233
+ lines.push(`│ Total Tokens: ${formatNumber(lifetime.totalInputTokens + lifetime.totalOutputTokens)}`);
234
+ lines.push(`│ Sessions: ${lifetime.sessions}`);
235
+ lines.push('└───────────────────────────────────────────────┘');
236
+ return lines.join('\n');
237
+ }
238
+ /**
239
+ * Format compact cost display for status bar
240
+ */
241
+ formatCompactCost() {
242
+ const usage = this.getSessionUsage();
243
+ const totalTokens = usage.totalInputTokens + usage.totalOutputTokens;
244
+ return `$${usage.totalCost.toFixed(3)} · ${formatCompactNumber(totalTokens)} tok`;
245
+ }
246
+ /**
247
+ * Reset session tracking
248
+ */
249
+ reset() {
250
+ this.requests = [];
251
+ this.startTime = Date.now();
252
+ }
253
+ }
254
+ /**
255
+ * Format number with commas
256
+ */
257
+ function formatNumber(n) {
258
+ return n.toLocaleString('en-US');
259
+ }
260
+ /**
261
+ * Format number compactly (1.2k, 3.5M)
262
+ */
263
+ function formatCompactNumber(n) {
264
+ if (n >= 1_000_000) {
265
+ return `${(n / 1_000_000).toFixed(1)}M`;
266
+ }
267
+ if (n >= 1_000) {
268
+ return `${(n / 1_000).toFixed(1)}k`;
269
+ }
270
+ return n.toString();
271
+ }
272
+ /**
273
+ * Global cost tracker instance
274
+ */
275
+ let globalCostTracker = null;
276
+ export function getCostTracker(sessionId) {
277
+ if (!globalCostTracker) {
278
+ globalCostTracker = new CostTracker(sessionId);
279
+ }
280
+ return globalCostTracker;
281
+ }
282
+ export function resetCostTracker() {
283
+ globalCostTracker = null;
284
+ }
285
+ //# sourceMappingURL=costTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costTracker.js","sourceRoot":"","sources":["../../src/core/costTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
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 { type ToolCallRecord } from './alphaZeroEngine.js';
13
+ export interface FailureSignal {
14
+ type: 'build' | 'test' | 'tool' | 'user-feedback' | 'verification' | 'loop-detected';
15
+ severity: 'critical' | 'major' | 'minor';
16
+ message: string;
17
+ context?: Record<string, unknown>;
18
+ timestamp: string;
19
+ }
20
+ export interface RecoveryAttempt {
21
+ id: string;
22
+ failureSignal: FailureSignal;
23
+ originalApproach: string;
24
+ alternativeApproach: string;
25
+ success: boolean;
26
+ qualityBefore: number;
27
+ qualityAfter: number;
28
+ timestamp: string;
29
+ }
30
+ export interface RecoveryStrategy {
31
+ id: string;
32
+ failureType: string;
33
+ errorPattern: string;
34
+ recoverySteps: string[];
35
+ successRate: number;
36
+ timesUsed: number;
37
+ lastSuccess: string;
38
+ }
39
+ export interface SourceCodeFix {
40
+ id: string;
41
+ filePath: string;
42
+ description: string;
43
+ originalCode: string;
44
+ fixedCode: string;
45
+ failureType: string;
46
+ validatedCount: number;
47
+ appliedToSource: boolean;
48
+ }
49
+ /**
50
+ * Detect failure from output/response
51
+ */
52
+ export declare function detectFailure(output: string, context: {
53
+ toolCalls?: ToolCallRecord[];
54
+ userMessage?: string;
55
+ }): FailureSignal | null;
56
+ /**
57
+ * Record an action and detect if we're in a loop
58
+ */
59
+ export declare function recordActionAndDetectLoop(action: string): FailureSignal | null;
60
+ /**
61
+ * Clear action history (call after successful task completion)
62
+ */
63
+ export declare function clearActionHistory(): void;
64
+ /**
65
+ * Find a recovery strategy for a failure type
66
+ */
67
+ export declare function findRecoveryStrategy(failure: FailureSignal): RecoveryStrategy | null;
68
+ /**
69
+ * Record a successful recovery strategy
70
+ */
71
+ export declare function recordRecoveryStrategy(failure: FailureSignal, recoverySteps: string[], success: boolean): void;
72
+ /**
73
+ * Generate a prompt for recovering from failure
74
+ */
75
+ export declare function generateRecoveryPrompt(failure: FailureSignal, originalApproach: string, taskType: string): string;
76
+ /**
77
+ * Record a potential source code fix
78
+ */
79
+ export declare function recordPotentialSourceFix(filePath: string, description: string, originalCode: string, fixedCode: string, failureType: string): void;
80
+ /**
81
+ * Get all source code fixes
82
+ */
83
+ export declare function getSourceCodeFixes(): SourceCodeFix[];
84
+ /**
85
+ * Get validated source fixes that should be applied
86
+ */
87
+ export declare function getValidatedSourceFixes(minValidations?: number): SourceCodeFix[];
88
+ /**
89
+ * Mark a fix as applied to source
90
+ */
91
+ export declare function markFixApplied(fixId: string): void;
92
+ /**
93
+ * Check if we should suggest applying fixes to erosolar source
94
+ */
95
+ export declare function suggestSourceUpdates(workingDir: string): {
96
+ shouldSuggest: boolean;
97
+ fixes: SourceCodeFix[];
98
+ reason: string;
99
+ };
100
+ /**
101
+ * Generate commit message for learning-based updates
102
+ */
103
+ export declare function generateLearningCommitMessage(fixes: SourceCodeFix[]): string;
104
+ export interface RecoveryResult {
105
+ recovered: boolean;
106
+ approach: string;
107
+ strategy?: RecoveryStrategy;
108
+ qualityImprovement: number;
109
+ }
110
+ /**
111
+ * Main entry point for failure recovery
112
+ * Call this when a failure is detected
113
+ */
114
+ export declare function initiateRecovery(failure: FailureSignal, originalApproach: string, toolCalls: ToolCallRecord[], userQuery: string): {
115
+ recoveryPrompt: string;
116
+ strategy: RecoveryStrategy | null;
117
+ };
118
+ /**
119
+ * Record successful recovery for future use
120
+ */
121
+ export declare function recordSuccessfulRecovery(failure: FailureSignal, recoveryApproach: string, toolCalls: ToolCallRecord[], userQuery: string, qualityScore: number): void;
122
+ //# sourceMappingURL=failureRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failureRecovery.d.ts","sourceRoot":"","sources":["../../src/core/failureRecovery.ts"],"names":[],"mappings":"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"}