You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,9 @@
4
4
5
5
- Fix MCP OAuth credentials cache not invalidating when the server URL changes.
6
6
- Add `isSubagent` condition variable for chat system instructions
7
+
-**Breaking:** Replace `bodyPattern` with `errorPattern` in `retryRules`, which matches against any error text (response body, error message, or exception message).
8
+
- Retry on "Remote host terminated the handshake" TLS errors.
9
+
- Fix empty "Error: " message on connection failures (e.g. DNS resolution, connection refused) and retry them as transient errors.
Copy file name to clipboardExpand all lines: docs/config.json
+6-6Lines changed: 6 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -477,8 +477,8 @@
477
477
},
478
478
"retryRules": {
479
479
"type": "array",
480
-
"description": "Custom retry rules. Each rule can match by HTTP status code and/or response body regex pattern. When matched, the request is retried with exponential backoff.",
481
-
"markdownDescription": "Custom retry rules. Each rule can match by HTTP status code and/or response body regex pattern. When matched, the request is retried with exponential backoff.",
480
+
"description": "Custom retry rules. Each rule can match by HTTP status code and/or error text regex pattern. When matched, the request is retried with exponential backoff.",
481
+
"markdownDescription": "Custom retry rules. Each rule can match by HTTP status code and/or error text regex pattern. When matched, the request is retried with exponential backoff.",
482
482
"items": {
483
483
"type": "object",
484
484
"properties": {
@@ -487,10 +487,10 @@
487
487
"description": "HTTP status code to match.",
488
488
"markdownDescription": "HTTP status code to match."
489
489
},
490
-
"bodyPattern": {
490
+
"errorPattern": {
491
491
"type": "string",
492
-
"description": "Regex pattern to match against the response body(case-insensitive).",
493
-
"markdownDescription": "Regex pattern to match against the response body(case-insensitive)."
492
+
"description": "Regex pattern to match against any error text — response body, error message, or exception message (case-insensitive). Useful for connection-level errors that have no HTTP status.",
493
+
"markdownDescription": "Regex pattern to match against any error text — response body, error message, or exception message (case-insensitive). Useful for connection-level errors that have no HTTP status."
Copy file name to clipboardExpand all lines: docs/config/models.md
+7-6Lines changed: 7 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,7 +78,7 @@ Schema:
78
78
|`thinkTagStart`| string | Optional override the think start tag tag for openai-chat (Default: "<think>") api | No |
79
79
|`thinkTagEnd`| string | Optional override the think end tag for openai-chat (Default: "</think>") api | No |
80
80
|`httpClient`| map | Allow customize the http-client for this provider requests, like changing http version | No |
81
-
|`retryRules`| array | Custom retry rules that match by HTTP status and/or body regex pattern (see [Retry Rules](#retry-rules)) | No |
81
+
|`retryRules`| array | Custom retry rules that match by HTTP status and/or error pattern (see [Retry Rules](#retry-rules)) | No |
82
82
|`models`| map | Key: model name, value: its config | Yes |
83
83
|`models <model> extraPayload`| map | Extra payload sent in body to LLM | No |
84
84
|`models <model> extraHeaders`| map | Extra headers sent to LLM request | No |
@@ -233,15 +233,15 @@ Notes:
233
233
234
234
### Retry Rules
235
235
236
-
ECA automatically retries requests on common transient errors (429, 500, 502, 503, 529) with exponential backoff. You can define custom retry rules per provider using `retryRules` to handle additional status codes or response body patterns.
236
+
ECA automatically retries requests on common transient errors (429, 500, 502, 503, 529) with exponential backoff. You can define custom retry rules per provider using `retryRules` to handle additional status codes or error patterns.
237
237
238
238
Each rule can match by:
239
239
240
240
-**`status`** (integer): HTTP status code to match
241
-
-**`bodyPattern`** (string): Regex pattern to match against the response body(case-insensitive)
241
+
-**`errorPattern`** (string): Regex pattern to match against any error text — response body, error message, or exception message (case-insensitive). Useful for both HTTP response errors and connection-level errors (e.g. TLS handshake failures)
242
242
-**`label`** (string, optional): Human-readable text shown in the retry progress message
243
243
244
-
At least one of `status` or `bodyPattern` is required. When both are specified, both must match. Custom rules are checked before built-in classification, so they can override default behavior.
244
+
At least one of `status` or `errorPattern` is required. When both are specified, both must match. Custom rules are checked before built-in classification, so they can override default behavior.
245
245
246
246
```javascript title="~/.config/eca/config.json"
247
247
{
@@ -252,8 +252,9 @@ At least one of `status` or `bodyPattern` is required. When both are specified,
0 commit comments