fix(opencode): show human-readable message for HTML error responses#15407
Open
rianvdm wants to merge 1 commit intoanomalyco:devfrom
Open
fix(opencode): show human-readable message for HTML error responses#15407rianvdm wants to merge 1 commit intoanomalyco:devfrom
rianvdm wants to merge 1 commit intoanomalyco:devfrom
Conversation
When a gateway or proxy (e.g. Cloudflare Access) returns an HTML error page instead of JSON, the error handler was dumping raw HTML markup into the terminal. This detects HTML response bodies and substitutes a helpful, actionable message instead.
Contributor
|
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue for this PR
Closes #15406
Type of change
What does this PR do?
When OpenCode is behind a gateway or proxy that returns HTML error pages (e.g. Cloudflare Access returning a 401), the error handler in
packages/opencode/src/provider/error.tsdumps raw HTML into the terminal becauseJSON.parsefails on the response body and it falls through toreturn \${msg}: ${e.responseBody}``.This adds a check after the JSON parse attempt: if the response body starts with
<!doctypeor<html>, return a clean message instead of the markup. For 401 it tells the user to runopencode auth login, for 403 it suggests checking account/provider settings, and for other status codes it returns the status text alone.The regex only matches HTML — JSON error responses are completely unaffected.
How did you verify your code works?
Reproduced the issue with a Cloudflare Access-protected provider endpoint where an expired token produces an HTML 401 response. Confirmed the new code path triggers and displays the clean message instead of raw HTML. Also confirmed that normal JSON API errors (e.g. from OpenAI, Anthropic) are unaffected since they don't match the HTML regex.
Screenshots / recordings
Before:
After:
Checklist