diff options
Diffstat (limited to 'internal/executor/helpers.go')
| -rw-r--r-- | internal/executor/helpers.go | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/internal/executor/helpers.go b/internal/executor/helpers.go index 9517492..f2111a4 100644 --- a/internal/executor/helpers.go +++ b/internal/executor/helpers.go @@ -33,7 +33,6 @@ func parseStream(r io.Reader, w io.Writer, logger *slog.Logger) (float64, string var sessionID string var streamErr error -Loop: for scanner.Scan() { line := scanner.Bytes() var msg map[string]interface{} @@ -53,22 +52,26 @@ Loop: if info, ok := msg["rate_limit_info"].(map[string]interface{}); ok { status, _ := info["status"].(string) if status == "rejected" { - streamErr = fmt.Errorf("claude rate limit reached (rejected): %v", msg) - // Immediately break since we can't continue anyway - break Loop + if streamErr == nil { + streamErr = fmt.Errorf("claude rate limit reached (rejected): %v", msg) + } } } case "assistant": if errStr, ok := msg["error"].(string); ok && errStr == "rate_limit" { - streamErr = fmt.Errorf("claude rate limit reached: %v", msg) + if streamErr == nil { + streamErr = fmt.Errorf("claude rate limit reached: %v", msg) + } } case "result": if isErr, _ := msg["is_error"].(bool); isErr { - result, _ := msg["result"].(string) - if result != "" { - streamErr = fmt.Errorf("claude task failed: %s", result) - } else { - streamErr = fmt.Errorf("claude task failed (is_error=true in result)") + if streamErr == nil { + result, _ := msg["result"].(string) + if result != "" { + streamErr = fmt.Errorf("claude task failed: %s", result) + } else { + streamErr = fmt.Errorf("claude task failed (is_error=true in result)") + } } } // Prefer total_cost_usd from result message; fall through to legacy check below. |
