plandex-ai/plandex · error

error reading error response: %w

Error message

error reading error response: %w

What it means

The provider returned an HTTP error status, and reading that error response body with io.ReadAll also failed. The original API error is lost because the body could not be drained (connection reset mid-body).

Source

Thrown at app/server/model/client.go:370

		req.Header.Set("Authorization", "Bearer "+client.ApiKey)
	}
	if client.OpenAIOrgId != "" {
		req.Header.Set("OpenAI-Organization", client.OpenAIOrgId)
	}

	addOpenRouterHeaders(req)

	// Send the request
	resp, err := httpClient.Do(req) //nolint:bodyclose // body is closed in stream.Close()
	if err != nil {
		return nil, fmt.Errorf("error making request: %w", err)
	}

	if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusBadRequest {
		defer resp.Body.Close()
		body, err := io.ReadAll(resp.Body)
		if err != nil {
			return nil, fmt.Errorf("error reading error response: %w", err)
		}
		return nil, &HTTPError{
			StatusCode: resp.StatusCode,
			Body:       string(body),
			Header:     resp.Header.Clone(), // retain Retry-After etc.
		}
	}

	// Log response headers
	// log.Println("Response headers:")
	// for key, values := range resp.Header {
	// 	log.Printf("%s: %v\n", key, values)
	// }

	reader := &StreamReader[types.ExtendedChatCompletionStreamResponse]{
		reader:             bufio.NewReader(resp.Body),
		response:           resp,
		emptyMessagesLimit: 30,

View on GitHub (pinned to e2d772072e)

Solutions

  1. Retry the request to get a fresh response
  2. Check provider status/health if errors persist
  3. Log the status code alongside to diagnose the original API error
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at app/server/model/client.go:370 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of plandex-ai/plandex@e2d772072e (2026-09-05). Data as JSON: /api/errors/cf856126ce30dacd. Report an issue: GitHub.