erosolar-cli 2.1.217 → 2.1.219

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.
@@ -0,0 +1,83 @@
1
+ import { sleep } from './asyncUtils.js';
2
+ const RETRYABLE_KEYWORDS = [
3
+ 'timeout',
4
+ 'network',
5
+ 'rate limit',
6
+ 'too many requests',
7
+ 'service unavailable',
8
+ ];
9
+ function deriveErrorCode(error) {
10
+ if (error.name && error.name !== 'Error') {
11
+ return error.name.toUpperCase();
12
+ }
13
+ const normalized = error.message
14
+ .trim()
15
+ .replace(/[^\w]+/g, '_')
16
+ .replace(/^_+|_+$/g, '')
17
+ .toUpperCase();
18
+ return normalized || undefined;
19
+ }
20
+ export function createErrorDetails(error, context) {
21
+ const timestamp = new Date().toISOString();
22
+ if (error instanceof Error) {
23
+ return {
24
+ message: error.message,
25
+ code: deriveErrorCode(error),
26
+ context,
27
+ stack: error.stack,
28
+ timestamp,
29
+ };
30
+ }
31
+ return {
32
+ message: String(error),
33
+ context,
34
+ timestamp,
35
+ };
36
+ }
37
+ export function formatErrorForLogging(error, context) {
38
+ const details = createErrorDetails(error, context);
39
+ const parts = [`Error: ${details.message}`];
40
+ if (context) {
41
+ parts.push(`Context: ${JSON.stringify(context)}`);
42
+ }
43
+ parts.push(`Stack: ${details.stack ?? '(not available)'}`);
44
+ parts.push(`Timestamp: ${details.timestamp}`);
45
+ return parts.join('\n');
46
+ }
47
+ export function isRetryableError(error) {
48
+ if (error && typeof error === 'object' && 'retryable' in error) {
49
+ const retryableFlag = error.retryable;
50
+ if (typeof retryableFlag === 'boolean') {
51
+ return retryableFlag;
52
+ }
53
+ }
54
+ const message = error instanceof Error
55
+ ? error.message
56
+ : typeof error === 'string'
57
+ ? error
58
+ : '';
59
+ if (!message) {
60
+ return false;
61
+ }
62
+ const normalized = message.toLowerCase();
63
+ return RETRYABLE_KEYWORDS.some(keyword => normalized.includes(keyword));
64
+ }
65
+ export async function withRetry(operation, maxRetries = 3, delayMs = 100) {
66
+ let attempts = 0;
67
+ // eslint-disable-next-line no-constant-condition
68
+ while (true) {
69
+ try {
70
+ return await operation();
71
+ }
72
+ catch (error) {
73
+ if (!isRetryableError(error) || attempts >= maxRetries) {
74
+ throw error;
75
+ }
76
+ attempts += 1;
77
+ if (delayMs > 0) {
78
+ await sleep(delayMs);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=errorUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "erosolar-cli",
3
- "version": "2.1.217",
3
+ "version": "2.1.219",
4
4
  "description": "Unified AI agent framework for the command line - Multi-provider support with schema-driven tools, code intelligence, and transparent reasoning",
5
5
  "main": "dist/bin/erosolar.js",
6
6
  "type": "module",